3.0 分词器详解
2016-02-17 00:19:23
5,344
0
在建立索引和搜索时,都会用到分词器,建立索引时和搜索时使用的分词器应该是同一个,否则可能会出现搜不到的情况。
实际中,我们不会去开发分词器,都是使用别人开发好的分词器,因此我们主要是学会如何使用这些分词器。
目前所有的分词器,对英文都有很好的处理。例如对于这样的一句话:
An IndexWriter creates and maintains an index.
存储时:
第一步:切分关键词:
分词器首先会根据空格将这段话拆分为一个个单独的英语单词,并将标点去掉:
An IndexWriter creates and maintains an index
第二步:去除停用词
创建索引时,有些单词在文本中出现的概率非常高,但是对文本所带的信息基本不产生影响,例如:英文中的“a、an、the、of”,中文中的“了、的、着”。停用词通常会被过滤掉,不会被进行索引。
用户检索时,检索系统也会将停用词过滤掉。
第三步:对于英文单词,把所有的单词转为小写(搜索时不区分大小写)
indexwriter creates maintains index
如果我们想查看某段内容的分词结果,可以按照如下方式进行
@Test public void test() throws IOException{ Analyzer analyzer=new StandardAnalyzer(); String text = "An IndexWriter creates and maintains an index"; TokenStream tokenStream = analyzer.tokenStream("", text); tokenStream.reset(); while (tokenStream.incrementToken()) { CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class); System.out.println(charTermAttribute); } }
运行这段代码,你可以看到"An IndexWriter creates and maintains an index"这段话的分词效果。现在我们来看看中文
将text的内容替换为:"我爱北京天安门"
运行程序后,分词效果为:
我 爱 北 京 天 安 门
发现对于中文,实际上是一个字一个字的进行分词,这样明显是不行的。即使官方提供的Analyzer子类ChineseAnalyzer,分词也打不到我们想要的效果,读者可以自己尝试。
在使用Lucene建立索引的时候,官方提供的分词器由于对中文支持不友好,所以我们需要使用另外的分词器,比较火的是庖丁解牛分词器和IKAnalyzer分词,后面一一介绍。
上一篇:2.0 入门案例及详解
下一篇:3.1 中文分词器—IKAnalyzer