`
chenlb
  • 浏览: 696468 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

讨论 mmseg4j 的现状,与改进。

阅读更多

发布最新一个 mmseg4 (1.7.2 与 1.6.2)版,距今也有几个月了。max-word 方式还不完善,有很多需要改进的地方。由于没有个好的想法,以至几个月都没更新。mmseg4j 项目也受到一些的关注,十分有必要改进。这贴说明下 mmseg4 的现状和 todo 功能,同时希望 javaeyer 们给予些建议或想法。

 

字符的处理:先断开不同类型的字符,断开的成为一个“句子”(类:Sentence)。

  • 英文、俄文、希腊、数字、其它数字(如:①⑩㈠㈩⒈⒑⒒⒛⑴⑽⑾⒇),分出连续同类型字符。如:mmseg4j 会分出 mmseg,4,j 三个词。改进:英文开头的英文与数据混的应该不分开
  • LETTER_NUMBER (如:ⅠⅡⅢ)单字分。
  • OTHER_LETTER 类型的字符(基本就是 cjk),会用 mmseg 算法分词。
  • 数字后面是 units.dic 文件出现的字,会单分。主要考虑单位字,改进:单位应该支持词,而不是单个字
  • 除了上面的字符类型的字符都会被忽视。比如符号: ★∑。

 Simple 方式就没什么好说和改进的了。Complex 方式的一个缺点:“都是先从容易的做起” 分为 “都是 | 先 | 从容 | 易 | 的 | 做起”,“容易”分不出来(“从”的频率高于“易”,因此分出“容易”更合理)。是由于mmseg 算法用3个chunk来比较那个更合理,“容易”已经是第4个 chunk了,所以无法参与比较。我曾经想过用一句话比较这些频率信息(要改进吗?),当然要更多的开销。mmseg 作者选3个可能是效果与性能平衡吧。

 

max-word 方式,是我在 Complex 基础上加了一个分词方式。就是把 complex 分出的词再柝出其它词。目前用 max-word 方式分出的词的长度不会超过2。

 

有人词为什么是不超过2?

考虑到很多长词基本都是由 2-3 个字的词组成的。又考虑到类似"咖啡" 能找到 “咖啡厅”,所以草率地决定词长最长为2。

假设:"咖啡" 和 “咖啡厅” 在词库中,max-word 方式分为 "咖啡 | 厅","咖啡" 和 “咖啡厅” 搜索时(默认Lucene 的 QueryParser 解析出来的 “短语查询”)都可以找到 “咖啡厅”。

 

当然还考虑到complex 分出长度 >= 4的情况,以这种方式也比较好处理。

 

有一些情况不顺眼的:“为什么” 分成 "为 | 什么"。

 

个人觉得:C1C2C3 只有 C1C2 和 C2C3 是词才分出 C1C2 和 C2C3 其它情况应该不再柝分 C1C2C3 了。

 

大部分的搜索应用场景用 max-word 方式的效果都会比 simple 和 complex 要好。之前我喜欢 paoding 的主要理由也是这个。

 

关于 max-word 方面的确没有更好的想法,还希望各位出出主意。

 

要 todo 的功能:

  • 默认的词库目录应该在 classpath 下data目录。目前是在 user.dir 下data目录(这样使用 mmseg4j 有些麻烦,之前主要考虑在 solr 中使用方便)。
  • 自动检测词库目录,并自动加载。看了:当前几个主要的Lucene中文分词器的比较
  • 整理词库 -  好的词库也会影响分词效果,去除 sogou 的高频无用的词(比如:我们的)。再丰富下词库。
  • 上面提到的改进
  • 提供添加词库的 api ?
  • 需要有繁体转简体?

 

 

 

分享到:
评论
3 楼 chenlb 2009-08-05  
QuakeWang 写道
能否举个实际的例子来说明max-word比complex好?


主要也是因为词库中长词问题。还有支持自定义词库,很可能是用户自己添加地名、机构名等。

整理词库十分有必要。

QuakeWang 写道
不过我对于Lucene的内部机制不是很了解,据说Lucene拿到的是文本流,只能作正向?


Lucene 是用 Reader。如果工反向只能读完一个句子再分析。

QuakeWang 写道
将非汉字(你文章中提到的英文/罗马字符/中文符号等)交给standard tokenizer处理,只有汉字才给mmseg4j处理。


这建议倒可以尝试下,不过目前也是只有汉字才给 mmseg4j 的核心功能处理(mmseg 算法),其它字符都是在 mmseg 分词前处理。
2 楼 QuakeWang 2009-08-05  
关于非中文字符,我觉得不应该包含在mmseg4j的核心功能中,可以实现一个独立的Lucene的filter,将非汉字(你文章中提到的英文/罗马字符/中文符号等)交给standard tokenizer处理,只有汉字才给mmseg4j处理。

疑问:
引用

大部分的搜索应用场景用 max-word 方式的效果都会比 simple 和 complex 要好。之前我喜欢 paoding 的主要理由也是这个。

能否举个实际的例子来说明max-word比complex好?

另外,最大匹配算法的扫描方向如果能够支持反向,对分词的精确度会有非常大提高,以常拿来作分词例子的句子“研究生命科学”为例,如果能够支持反向,那么用simple算法也能够正确分出“研究|生命|科学",不过我对于Lucene的内部机制不是很了解,据说Lucene拿到的是文本流,只能作正向?
1 楼 QuakeWang 2009-08-05  
JavaEye目前用的是solo写的mmseg分词算法,这个实现中没有max-word方式,我们采用了他默认的complex方式,对于JavaEye这种技术类型的网站来说,我们觉得mmseg complex实际效果已经令人满意了。

它词库用的和你在mmseg4j提供的不一样,几乎没有长词,以你在文章中提到的“咖啡厅”为例子,它词库中并没有这个词,只有“咖啡”,所以用complex方式也是分为 "咖啡 | 厅",用"咖啡" 和 “咖啡厅” 搜索时也都可以找到 “咖啡厅”。

关于词库的问题,这是我之前和你站内短信沟通过的,重贴出来:
引用

以'广州天气'这个词组为例子
对'广州天气今天达到了38度,非常热'建立索引:
广州天气 |今天|达到了|38|度|非常|热
用户输入'广州 天气 热'就找不到结果,必须输入'广州天气 热'才可以。
如果将长词组去掉,因为原本有'广州'和'天气'2个词了,就可以实现前面的搜索要求。


我觉得如果整理词库,去掉这些长词,直接用complex也会有很好的效果。

相关推荐

    mmseg4j-solr-2.4.0.jar

    《mmseg4j在Solr中的应用与实践》 在信息检索和文本处理领域,中文分词是至关重要的一步,它决定了文本理解的准确性。在Java环境下,mmseg4j是一个广泛使用的开源中文分词库,它为Java开发者提供了强大的中文处理...

    mmseg4j\mmseg4j-1.8.5.zip

    《mmseg4j:中文分词利器》 mmseg4j是一个专为Java设计的高效中文分词库,它的核心是基于"最小编辑距离"算法的分词方法,旨在提高中文文本处理的效率和准确性。在Java开发环境中,面对海量中文文本的处理,mmseg4j...

    mmseg4j.jar

    2. **mmseg4j-solr-2.4.0.jar**:这是mmseg4j与Apache Solr集成的扩展包。Solr是一个流行的开源搜索服务器,mmseg4j-solr使得mmseg4j能够无缝地集成到Solr中,为Solr提供强大的中文分词支持,提升全文检索的效果。 ...

    mmseg4j-solr-mmseg4j-solr-2.2.0.zip

    当mmseg4j与Solr结合时,mmseg4j-solr便成为了一个强大的中文处理插件。Solr,是Apache Lucene项目下的一个开源搜索服务器,广泛用于构建全文搜索引擎。mmseg4j-solr的引入,使得Solr能够更好地处理中文文本,提高了...

    mmseg4j-solr-2.2.0.jar mmseg4j-analysis-1.9.1.jar mmseg4j-solr-2.2.0.jar

    本人用的solr是4.10的,经过本人亲测可用,放心下载,包含以下3个jar包: mmseg4j-analysis-1.9.1.jar, mmseg4j-core-1.9.1.jar, mmseg4j-solr-2.2.0.jar

    mmseg4j-solr-2.1.0-with-mmseg4j-core.zip

    《mmseg4j-solr-2.1.0-with-mmseg4j-core.zip:Solr4.8与mmseg4j分词器的集成详解》 在信息检索和文本挖掘领域,搜索引擎扮演着至关重要的角色,而Apache Solr作为一款高效、可扩展的开源全文搜索平台,被广泛应用...

    mmseg4j-1.9.1

    《mmseg4j-1.9.1:中文分词技术的卓越实践》 在中文信息处理领域,分词是至关重要的第一步,它涉及到搜索引擎、文本挖掘、机器翻译等多个应用场景。mmseg4j是一个专门为Java设计的高效中文分词工具,它的出现极大地...

    solr6配置mmseg4j

    在Solr6中配置mmseg4j是为了实现中文分词,从而提升搜索效果。mmseg4j是基于Java的一个高性能中文分词库,它提供了多种分词算法,如最长匹配、最短路径等,以满足不同的分词需求。 首先,我们需要理解Solr6的基本...

    mmseg4j 2.3 jar包

    mmseg4j采用了多级分词策略,主要包括四种分词模式:精确模式、全模式、简模式和搜索引擎模式。这些模式可根据实际应用场景灵活选择,以平衡分词速度和准确性。 **3. Lucene集成** Lucene是Apache开源项目的一款高...

    mmseg4j-all-with-dic-1.8.6-sources.jar和mmseg4j-all-with-dic-1.8.6.jar

    在实际应用中,mmseg4j与Apache Lucene的结合使用,能够构建出强大的中文全文检索系统。Lucene是一款高性能、全文索引的开源库,而mmseg4j则是其进行中文处理的重要组件。当用户输入中文查询时,mmseg4j会将查询字符...

    兼容solr4.10.3的mmseg4j-1.9.1分词器

    "兼容solr4.10.3的mmseg4j-1.9.1分词器" 这个标题表明我们正在讨论的是一个针对Solr 4.10.3版本优化的mmseg4j分词器,版本号为1.9.1。mmseg4j是一款广泛使用的Java实现的中文分词库,它提供了高效且精准的中文分词...

    mmseg4j最新jar完美整合solr-5.3.0

    《mmseg4j在Solr-5.3.0中的集成与...总结来说,将mmseg4j与Solr-5.3.0整合,可以显著提升中文搜索的性能和准确性。通过合理的配置和字典管理,开发者可以充分利用mmseg4j的强大功能,构建出更加智能的信息检索系统。

    mmseg4j-1.9.1 分词器 包含修复bug的mmseg4j-analysis-1.9.1.jar

    在`修复bug下`的`mmseg4j-analysis-1.9.1.jar`文件是经过修复的版本,针对之前版本中出现的问题进行了改进。这通常包括解决内存泄漏、提升并发处理能力、优化分词效率或者改进对特定语境下的分词准确性等。更新此...

    mmseg4j完美适配solr5.2.1

    然而,随着Solr版本的不断更新,如何使mmseg4j与新版本的Solr无缝对接成为了一个挑战。在这个问题上,本文将详细介绍如何在Solr5.2.1中完美地使用mmseg4j。 首先,我们需要了解mmseg4j的核心功能。mmseg4j采用四向...

    mmseg4j-core, 用于java中文分析器的mmseg4j核心 MMSEG.zip

    mmseg4j-core, 用于java中文分析器的mmseg4j核心 MMSEG <dependency> <groupId>com.chenlb.mmseg4j</groupId> <artifactId>mmseg4j-core</artif

    mmseg4j分词器jar包

    2. **mmseg算法**: mmseg4j的核心算法基于“最小编辑距离”(Minimum Edit Distance)的改进版,能够有效处理歧义分词问题,提高分词准确率。mmseg算法通过动态规划策略寻找最优的分词路径。 3. **词典(Dictionary...

    mmseg4j jar包

    5. **与Solr的无缝集成**:在Solr5.3.1中可以直接使用mmseg4j,意味着它已经考虑到了搜索引擎的需求,可以有效地提升搜索索引的建立速度和查询性能,同时也支持实时索引更新。 6. **data分词文件**:描述中提到的...

    lucene整合mmseg4j实例和项目实例

    《Lucene整合MMSEG4J实战与项目应用详解》 Lucene是一款强大的全文搜索引擎库,广泛应用于各种信息检索系统中。然而,在处理中文分词时,Lucene原生的分词器可能无法满足复杂的中文语境需求,这时就需要引入第三方...

    mmseg4j-solr-2.3.2-with-mmseg4j-core

    该压缩包包含`mmseg4j-solr-2.3.2.jar`和`mmseg4j-core-1.10.0.jar`,其中solr-2.3.2不是官方的版本,该版本有改动,使得mmseg4j可以很好的支持Solr6,如果你的Solr低于Solr6,请使用官方的mmseg4j-solr-2.3.0.jar...

Global site tag (gtag.js) - Google Analytics