2019独角兽企业重金招聘Python工程师标准>>>

Lucene分词器,使用中文分词器,扩展词库,停用词 博客分类: 搜索引擎,爬虫

停止词:lucene的停止词是无功能意义的词,比如is 、a 、are 、”的”,“得”,“我” 等,这些词会在句子中多次出现却无意义,所以在分词的时候需要把这些词过滤掉。

扩展词库:就是不想让哪些词被分开,让他们分成一个词。

同义词:假设有一个电子商务系统,销售书籍,提供了一个搜索引擎,一天,市场部的人要求客户在搜索书籍时,同义词就是比如输入“电子”,除了展示电子相关的书籍,还需要展现“机器”相关的书籍。

1. 常见的中文分词器有:极易分词的(MMAnalyzer) 、"庖丁分词"分词器(PaodingAnalzyer)、IKAnalyzer 等等。其中 MMAnalyzer 和 PaodingAnalzyer 不支持 lucene3.0及以后版本。

   使用方式都类似,在构建分词器时

     Analyzer analyzer = new [My]Analyzer(); 

     

2. 这里只示例 IKAnalyzer,目前只有它支持Lucene3.0 以后的版本。 

   首先需要导入 IKAnalyzer3.2.0Stable.jar 包

 

3. 示例代码

     view plaincopy to clipboardprint?
public class AnalyzerTest {   
       @Test  
       public void test() throws Exception {   
              String text = "An IndexWriter creates and maintains an index.";   
              /* 标准分词器:单子分词 */  
              Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);   
              testAnalyzer(analyzer, text);   
    
              String text2 = "测试中文环境下的信息检索";   
              testAnalyzer(new IKAnalyzer(), text2); // 使用IKAnalyzer,词库分词   
       }   
    
       /**  
        * 使用指定的分词器对指定的文本进行分词,并打印结果  
        *  
        * @param  analyzer  
        * @param  text  
        * @throws  Exception  
        */  
       private void testAnalyzer(Analyzer analyzer, String text) throws Exception {   
              System.out.println("当前使用的分词器:" + analyzer.getClass());   
    
              TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(text));   
              tokenStream.addAttribute(TermAttribute.class);   
    
              while (tokenStream.incrementToken()) {   
                     TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);   
                     System.out.println(termAttribute.term());   
              }   
       }   
}   
   
public class AnalyzerTest {
       @Test
       public void test() throws Exception {
              String text = "An IndexWriter creates and maintains an index.";
              /* 标准分词器:单子分词 */
              Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
              testAnalyzer(analyzer, text);
 
              String text2 = "测试中文环境下的信息检索";
              testAnalyzer(new IKAnalyzer(), text2); // 使用IKAnalyzer,词库分词
       }
 
       /**
        * 使用指定的分词器对指定的文本进行分词,并打印结果
        *
        * @param analyzer
        * @param text
        * @throws Exception
        */
       private void testAnalyzer(Analyzer analyzer, String text) throws Exception {
              System.out.println("当前使用的分词器:" + analyzer.getClass());
 
              TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(text));
              tokenStream.addAttribute(TermAttribute.class);
 
              while (tokenStream.incrementToken()) {
                     TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);
                     System.out.println(termAttribute.term());
              }
       }
}
  

3. 如何扩展词库:很多情况下,我们可能需要定制自己的词库,例如 XXX 公司,我们希望这能被分词器识别,并拆分成一个词。

   IKAnalyzer 可以很方便的实现我们的这种需求。

   新建 IKAnalyzer.cfg.xml

     view plaincopy to clipboardprint?
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">    
<properties>    
       <!-- 1,文件要是 UTF-8 编码。2,一行写一个词 -->  
       <!--用户可以在这里配置自己的扩展字典-->  
       <entry key="ext_dict">/mydict.dic</entry>  
</properties>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 
       <!-- 1,文件要是 UTF-8 编码。2,一行写一个词 -->
       <!--用户可以在这里配置自己的扩展字典-->
       <entry key="ext_dict">/mydict.dic</entry>
</properties> 

       

       解析:

               <entry key="ext_dict">/mydict.dic</entry> 扩展了一个自己的词典,名字叫 mydict.dic

               因此我们要建一个文本文件,名为:mydict.dic  (此处使用的 .dic 并非必须)

               在这个文本文件里写入:

                    北京XXXX科技有限公司

               这样就添加了一个词汇。

               如果要添加多个,则新起一行:

                    词汇一

                    词汇二

                    词汇三

                    

               需要注意的是,这个文件一定要使用 UTF-8编码

 

4. 停用词:

    有些词在文本中出现的频率非常高,但是对文本所携带的信息基本不产生影响,例如英文的"a、an、the、of",或中文的"的、了、着",以及各种标点符号等,这样的词称为停用词(stop word)。

    文本经过分词之后,停用词通常被过滤掉,不会被进行索引。在检索的时候,用户的查询中如果含有停用词,检索系统也会将其过滤掉(因为用户输入的查询字符串也要进行分词处理)。

    排除停用词可以加快建立索引的速度,减小索引库文件的大小。

    IKAnalyzer 中自定义停用词也非常方便,和配置 "扩展词库" 操作类型,只需要在 IKAnalyzer.cfg.xml 加入如下配置:

       <entry key="ext_stopwords">/ext_stopword.dic</entry> 

       同样这个配置也指向了一个文本文件 /ext_stopword.dic (后缀名任意),格式如下:

           也

          了

          仍

          从

          

