`
lies_joker
  • 浏览: 40504 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ansj分词器和solr结合的零零碎碎

阅读更多
在solr4.8使用的章节里我讲了很多有关ansj分词器的用法以及相关描述和个人看法。这里新开一篇专门描述。

传送门:https://github.com/ansjsun/ansj_seg/
作者是个年轻的技术男,github上有他的微博,可以和他沟通交流问题(加粉吧,虽然微博现在不流行了,但是这么好的分词器的作者才800多粉丝看着心疼)。

ansj最新版下载下来有40+MB,不过新特性自然语言方面用到的crf.model(NlpAnalysis分词会用到)占了37MB,一般做搜索的是用不到的,所以直接精简掉吧,立刻很轻松有木有。去掉之后就不能再用NlpAnalysis分词了,不过因为分词器通常和索引以及搜索混合使用,建议用ToAnalysis即可。

ansj附加词库是比较前卫的树形添加,按照文件或者文件夹批量添加,这样会带来一个问题,词库是在项目内还是另外存放,在项目内的话,打包项目后不方便找到,有时会有bug,这里我是推荐另外存放,也方便持续添加,然后用配置文件来指向目录即可。开发中善用配置文件可以明显得提高生产力,避免将配置写死在代码里。

如果只用一种分词方法来实现索引和搜索,那么重写Tokenizer即可,但是实际使用solr过程中,索引我们通常希望最小颗粒,搜索采用智能分词,所以就需要传入参数进行配置选择特定的分词器,因此需要重写TokenizerFactory,传入参数。我的schema.xml配置如下
<fieldType name="text_ansj" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
      <tokenizer class="org.ansj.solr.ANSJTokenizerFactory" useSmart="false"/> 
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    </analyzer> 
<analyzer type="query"> 
      <tokenizer class="org.ansj.solr.ANSJTokenizerFactory" useSmart="true"/> 
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    </analyzer> 
  </fieldType>
考虑到ansj自己并没有停用词库,后续应该会添加lucene自己的停用词库。重写Tokenizer时需要注意termAtt和offsetAtt设置不要出错,因为ansj的Term没有末位位置,所以需要自己处理:
termAtt.copyBuffer(term.getName().toCharArray(),0,term.getName().length());
offsetAtt.setOffset(term.getOffe(),term.getOffe()+term.getName().length());


前段时间ansj结合solr4.8后一直在做solrcloud,后来直接拿来用,发来ansj有不少问题和不足。一个很大的bug是它索引排序有问题,导致useFastVectorHighlighter时候会报错,无法使用。这个一个不小的问题。我折腾很久,甚至差点放弃了ansj,最后总算发现是ansj的IndexAnalysis有不够周全的地方。毕竟ansj的分词重点是智能分词和发现新词,传统分词不被作者重视也在情理之中。下面说下问题具体所在。
    比如我们要对“创业者创业”进行分词,传统的IKanalyzer之类的分词,分出来是“创业者 创业 业者 创业”,ansj分词是“创业者 创业 创 创业 业 者”。先不说创业者被过分细碎分词(ansj实在太简单粗暴了),这个分出来的词排序明显不对,position位置错误,useFastVectorHighlighter高亮会存储错误的向量地址。所以需要在IndexAnalysis里矫正分词的排序。

     然后是最细分词的问题,抽时间我会进行二次开发,提高准确度,降低冗余。



未完待续....
分享到:
评论

相关推荐

    word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估

    首先,ansj分词器是由李弄潮开发的一款开源分词工具,它具有强大的词典支持和自学习功能。ansj集成了词性标注、新词发现等功能,适用于新闻、博客等多种文本类型。其优点在于处理速度较快,但可能对某些专业词汇或...

    跟益达学Solr5之使用Ansj分词器

    《跟益达学Solr5之使用Ansj分词器》 在中文信息检索和文本分析领域,分词是至关重要的第一步。Solr,作为一款强大的开源搜索平台,提供了多种分词器供用户选择,其中之一就是Ansj分词器。这篇文章将深入探讨如何在...

    ansj分词ansj_seg-5.1.5.jar

    ANSJ采用HMM(隐马尔科夫模型)和CRF(条件随机场)相结合的方法,有效解决了中文分词中的歧义问题。它支持自定义词典,允许用户根据实际需求添加或删除词汇,提高了分词的准确性。此外,ANSJ还支持繁体分词、英文...

    Ansj中文分词(强大)

    Ansj中文分词是一款纯Java、主要用于自然语言处理、高精度的中文分词工具,目标是“准确、高效、自由地进行中文分词”。 内容简介:http://www.iteye.com/magazines/102#234 此分词具有自己学习的功能,所以拜托大家...

    ansj中文分词器源码

    5. **自动摘要**:结合关键字提取,ansj分词器还能生成文本的自动摘要,帮助用户快速了解文本主要内容。 6. **关键字标记**:在分词的基础上,ansj能够对关键词进行标注,便于后续的文本分析和挖掘。 **三、源码...

    ANSJ中文分词器

    aAnsj中文分词 这是一个ictclas的java实现.基本上重写了所有的数据结构和算法.词典是用的开源版的ictclas所提供的.并且进行了部分的人工优化 内存中中文分词每秒钟

    ansj中文分词工具

    ansj(Ansj for NLP,自然语言处理)是由李东创建并维护的一款高性能、高准确度的中文分词和词性标注系统。它基于字典匹配和统计模型相结合的方法,能够处理各种复杂语境下的中文分词问题,广泛应用于搜索引擎、信息...

    Ansj分词工具包

    用途1 新建项目——&gt;将ansj_seg-5.1.5.jar、nlp-lang-1.7.7.jar导入项目中。即可使用。 用途2 示例程序 1.1 将程序源码导入到Myeclipse中 1.2 此时,程序中自带的jar包路径可能不正确,须将两个jar包删除,然后...

    ansj分词、关键词匹配

    Ansj,全名“ANSJ Library”,是由李航开发的一款高性能的中文分词和命名实体识别库,广泛应用于搜索引擎、推荐系统等场景。 首先,我们要理解SpringMVC的角色。SpringMVC是Spring框架的一个模块,用于构建Web应用...

    ansj分词器手册

    ansj分词.ict的真正java实现.分词效果速度都超过开源版的ict. 中文分词,人名识别,词性标注,用户自定义词典

    mlcsseg, solr分词器大补贴, 包括IK ANSJ、过滤器,动态加载词库.zip

    1. **Solr分词器**:Solr是Apache Lucene的一个分支,是一个流行的全文检索服务器。分词器是Solr中用于对输入文本进行分析的组件,它将文本分解成一系列可搜索的词或短语。分词的质量直接影响到搜索引擎的性能和准确...

    ansj_solr_all

    ANSJ(Automatic NLP Segmentation and Judgement)是一款优秀的中文分词和词性标注工具,而Solr则是Apache基金会开源的全文搜索和分析引擎。当ANSJ与Solr相结合时,可以构建出强大的中文搜索引擎。本文将深入探讨...

    springMVC+ansj中文分词

    结合上述知识点,我们可以创建一个基于SpringMVC和Mybatis的Web应用,该应用可以接收用户输入的查询关键词,然后利用ansj中文分词库对文本进行分词处理,找出关键词在文本中的出现情况。通过设计合理的关键词匹配...

    ANSJ分词工具最新版

    在最新版本中,ANSJ提供了更优化的算法和更丰富的词汇资源,以提高分词的准确性和效率。 在使用ANSJ最新版时,首先你需要将两个核心的包文件添加到你的工程中。这些包可能包含分词器的实现、字典数据以及其他必要的...

    ansj分词_思维导图

    研究ansj代码之后,所做的思维导图。如需转载,请注明出处。

    Ansj中文分词

    Ansj中文分词是一个完全开源的、基于Google语义模型+条件随机场模型的中文分词的Java实现,具有使用简单、开箱即用等特点。 Ansj分词速度达到每秒钟大约100万字左右(Mac Air下测试),准确率能达到96%以上。 ...

    ansj分词jar包

    solr配置ansj,managed-schema.xml中配置 &lt;fieldType name="text_ansj" class="solr.TextField" positionIncrementGap="100"&gt; &lt;tokenizer class="org.ansj.lucene.util.AnsjTokenizerFactory" isQuery="false"/...

    ANSJ分词JAR包

    ANSJ分词JAR包,Github上面已经找不到了,这是孙健老师通过QQ发给我的,很是感谢,关于ANSJ更多请看 http://blog.csdn.net/blogdevteam/article/details/8148451

    最新的ansj分词jar包

    `ansj`(全称为Ansj.Net)是一个高效、功能强大的中文分词库,由国内开发者研制,它在Java平台上运行,提供了丰富的分词和命名实体识别功能。 标题中的"最新的ansj分词jar包"指的是该压缩文件包含的是最新版本的`...

Global site tag (gtag.js) - Google Analytics