首页 > 其他分享 >mmseg4j 中文分词器的一些简介整理

mmseg4j 中文分词器的一些简介整理

时间:2023-06-21 22:04:59浏览次数:39  
标签:分词器 mmseg4j 简介 dic lucene 词库 data 分词

在 lucene 中,我们是使用 IndexWriter 调用 Analyzer 将文章切成以词为单位的 Stream,然后生成索引的。lucene 内建的分词器很多,比如:按空白字符分词的WhitespaceAnalyzer,添加了stopword过滤的StopAnalyzer,以及最常用的是StandardAnalyzer。这些自带的分词器对中文支持多不好,我觉得比较好的中文分词器是 mmseg4j

 

mmseg4j 是用 Chih-Hao Tsai 的 MMSeg 算法实现的中文分词器。并实现了 lucene 的 analyzer 和 solr 的 TokenizerFactory 以方便在 Lucene 和 Solr 中使用。

 

对 lucene  来说 ,mmseg4j 有以下四个 analyzer:SimpleAnalyzer、ComplexAnalyzer、MaxWordAnalyzer、MMSegAnalyzer。前面三个都是继承 MMSegAnalyzer,MMSegAnalyzer 默认使用 max-word 方式分词。

 

上面四个分次类涉及到了三个分词方法:Simple、Complex、max-word。MMSeg 算法有两种分词方法:Simple 和 Complex,都是基于正向最大匹配。mmseg4j  1.6 版开始在 Complex 算法基础上实现了最多分词(max-word)。类似如下的分词就是 max-word 分词:“很好听” -> "很好|好听"; “中华人民共和国” -> "中华|华人|共和|国"; “中国人民银行” -> "中国|人民|银行"。

 

mmseg4j 的词库是使用 utf-8 格式的,由于 utf-8 文件有带与不带 BOM 之分,建议词库第一行为空行或为无 BOM 格式的 utf-8 文件。

 

jar 中已有了,只有你对这个不满意时才需要替换的词库文件:

  • data/chars.dic 是单字与语料中的频率,一般不用改动,mmseg4j 1.5版本后已经加到mmseg4j的jar里了,我们不需要关心它,当然你在词库目录放这个文件可以覆盖它。
  • data/units.dic 是单字的单位,默认读jar包里的,你也可以自定义覆盖它,这功能是试行,如果不喜欢它,可以空的units.dic文件(放到你的词库目录下)覆盖它。

词库文件:

  • data/words.dic 是词库文件,一行一词,当然你也可以使用自己的,1.5版本使用 sogou 词库,1.0的版本是用 rmmseg 带的词库。 一般我们使用这个作为系统自带词库。分词效果当然还与词库有关,sogou 的词库是统计得出,有些高频的单字组合也成了词,如“我们的”。如果还要提高 mmseg4j 的分词效果,还要在整理下词库。
  • data/wordsxxx.dic 1.6版支持多个词库文件,data 目录(或你定义的目录)下读到"words"前缀且".dic"为后缀的文件。如:data/words-my.dic。 一般我们在这里里面,把这个当成我们自身特色的词库。

停止词

  • mmseg4j 没有加任何 stopword,如果需要 stopword  ,需要用户自己实现。作者认为:这东西留给使用者自己加,因为作者不认为加 stopword 是好的方法。如音乐搜索,给加上 the,this……,还能找到歌曲?

 

参考资料:

mmseg4j 作者的博客
http://blog.chenlb.com

中文分词 mmseg4j 在 lucene 中的使用示例
http://blog.chenlb.com/2009/04/use-chinese-segment-mmseg4j-in-lucene-demo.html

Lucene中文分词
http://www.fallever.com/blog/jeff/tag/49/

标签:分词器,mmseg4j,简介,dic,lucene,词库,data,分词
From: https://blog.51cto.com/u_15588078/6532080

相关文章

  • Gradle简介
    gradle跟ant/maven一样,是一种依赖管理/自动化构建工具。但是跟ant/maven不一样,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。基本配置build.gradle首先明确gradle跟maven一样,也有一个配置文件,maven里面是叫pom.xml,而在gra......
  • jmeter入门简介
    1.引入1.1为什么要学习jmeter免费开源多系统兼容轻量级工具易用插件丰富功能强大接口功能测试接口自动化测试(jmeter+maven/ant+jenkins)接口性能测试与其他性能测试工具比较:apacheAB:不接受服务器返回数据,只返回code,比jmeter快,返回结果无意义loadrunner:商用......
  • 全网最新最全首届“陇剑杯”网络安全大赛完整WIRTEUP --- 简介
    分为理论题和ctf题目理论题20道,单选10个,多选10个,全队只能答1次,考察法律和理论技术ctf题目分为11个大题,具体是签到(1题)、jwt(6题)、webshell(7题)、日志分析(3题)、流量分析(3题)、内存分析(2题)、简单日志分析(3题)、SQL注入(3题)、wifi(1题)、ios(8题)、机密内存(5题),大题主中包......
  • 官方Radare2书之简介
    本书是原radare1书(作者:pancake)的更新版本(更新:maijin)。它由许多网上志愿者积极更新维护。查看Github网站,添加新的内容或修正错别字。Github:https://github.com/radareorg/radare2book在线:https://radareorg.github.io/radare2book/index.htmlhttps://book.rada.re/index.h......
  • 西门子1200PLC和KTP700触摸屏控制西门子V90伺服电机例子程序 程序简介
    西门子1200PLC和KTP700触摸屏控制西门子V90伺服电机例子程序程序简介:可以实现V90伺服电机的正转、反转控制,相对位置和绝对位置运行,设置电机的当前位置、速度,显示电机的运行状态等功能,5000个脉冲对应一圈,参数设定和显示单位是脉冲硬件平台:西门子S7-1200PLC(CPU1215C)+KTP700触摸屏+......
  • 七、Spring Cloud Alibaba Sentinel简介
    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。一、特性丰富......
  • 台达PLC Modbus通讯程序文档内容: Modbus RTU简介 台达MS300变频器写频率
    台达PLCModbus通讯程序文档内容:ModbusRTU简介台达MS300变频器写频率,读电流、报警;施耐德ATV12变频器的写频率,读状态、输出频率;金田JTE320S变频器的写频率,读电流、报警;易驱CV310变频器的写频率,读状态、输出电流、频率、报警;台达CP2000变频器的写启停、频率,读输出频率、电流、状态......
  • AIGC:入门简介
    当提到AIGC(ArtificialIntelligenceandGeneralComputing,人工智能与通用计算)时,我们涉及到了两个重要的领域:人工智能和通用计算。本文将带您了解AIGC的基础知识,从入门到精通。第一部分:入门什么是人工智能(AI)?人工智能是一种模拟人类智慧的科学和技术。它涉及构建智能系统,使其......
  • 【后端面经-Java】Java创建线程的方法简介
    (【后端面经-Java】Java创建线程的方法简介)1.线程的基本概念1.1线程学过操作系统的同学应该不陌生,线程是计算机中的最小调度单元,一个进程可以有多个线程,执行并发操作,提高任务的运行效率1.2线程状态和生命周期线程状态包括:新建(new):线程创建而尚未启动的阶段;就绪态(r......
  • 【后端面经-Java】Java创建线程的方法简介
    目录1.线程的基本概念1.1线程1.2线程状态和生命周期2.创建线程的四种方法2.1继承Thread类2.2实现Runnable接口2.3实现Callable接口2.4使用线程池3.参考资料1.线程的基本概念1.1线程学过操作系统的同学应该不陌生,线程是计算机中的最小调度单元,一个进程可以有多个线程......