Lucene05-分词器
2019-08-16 10:48:44来源:博客园 阅读 ()
Lucene05-分词器
Lucene05-分词器
1、概念
Analyzer(分词器)的作用是把一段文本中的词按规则取出所包含的所有词。对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言(规则),要用不同的分词器。如下图
注意:在创建索引时会用到分词器,在使用字符串搜索时也会用到分词器,这两个地方要使用同一个分词器,否则可能会搜索不出结果。所以当改变分词器的时候,需要重新建立索引库
2、常见的中文分词器
中文的分词比较复杂,因为不是一个字就是一个词,而且一个词在另外一个地方就可能不是一个词,如在“帽子和服装”中,“和服”就不是一个词。对于中文分词,通常有三种方式:单字分词、二分法分词、词典分词
2.1 单字分词
就是按照中文一个字一个字地进行分词,效率比较低。如:“我们是中国人”,效果:“我”、“们”、“是”、“中”、“国”、“人”。(StandardAnalyzer就是这样)
Analyzer analyzer2 = new StandardAnalyzer();
2.2 二分法分词
按两个字进行切分,把相邻的两个字组成词分解出来,效率也比较低。而且很多情况下分的词不对。如:“我们是中国人”,效果:“我们”、“们是”、“是中”、“中国”、“国人”。(CJKAnalyzer就是这样)
Analyzer analyzer3 = new CJKAnalyzer(Version.LUCENE_30);
2.3 词库分词(IKAnalyzer)
按某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语。通常词库分词被认为是最理想的中文分词算法。如:“我们是中国人”,效果为:“我们”、“中国人”。(使用极易分词的MMAnalyzer。可以使用“极易分词”,或者是“庖丁分词”分词器、IKAnalyzer)。
Analyzer analyzer4 = new IKAnalyzer();
基本上可以把词分出来(经常用的分词器)
3、IDEA集成IKAnalyzer
3.1 添加maven依赖
<!-- IK分词器--> <dependency> <groupId>com.github.magese</groupId> <artifactId>ik-analyzer</artifactId> <version>7.4.0</version> </dependency>
3.2 添加配置文件
停用词和扩展词以及配置文件
ext_stopword.dic为停用词的词库,词库里的词都被当作为停用词使用。
ext_dict.dic 为扩用词的词库,词库里的词都被当作为扩用词使用。
停用词:有些词在文本中出现的频率非常高。但对本文的语义产生不了多大的影响。例如英文的a、an、the、of等。或中文的”的、了、呢等”。这样的词称为停用词。停用词经常被过滤掉,不会被进行索引。在检索的过程中,如果用户的查询词中含有停用词,系统会自动过滤掉。停用词可以加快索引的速度,减少索引库文件的大小。
扩展词:就是不想让哪些词被分开,让他们分成一个词。比如传智播客、传智
IKAnalyzer.cfg.xml为IKAnalyzer的配置文件。
<?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">ext_dict.dic;</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords">ext_stopword.dic;</entry> </properties>
3.3 测试分词器
添加测试类
代码如下:
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.cjk.CJKAnalyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.junit.Test; import org.wltea.analyzer.lucene.IKAnalyzer; import java.io.IOException; import java.io.StringReader; /** * @author PC-Black * @version v1.0 * @date 2019/7/20 18:39 * @description TODO **/ public class AnalayzerTest { @Test public void testIKAnalyzer()throws IOException { //使用lucene 自带的标准分词器... IKAnalyzer analyzer = new IKAnalyzer(); // Analyzer analyzer=new CJKAnalyzer(); // Analyzer analyzer=new StandardAnalyzer(); analyzer(analyzer,"最贵的苹果4"); } public static void analyzer(Analyzer analyzer, String str) throws IOException { StringReader reader = new StringReader(str); //处理单个字符组成的字符流,读取Reader对象中的数据,处理后转换成词汇单元 TokenStream tokenStream = analyzer.tokenStream(str, reader); // 清空流 try { tokenStream.reset(); } catch (IOException e) { e.printStackTrace(); } CharTermAttribute attribute = tokenStream.getAttribute(CharTermAttribute.class); try { while (tokenStream.incrementToken()) { System.out.print(attribute.toString()+"|"); } } catch (IOException e) { e.printStackTrace(); } } }
单字分词器
二分法分词
IK分词
原文链接:https://www.cnblogs.com/yuanke-blog/p/11218851.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:反射获取构造方法
- ElasticSearch 分词器 2020-04-17
- 使用ES对中文文章进行分词,并进行词频统计排序 2019-08-16
- 《ElasticSearch6.x实战教程》之分词 2019-08-16
- Elasticsearch (1) - 索引库 文档 分词 2019-05-08
- Elasticsearch 分词器 2019-01-01
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash