分词器

什么是分词器

    采用一种算法,将中英文本中的字符拆分开来,形成词汇,以待用户输入关健字后搜索

为什么要分词器

     因为用户输入的搜索的内容是一段文本中的一个关健字,和原始表中的内容有差别,

     但作为搜索引擎来讲,又得将相关的内容搜索出来,此时就得采用分词器来最大限度

     匹配原始表中的内容

分词器工作流程

     步一:按分词器拆分出词汇

     步二:去除停用词和禁用词

     步三:如果有英文,把英文字母转为小写,即搜索不分大小写

 

package loaderman.analyzer;

import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;
/**
 * 测试Lucene内置和第三方分词器的分词效果*/
public class TestAnalyzer {
    private static 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 static void main(String[] args) throws Exception{
        //Lucene内存的分词器
        //testAnalyzer(new StandardAnalyzer(LuceneUtil.getVersion()),"呢哈说我们的首都是北京呀");
        //testAnalyzer(new FrenchAnalyzer(LuceneUtil.getVersion()),"呢哈说我们的首都是北京呀");
        //testAnalyzer(new RussianAnalyzer(LuceneUtil.getVersion()),"呢哈说我们的首都是北京呀");
        //testAnalyzer(new ChineseAnalyzer(),"呢哈说我们的首都是北京呀");
        //testAnalyzer(new CJKAnalyzer(LuceneUtil.getVersion()),"呢哈说我们的首都是北京呀");
        //testAnalyzer(new CJKAnalyzer(LuceneUtil.getVersion()),"呢哈说我们的首都是北京呀");
        //testAnalyzer(new FrenchAnalyzer(LuceneUtil.getVersion()),"呢哈说我们的首都是北京呀""); 
testAnalyzer(new IKAnalyzer(),"呢哈说我们的首都是北京呀"); //testAnalyzer(new IKAnalyzer(),"上海自来水来自海上"); } }

2.6使用第三方IKAnalyzer分词器--------中文首选

     需求:过滤掉上面例子中的“说”,“的”,“呀”,且将“首都”看成一个整体 关健字

     步一:导入IKAnalyzer分词器核心jar包,IKAnalyzer3.2.0Stable.jar

     步二:将IKAnalyzer.cfg.xml和stopword.dic和xxx.dic文件复制到MyEclipse的src目录下,

再进行配置,在配置时,首行需要一个空行

<?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">/mydict.dic</entry> 
    
    
    <!--用户可以在这里配置自己的扩展停止词字典 -->
    <entry key="ext_stopwords">/surname.dic</entry> 
    
    
</properties>
首都   注/mydict.dic文件
说    注/surname.dic文件
的
呀

 

posted on 2018-12-03 17:05  LoaderMan  阅读(362)  评论(0编辑  收藏  举报

导航