Lucene实践之中文分词IKAalyzer

做检索怎么都绕不过中文分词去,学习一下用IKAnalyzer分词器做中文分词。

Game Starts

参考文档

  1) 中文分词之Java实现使用IK Analyzer实现

  2) IKAnalyzer 独立使用 配置扩展词典

依赖jar包

  1) IKAnalyzer2012FF_u1.jar 最好使用这个版本下面说 [百度网盘下载]

  2) IKAnalyzer.cfg.xml [百度网盘下载]

  3) keyWord.dic,stopWord.dic 字典

主要的类

  1) IKAnalyzer , new IKAnalyzer(boolean useSmart); @param userSmart 是否智能分词,用性能换分词效果

What‘s Up

  1)分词成功了,但是查不出来

    分词成功了只是一个假象,建索引的时候Field用了StringField,但是却忽略了一个问题StringField不分词。换成TextField就OK了

  2) keyWord.dic 里添加了关键词‘高铁’,但还是分词 ‘高’ ‘铁’

    IKAnalyzer的配置文件必须满足3个条件:

      a)必须以.dic结尾

      b)IKAnalyzer.cfg.xml必须放在src目录下,.dic文件没有要求,但是要在IKAnalyzer.cfg.xml下配置正确

      c).dic必须要以无BOM的UTF-8编码

  src
      keyWord.dic
      IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典-->
    <entry key="ext_dict">keyWord.dic</entry> 

    <!--用户可以在这里配置自己的扩展停止词字典
    <entry key="ext_stopwords">stopword.dic;</entry>
    -->
</properties>

  我把keyWord.dic 和 IKAnalyzer.cfg.xml 都放在了src下

Always Be Coding

查看分词效果

 1 IKAnalyzer analyzer = new IKAnalyzer(true);
 2 TokenStream ts = analyzer.tokenStream("keyWord", "高铁");
 3 CharTermAttribute termAtt = ts.addAttribute(CharTermAttribute.class);
 4 try {
 5     ts.reset(); // Resets this stream to the beginning. (Required)
 6     while (ts.incrementToken()) {
 7         System.out.println("words: " + termAtt.toString());
 8     }
 9     ts.end();   // Perform end-of-stream operations, e.g. set the final offset.
10 } finally {
11     ts.close(); // Release resources associated with this stream.
12 }    
不加载字典
<!--用户可以在这里配置自己的扩展字典
<entry key="ext_dict">dic.dic</entry>
-->

words: 高
words: 铁
——————————————————————————————————————————————————————————————————————
加载字典
<entry key="ext_dict">dic.dic</entry>

加载扩展词典:dic.dic
words: 高铁

索引

1 Directory indexDir = FSDirectory.open(new File("E:/data/index"));
2 IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46, new IKAnalyzer(true));
3 IndexWriter indexWriter = new IndexWriter(indexDir, config);
4 indexWriter.deleteAll();
5 Document doc = new Document();
6 doc.add(new StringField("name", "爸爸去哪儿", Store.YES));
7 System.out.println(doc);
8 indexWriter.addDocument(doc);
9 indexWriter.close();

搜索

long start = System.currentTimeMillis();
IndexReader indexReader = DirectoryReader.open(FSDirectory.open(new File(E:/data/index)));
indexSearcher = new IndexSearcher(indexReader);
QueryParser parser = new QueryParser(Version.LUCENE_46, "content", new IKAnalyzer(true));Query query = parser.parse("爸爸"); TopDocs results = indexSearcher.search(query, 10); ScoreDoc[] hits = results.scoreDocs; int totalHits = results.totalHits; for(int i = 0; i < totalHits; i++) {   Document doc = indexSearcher.doc(hits[i].doc);   System.out.println("["+doc.get("name")+"] ");   System.out.println(); } long end = System.currentTimeMillis(); System.out.println("找到"+totalHits+"条记录,耗时:"+(end-start)+"ms");

TO BE CONTINUED……

Lucene实践之中文分词IKAalyzer,布布扣,bubuko.com

时间: 2024-11-13 14:49:16

Lucene实践之中文分词IKAalyzer的相关文章

Lucene使用IKAnalyzer中文分词笔记

本文主要讲解IKAnalyzer(以下简称'IK')在Lucene中的具体使用,关于Lucene和IK分词器的背景及其作用在这里就不再熬述.不得不感叹下Lucene版本变更的快速,如今最新已经到了4.9.0,相信任何技术的发展壮大都不可避免有这一过程.本文使用的是Lucene4.0,IKAnalyzer使用的是2012FF版. Lucene下载请移步官网,IK下载地址如下: http://code.google.com/p/ik-analyzer/downloads/list IK下载完成够拷贝

(转)Lucene中文分词图解

本文记录Lucene+Paoding的使用方法图解: 一.下载Lucene(官网:http://archive.apache.org/dist/lucene/java/)本文中使用的是:2.9.4,下载后解压,Lucene所需要的基本jar文件如下列表: lucene-core-2.9.4.jar                   Lucene核心jar lucene-analyzers-2.9.4.jar            Lucene分词jar lucene-highlighter-2

搜索引擎系列四:Lucene提供的分词器、IKAnalyze中文分词器集成

一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在pom.xml里面引入如下依赖 <!-- lucene 核心模块 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId&

Elasticsearch 中文分词(elasticsearch-analysis-ik) 安装

由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsearch上使用.当然前提是有elasticsearch的插件. 至于插件怎么开发,这里有一片文章介绍:http://log.medcl.net/item/2011/07/diving-into-elasticsearch-3-custom-analysis-plugin/暂时还没时间看,留在以后仔细研

Solr5.0配置中文分词包

Solr中默认的中文分词是用Lucene的一元分词包. 现在说明在Solr5.0中配置Lucene的SmartCN中文分词包. 1,进入Solr的安装目录,我这里是:/root/nutch/solr-5.0.0  把contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-5.0.0.jar包复制到solr的启动目录的lib目录下. # cp ./contrib/analysis-extras/lucene-libs/lucene-

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse

【Lucene】Apache Lucene全文检索引擎架构之中文分词和高亮显示

前面总结的都是使用Lucene的标准分词器,这是针对英文的,但是中文的话就不顶用了,因为中文的语汇与英文是不同的,所以一般我们开发的时候,有中文的话肯定要使用中文分词了,这一篇博文主要介绍一下如何使用smartcn中文分词器以及对结果的高亮显示. 1. 中文分词 使用中文分词的话,首先到添加中文分词的jar包. <!-- lucene中文分词器 --> <dependency> <groupId>org.apache.lucene</groupId> <

Lucene基础(三)-- 中文分词及高亮显示

Lucene分词器及高亮 分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按照汉字的字直接分词,没有词语的概念. 使用分词的地方只需要把Analyzer实例化成我们第三方的分词器即可 中文分词有很多,这里使用IKAnalyzer 为例, 下载地址 https://git.oschina.net/wltea/IK-Analyzer-2012FF 现在下来后里面有一篇教程. 高

lucene中文分词——(四)

1.分析器的执行过程: 第一个 TokenFilter将大写字母变为小写,第二次分词去掉空格并换行,第三次去掉不要的 and或者标点符号 2.中文分词器介绍: (1)lucene自带的 (2)第三方的 3.查看标准分词器对中文的分词效果: 最终决定使用的是IKAnalyzer()分词器,支持中文扩展与停用. 1 // 查看标准分析器的分词效果 2 @Test 3 public void testTokenStream() throws Exception { 4 // 创建一个标准分析器对象 5