vincent 写道
用庖丁把这句话分词"北京精神文明建设",可分成"北京 精神 精神文明 精神文明建设 文明 建设"(用lukeall打开看,确实有)。ok,问题来了,我查询"精神文明"结果为零。真的不明白为什么???如果按照实际用途,"精神文明建"这个词也应该能搜索出结果。我是用lucene2.2和
paoding结合的,
其实vincent提的这个问题是很棘手的。罪魁祸首是庖丁作者(也就是本人)没能很好了解QueryParser的对短语查询的要求。
比如:对"中华人民共和国"进行分词,如果分为"中华/中华人民/中华人民共和国/华人/人民/人民共和国/共和/共和国/"或"中华/华人/人民/中
华人民/共和/共和国/人民共和国/中华人民共和国/"等,这些分词结果看似完美,但对lucene的QueryParser来说却是有重大缺陷的。
这2种分词结果导致使用"人民共和"通过QueryParser构造Query对象查询不到"中华人民共和国"的文章。
why?
QueryParser把"人民共和"当成一个短语查询,此时我们的分词结果及其顺序必须是 "人民/共和"才能符合它的要求被检索出来。而如果在"人民" 和 "共和"中间出现其他的分词,就如上面的"人民/人民共和国/共和"被"共和国"这个词隔开,这就不符合要求。所以查询不到。
而这是CJKAnalyzer、ChineseAnalyzer以及StandardAnalyzer之类简单做法的中文分词不会出现的。
那么现在应该如何解决这个问题:
“如果1个词能够被其他词语覆盖组成,那么它不应该再被建立索引”。只要满足这个条件QueryParser就很好用了,同时索引库更小,搜索精确度也不会有任何损失(应该说是提高了)。
这样的结果便是:
对"中华人民共和国"的分词结果应该是:"中华/华人/人民/共和/共和国"。虽然"中华人民共和国"在词典中存在。
对"北京精神文明建设"的分词结果是"北京/精神/文明/建设/",虽然"精神文明""精神文明建设"本身在词典也存在。
我已经修改paoding来支持上面的做法,但还没马上提交代码,还需要几天。
(这个修改不涉及CJKKnife的变更。而是1、通过加载字典,判断并把“中华人民共和国”之类的可由其他词语组合的词语从词典中去掉,从而使Knife不认识这些组合词 2、通过增强DefaultTokenCollector.java:由DefaultTokenCollector负责根据词语位置关系按照合理的顺序将CJKKnife分词的结果最终呈现给Lucene)
至于“‘精神文明建’这个词也应该能搜索出‘北京精神文明建设’结果”,则是不可能的。
分享到:
相关推荐
包含翻译后的API文档:lucene-queryparser-6.6.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-queryparser:6.6.0; 标签:queryparser、apache、lucene、jar包、java、API...
标签:queryparser、apache、lucene、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
中文分词是将连续的汉字序列切分成具有语义的词语的过程,是自然语言处理(NLP)中的基础步骤。在Lucene.NET中,为了支持中文分词,通常需要结合第三方分词器,如IK Analyzer、HanLP、jieba.NET等。这些分词器具备...
1. 分词器性能优化:根据实际应用场景选择合适的分词器,如对新词识别要求高可选用IK Analyzer,对专业领域词汇处理则考虑Paoding Analyzer。 2. 词典定制:针对特定领域,可以自定义词典以提高分词准确性,例如增加...
word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...
标签:apache、lucene、queryparser、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
标签:apache、lucene、queryparser、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
标签:apache、lucene、queryparser、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
包含翻译后的API文档:lucene-queryparser-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-queryparser:7.3.1; 标签:apache、lucene、queryparser、中英对照文档、jar...
盘古分词是针对中文文本处理的分词工具,特别适用于Lucene等搜索引擎的中文分词。它支持多种分词模式,如精确模式、全模式、简明模式和搜索引擎模式,以满足不同场景的需求。在Lucene.Net中,集成盘古分词可以显著...
资源分类:Python库 所属语言:Python 资源全名:queryparser-python2-0.2.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
2. 中文分词算法:Lucene 3.5默认使用了IK Analyzer(智能中文分析器),这是一种基于词典的分词方法,通过构建词典并结合正向最大匹配和逆向最大匹配算法,能够有效地对中文文本进行分词。此外,还有如HanLP、jieba...
为了增强Lucene在中文环境下的表现,需要对Lucene的默认分析器进行扩展,引入中文分词器。常见的中文分词器有: - **Jieba分词**:一款流行的开源中文分词工具,支持精确模式和搜索引擎模式。 - **IK分词**:针对...
1. **中文分词**:由于中文没有明显的词边界,盘古分词是专门针对中文设计的分词工具,能够准确地将连续的汉字序列切分成具有实际意义的词语。 2. **自定义词典**:盘古分词支持用户自定义词典,可以根据具体业务...
包含翻译后的API文档:lucene-queryparser-7.7.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-queryparser:7.7.0; 标签:apache、lucene、queryparser、中英对照文档、jar...
包含翻译后的API文档:lucene-queryparser-7.2.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-queryparser:7.2.1; 标签:apache、lucene、queryparser、中英对照文档、jar...
**标题:“如何使用Lucene的中文分词搜索”** 在信息检索和文本处理领域,Apache Lucene是一个强大的全文搜索引擎库,它提供了高级的索引和搜索功能。在处理中文文本时,由于中文句子是由词语组成的,而非单个字符...
标题中的"PyPI 官网下载 | queryparser-python2-0.3.tar.gz"表明这是一个在Python Package Index(PyPI)官方源上发布的软件包,名为`queryparser-python2-0.3`,且格式为tar.gz。PyPI是Python开发者分享和分发自己...
`smart`模式适用于对速度有较高要求的场景,而`fine`模式则能更细致地分析语义,但相对较慢。在实例中,通常根据需求选择合适的分词模式。 3. **创建索引** 首先,需要从网页抓取内容。这通常涉及网络请求和HTML...
除此之外,QueryParser.jj还包含了对通配符、短语查询、范围查询等多种高级查询结构的支持。例如,"TERM*"代表带有通配符的查询,"TERM1 TO TERM2"则表示范围查询,寻找在TERM1和TERM2之间的值。 理解QueryParser....