版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/hai_cheng001/article/details/37511379

看lucene主页(http://lucene.apache.org/)上眼下lucene已经到4.9.0版本号了, 參考学习的书是依照2.1版本号解说的,写的代码样例是用的3.0.2版本号的,版本号

的不同导致有些方法的使用差异,可是大体还是同样的。

源码用到的jar包(3.0.2版本号)下载地址

參考资料:

1、公司内部培训资料

2、《Lucene搜索引擎开发权威经典》于天恩著.

Lucene使用挺简单的,耐心看完都能学会,还有源码。

分词的方法主要有下面几种:

1)、单字切分

单字切分就是把一段文字依照每一个字去建立索引。

比如将"阿根廷将捧起大力神杯"用单字切分就会切成"阿" "根" "廷" "将" "捧" "起" "大" "力" "神" "杯"10个词。这样的分词法

效率低下。但也能解决一些问题。聊胜于无。

前面几篇Lucene文章里面建立的索引都是应用的单字切分,所以在写的运行索引搜索的时候keyword都是单字的。

2)、二分法

把一段文字的每两个相邻的字算所一个词,这样"阿根廷将捧起大力神杯"就被切分成"阿根" "根廷" "廷将" "将捧" "捧起" "起大" "大力" "力神" "神杯" 

这样的分词法效率也低,可是比单字切分要好些的。

3)、词典法

词典法就是建立一个词典文件,然后使用词典和文字段落进行匹配。从而得出分词结果

4)、语义法

这样的方法眼下仅仅存在于理论上。由于想让计算机全然读懂一个人表达的意思眼下还实现不了,中文博大精深的。人和人之间交流还有听不懂的时候呢。

1、先介绍下二分法分词器的使用

Lucene软件包下自带一个lucene-analyzers-3.0.2.jar的包 支持二分法分词

首先也是创建一个索引,代码不贴了。跟前面创建的索引(FootBall)仅仅有一行代码的差别:

IndexWriter indexWriter = new IndexWriter(dir, new CJKAnalyzer(Version.LUCENE_30), true,IndexWriter.MaxFieldLength.LIMITED);

索引创建完运行搜索,这个跟前面的代码没有不论什么差别,就是运行搜索的时候仅仅能是依据两个字的词进行搜索。用一个字或者三个字都检索不出东西来。

2、JE分词器的使用方法

JE是一个不错的分词器。很多人都在使用

点击下载JE分词器jar包

它是一个基于词库的分词器,能够向分词器内添加新词。

演示一下这个分词器的使用:

