Lucene 中文分词器SmartChineseAnalyzer

释放双眼,带上耳机,听听看~!

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

[java]  view plain copy

package
 bond.lucene.analyzer;  
1.
  
1.
import
 java.util.Iterator;  
1.
  
1.
import
 org.apache.lucene.analysis.TokenStream;  
1.
import
 org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;  
1.
import
 org.apache.lucene.analysis.tokenattributes.CharTermAttribute;  
1.
import
 org.apache.lucene.analysis.util.CharArraySet;  
1.
import
 org.apache.lucene.util.Version;  
1.
  
1.
public
 
class
 SmartChineseAnalyzerTest {  
1.
  
1.
    
public
 
static
 
void
 main(String[] args) {  
1.
        
try
 {  
1.
            
// 要处理的文本
  
1.
            String text = 
"lucene分析器使用分词器和过滤器构成一个“管道”,文本在流经这个管道后成为可以进入索引的最小单位,因此,一个标准的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理"
;  
1.
  
1.
            
// 自定义停用词
  
1.
            String[] self_stop_words = { 
"的"

"了"

"呢"

","

"0"

":"

","

"是"

"流"
 };  
1.
            CharArraySet cas = 
new
 CharArraySet(Version.LUCENE_44, 
0

true
);  
1.
            
for
 (
int
 i = 
0
; i < self_stop_words.length; i++) {  
1.
                cas.add(self_stop_words[i]);  
1.
            }  
1.
  
1.
            
// 加入系统默认停用词
  
1.
            Iterator<Object> itor = SmartChineseAnalyzer.getDefaultStopSet().iterator();  
1.
            
while
 (itor.hasNext()) {  
1.
                cas.add(itor.next());  
1.
            }  
1.
  
1.
            
// 中英文混合分词器(其他几个分词器对中文的分析都不行)
  
1.
            SmartChineseAnalyzer sca = 
new
 SmartChineseAnalyzer(Version.LUCENE_44, cas);  
1.
  
1.
            TokenStream ts = sca.tokenStream(
"field"
, text);  
1.
            CharTermAttribute ch = ts.addAttribute(CharTermAttribute.
class
);  
1.
  
1.
            ts.reset();  
1.
            
while
 (ts.incrementToken()) {  
1.
                System.out.println(ch.toString());  
1.
            }  
1.
            ts.end();  
1.
            ts.close();  
1.
        } 
catch
 (Exception ex) {  
1.
            ex.printStackTrace();  
1.
        }  
1.
    }  
1.
  
1.
}  

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索