Lucene 中文分词器SmartChineseAnalyzer

对中文支持稍好,但扩展性差,扩展词库,禁用词库和同义词库等不好处理

[java]  view plain copy
  1. package bond.lucene.analyzer;  
  2.   
  3. import java.util.Iterator;  
  4.   
  5. import org.apache.lucene.analysis.TokenStream;  
  6. import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;  
  7. import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;  
  8. import org.apache.lucene.analysis.util.CharArraySet;  
  9. import org.apache.lucene.util.Version;  
  10.   
  11. public class SmartChineseAnalyzerTest {  
  12.   
  13.     public static void main(String[] args) {  
  14.         try {  
  15.             // 要处理的文本  
  16.             String text = "lucene分析器使用分词器和过滤器构成一个“管道”,文本在流经这个管道后成为可以进入索引的最小单位,因此,一个标准的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理";  
  17.   
  18.             // 自定义停用词  
  19.             String[] self_stop_words = { "的""了""呢"",""0"":"",""是""流" };  
  20.             CharArraySet cas = new CharArraySet(Version.LUCENE_44, 0true);  
  21.             for (int i = 0; i < self_stop_words.length; i++) {  
  22.                 cas.add(self_stop_words[i]);  
  23.             }  
  24.   
  25.             // 加入系统默认停用词  
  26.             Iterator<Object> itor = SmartChineseAnalyzer.getDefaultStopSet().iterator();  
  27.             while (itor.hasNext()) {  
  28.                 cas.add(itor.next());  
  29.             }  
  30.   
  31.             // 中英文混合分词器(其他几个分词器对中文的分析都不行)  
  32.             SmartChineseAnalyzer sca = new SmartChineseAnalyzer(Version.LUCENE_44, cas);  
  33.   
  34.             TokenStream ts = sca.tokenStream("field", text);  
  35.             CharTermAttribute ch = ts.addAttribute(CharTermAttribute.class);  
  36.   
  37.             ts.reset();  
  38.             while (ts.incrementToken()) {  
  39.                 System.out.println(ch.toString());  
  40.             }  
  41.             ts.end();  
  42.             ts.close();  
  43.         } catch (Exception ex) {  
  44.             ex.printStackTrace();  
  45.         }  
  46.     }  
  47.   
  48. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值