<span style="font-family:SimSun;font-size:12px;">import java.io.IOException;
import jeasy.analysis.MMAnalyzer;
public class UseJE {
public static void main(String[] args) {
String str="阿根廷将捧起大力神杯";
MMAnalyzer mm=new MMAnalyzer();
try {
System.out.println(mm.segment(str, "---"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
</span>

运行结果控制台截图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FvaGFpY2hlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

为什么会报这个错误呢,我找了好半天啊,由于JE分词器仅仅支持lucene1.9--lucene2.4版本号的。版本号太低不行,版本号太高也不行。我无语了。

下载个lucene2.0试了下,结果截图例如以下:

如何维护JE分词器词库呢

<span style="font-family:SimSun;font-size:12px;">import jeasy.analysis.MMAnalyzer;
public class AddWord {
public static void main(String[] args) {
MMAnalyzer mm=new MMAnalyzer();
System.out.println(MMAnalyzer.contains("曹海成"));//是否包括该词条
mm.addWord("曹海成");//像分词器内加入该词条
System.out.println(MMAnalyzer.contains("曹海成"));
System.out.println(mm.size());//包括词条总数
}
}
</span>

运行结果:

lucene要是全部版本号都支持JE分词器就好了。

3、IK分词器

点此下载IK分词器JAR包

<span style="font-family:SimSun;font-size:12px;">import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class UseIK {
public static void main(String[] args) {
String str="阿根廷将捧起大力神杯";
IKAnalyzer ik=new IKAnalyzer();
testAnalyzer(ik, str);
} private static void testAnalyzer(IKAnalyzer ik, String str) {
System.out.println("当前使用的分词器:" + ik.getClass());
TokenStream tokenStream = ik.tokenStream("content",new StringReader(str));
tokenStream.addAttribute(TermAttribute.class);
try {
while (tokenStream.incrementToken()) {
TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);
System.out.println(termAttribute.term());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(); }
}
</span>

运行结果截图:

Lucene整理--中文分词的更多相关文章

  1. Lucene的中文分词器IKAnalyzer

    分词器对英文的支持是非常好的. 一般分词经过的流程: 1)切分关键词 2)去除停用词 3)把英文单词转为小写 但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好. 国人林良益写的IK Ana ...

  2. IKAnalyzer结合Lucene实现中文分词

    1.基本介绍 随着分词在信息检索领域应用的越来越广泛,分词这门技术对大家并不陌生.对于英文分词处理相对简单,经过拆分单词.排斥停止词.提取词干的过程基本就能实现英文分词,单对于中文分词而言,由于语义的 ...

  3. Lucene的中文分词器

    1 什么是中文分词器 学过英文的都知道,英文是以单词为单位的,单词与单词之间以空格或者逗号句号隔开. 而中文的语义比较特殊,很难像英文那样,一个汉字一个汉字来划分. 所以需要一个能自动识别中文语义的分 ...

  4. lucene之中文分词及其高亮显示(五)

    中文分词:即换个分词器 Analyzer analyzer = new StandardAnalyzer();// 标准分词器     换成  SmartChineseAnalyzer analyze ...

  5. (转)全文检索技术学习(三)——Lucene支持中文分词

    http://blog.csdn.net/yerenyuan_pku/article/details/72591778 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程:  从一个Re ...

  6. lucene之中文分词及其高亮显示

    参考:http://www.cnblogs.com/lirenzhujiu/p/5914174.html http://www.cnblogs.com/xing901022/p/3933675.htm ...

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

    Lucene分词器及高亮 分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按 ...

  8. Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词

    一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在p ...

  9. Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

随机推荐

  1. python Tkinter 编程

    Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序. 由于 Tkinter 是内置到 python 的安装包中.只要安装好 Py ...

  2. JPA学习(二、JPA_基本注解)

    框架学习之JPA(二) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  3. asp.net+批量下载附件

    asp.net 下载文件几种方式 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方 ...

  4. sh_09_打印多条分隔线

    sh_09_打印多条分隔线 def print_line(char, times): """打印单行分隔线 :param char: 分隔字符 :param times: ...

  5. React曾经忽略的知识点(上)

    1.JSX 防注入攻击 你可以放心地在 JSX 当中使用用户输入 const title = response.potentiallyMaliciousInput; // 直接使用是安全的: cons ...

  6. 微信小程序那些开发缺点

    早闻微信小程序是个坑,结果名不虚传,细数一下我开发小程序遇过到坑. UI组件过度封装. 微信小程序的组件是模仿react.js或vue.js的web组件设计的,并且封装了weui.css样式. PS: ...

  7. 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果

    let carr = [{ "code": "000", "agyTypeCode": "1", "name& ...

  8. Centos7系统备份与恢复教程

    原文地址:https://www.cnblogs.com/fang888/p/8473485.html Centos系统备份与恢复教程 tar: 特点 1.保留权限 2.适合备份整个目录 3.可以选择 ...

  9. html上传文件

    不太懂Html 做备用 html的文件上传分两个 第一个是Html文件 浏览器加载用的 另一个是PHP文件 处理上传文件的 下面是Html文件 叫index.html <html> < ...

  10. net.sf.json和com.alibaba.fastjson两种json加工类的相关使用方法

    com.alibaba.fastjson Fastjson是一个Java语言编写的高性能功能完善的JSON库.它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Jav ...