转载于:https://my.oschina.net/xiaominmin/blog/1597164

Lucene分词器,使用中文分词器,扩展词库,停用词相关推荐

  1. java lucene 中文分词_Lucene的中文分词器IKAnalyzer

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

  2. Lucene和ikanalyzer(中文分词器)的简单使用增删改查(提供maven依赖)

    --于2020.08.28从jar包更新为了maven依赖 什么是Lucene?  Lucene是apache下的一个开放源代码的全文检索引擎工具包,通过它可以实现全文检索. 什么是全文检索(Full ...

  3. 基于感知器的中文分词算法

    http://heshenghuan.github.io/2015/12/21/%E5%9F%BA%E4%BA%8E%E6%84%9F%E7%9F%A5%E5%99%A8%E7%9A%84%E4%B8 ...

  4. 3.ElasticSearch分词器,包括默认分词器、英文分词器、中文分词器

    注:测试环境:CentOS Linux release 7.6.1810 (Core)  jdk:1.8 elasticsearch:6.8.2 单节点 es       安装:https://blo ...

  5. Lucene快速入门第三讲——看看Lucene是如何支持中文分词的?

    在这一讲中,我们要看看Lucene到底是如何支持中文分词的?为了向大家阐述明白这个问题,咱们可先从分析器的执行过程入手. 分析器(Analyzer)的执行过程 如下图所示是语汇单元的生成过程: 从一个 ...

  6. java 庖丁解牛中文分词_庖丁解牛中文分词包

    http://code.google.com/p/paoding/ Paoding Analysis摘要 Paoding's Knives 中文分词具有极 高效率 和 高扩展性 .引入隐喻,采用完全的 ...

  7. php es中文分词,Elasticsearch搜索中文分词优化

    Elasticsearch 中文搜索时遇到几个问题: 当搜索关键词如:"人民币"时,如果分词将"人民币"分成"人","民" ...

  8. 用python对单一微博文档进行分词——jieba分词(加保留词和停用词)

    当爬取完所需微博保存在一个csv文件中后,可用如下代码对其进行分词.保留所需词.去除停用词操作,并将分词结果放在新的文档中. 停用词和保留词网上都能搜到,我们也可以另外对停用词表进行编辑,也可以在保留 ...

  9. java lucene 分词器_中文分词器—IKAnalyzer

    对于lucene自带分词器,没有一个能很好的处理中文的分词,因此,我们使用的分词的时候,往往会使用国人开发的一个分词器IKAnalyzer,使用非常简单,只需要将jar包拷入即可. 如果需要扩展词库或 ...

  10. lucene集成IK实现中文分词检索

    2019独角兽企业重金招聘Python工程师标准>>> 接上篇,解决lucene中文分词问题. 这里采用IK分词器. IKAnalyzer2012_u5.zip下载地址:http:/ ...

最新文章

  1. Annotation 的第一个工程
  2. 【译】 Sparky: A Lightning Network in Two Pages of Solidity
  3. Java连接Elasticsearch6.xxx 代码高亮显示篇四
  4. C#分析URL参数获取参数和值得对应列表(一)
  5. Spring properties dependency checking
  6. stm32呼吸灯c语言程序,基于stm32的PWM输出呼吸灯(包括stm32呼吸灯代码)
  7. yyuc php,YYUC框架与YYUC手册资料下载 | 无名
  8. 英文文本分类(CNN)
  9. json java 比较_Java中json工具对比分析
  10. Selenium使用之——键盘操作方法
  11. 关于Qt::WA_TransparentForMouseEvents的一些记录
  12. 字符转ASII码以及大小写之间的转换
  13. leetcode#66. Plus One
  14. Adobe Premiere导出文件过大
  15. activiti实现的请假流程
  16. kali内开启键盘背光
  17. Python 安装pyqt—tools失败,记录
  18. 开源数据集网站推荐,持续更新!
  19. nexus安装与使用
  20. 数字化转型实例:国家电网

热门文章

  1. windows启动linux系统,windows 10 启动linux系统
  2. Vue-cli4 配置别名
  3. 怎么把php写入文件格式,如何将一个PHP数组有格式的写入文件中
  4. java自带的字节码技术_读懂字节码-还原JAVA源码
  5. 20200225:最小路径和(leetcode64)
  6. MD5消息摘要算法和SHA-1安全散列算法
  7. 【转】VB动态拖曳ListBox Item位置
  8. VB:读取及设定NumLock/CapsLock/ScrollLock的值
  9. Windows 7 With SP1 MSDN版 含简体中文版
  10. 几行VB代码拿下注册表