`

Java日文分词器之Kuromoji

阅读更多

Kuromoji是一个开源的,基于java语言开发的轻量级的日文分词工具包。捐赠给了ASF之后被内置在Lucene 和 Solr中,作为默认的日文分词器(默认的中文分词器是smartcn)。但他也不依赖Lucene 或 Solr,可以单独使用。采用维特比算法(Viterbi algorithm),默认使用IPA字典。 

其他有名的还有lucene-gosen :http://code.google.com/p/lucene-gosen/ 以及Google・Amazon・楽天等日本大的搜索引擎使用的Rosette :http://www.basistech.jp/base-linguistics/japanese/ 。Rosette是商业版的,能够适用于很多语言,比如:中文,日文,韩文,英文等等。 

http://www.atilika.org/ 

版本:kuromoji-0.7.7.jar 

(1)2行代码即可分词 

Java代码  收藏代码
  1. Tokenizer tokenizer = Tokenizer.builder().build();  
  2. List<Token> tokens = tokenizer.tokenize(word);  


分词后的Token: 

Java代码  收藏代码
  1. for (Token token : tokens) {  
  2.     System.out.println("==================================================");  
  3.     System.out.println("allFeatures : " + token.getAllFeatures());  
  4.     System.out.println("partOfSpeech : " + token.getPartOfSpeech());  
  5.     System.out.println("position : " + token.getPosition());  
  6.     System.out.println("reading : " + token.getReading());  
  7.     System.out.println("surfaceFrom : " + token.getSurfaceForm());  
  8.     System.out.println("allFeaturesArray : " + Arrays.asList(token.getAllFeaturesArray()));  
  9.     System.out.println("辞書にある言葉? : " + token.isKnown());  
  10.     System.out.println("未知語? : " + token.isUnknown());  
  11.     System.out.println("ユーザ定義? : " + token.isUser());  
  12. }  



(2)3中分词模式 

Java代码  收藏代码
  1. String word = "日本経済新聞でモバゲーの記事を読んだ。";  
  2. Builder builder = Tokenizer.builder();  
  3.   
  4. // Normal  
  5. Tokenizer normal = builder.build();  
  6. List<Token> tokensNormal = normal.tokenize(word);  
  7. disp(tokensNormal);  
  8.   
  9. // Search  
  10. builder.mode(Mode.SEARCH);  
  11. Tokenizer search = builder.build();  
  12. List<Token> tokensSearch = search.tokenize(word);  
  13. disp(tokensSearch);  
  14.   
  15. // Extends  
  16. builder.mode(Mode.EXTENDED);  
  17. Tokenizer extended = builder.build();  
  18. List<Token> tokensExtended = extended.tokenize(word);  
  19. disp(tokensExtended);  

 

引用
日本経済新聞 | で | モバゲー | の | 記事 | を | 読ん | だ | 。 | 
日本 | 経済 | 新聞 | で | モバゲー | の | 記事 | を | 読ん | だ | 。 | 
日本 | 経済 | 新聞 | で | モ | バ | ゲ | ー | の | 記事 | を | 読ん | だ | 。 |



(3)自定义词典 

Java代码  收藏代码
  1. // 使用自定义字典  
  2. InputStream is = UserDictSample.class.getClassLoader().getResourceAsStream("resources/userdict_ja.txt");  
  3.   
  4. Builder builder = Tokenizer.builder();  
  5. builder.userDictionary(is);  
  6. Tokenizer userTokenizer = builder.build();  
  7.   
  8. List<Token> tokens2 = userTokenizer.tokenize(word);  
  9.   
  10. StringBuilder sb2 = new StringBuilder();  
  11. for (Token token : tokens2) {  
  12.     sb2.append(token.getSurfaceForm() + " | ");  
  13. }  
  14. System.out.println(sb2.toString());  



引用
稀 | 勢 | の | 里 | 寛 | 
稀勢の里 | 寛 |



resources/userdict_ja.txt: 

引用
# 単語,形態素解析後の単語(単語を分ける場合は、スペースで区切る),読み,品詞 
稀勢の里寛,稀勢の里 寛,キセノサト ユタカ,カスタム人名



(4)汉字转片假名 

Java代码  收藏代码
  1. String word = "東京特許許可局";  
  2.   
  3. Builder builder = Tokenizer.builder();  
  4. builder.mode(Mode.NORMAL);  
  5. Tokenizer tokenizer = builder.build();  
  6. List<Token> tokens = tokenizer.tokenize(word);  
  7.   
  8. StringBuilder sb = new StringBuilder();  
  9. for (Token token : tokens) {  
  10.     sb.append(token.getReading() + " | ");  
  11. }  
  12. System.out.println(sb.toString());  

 

文章出自:http://rensanning.iteye.com/blog/2008575

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics