Java日文分词器之Kuromoji

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

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

[url=http://www.atilika.org/]http://www.atilika.org/[/url]

版本:kuromoji-0.7.7.jar

[b](1)2行代码即可分词[/b]

Tokenizer tokenizer = Tokenizer.builder().build();
List<Token> tokens = tokenizer.tokenize(word);

分词后的Token:

for (Token token : tokens) {
System.out.println("==================================================");
System.out.println("allFeatures : " + token.getAllFeatures());
System.out.println("partOfSpeech : " + token.getPartOfSpeech());
System.out.println("position : " + token.getPosition());
System.out.println("reading : " + token.getReading());
System.out.println("surfaceFrom : " + token.getSurfaceForm());
System.out.println("allFeaturesArray : " + Arrays.asList(token.getAllFeaturesArray()));
System.out.println("辞書にある言葉? : " + token.isKnown());
System.out.println("未知語? : " + token.isUnknown());
System.out.println("ユーザ定義? : " + token.isUser());
}


[b](2)3中分词模式[/b]

String word = "日本経済新聞でモバゲーの記事を読んだ。";
Builder builder = Tokenizer.builder();

// Normal
Tokenizer normal = builder.build();
List<Token> tokensNormal = normal.tokenize(word);
disp(tokensNormal);

// Search
builder.mode(Mode.SEARCH);
Tokenizer search = builder.build();
List<Token> tokensSearch = search.tokenize(word);
disp(tokensSearch);

// Extends
builder.mode(Mode.EXTENDED);
Tokenizer extended = builder.build();
List<Token> tokensExtended = extended.tokenize(word);
disp(tokensExtended);

[quote]日本経済新聞 | で | モバゲー | の | 記事 | を | 読ん | だ | 。 |
日本 | 経済 | 新聞 | で | モバゲー | の | 記事 | を | 読ん | だ | 。 |
日本 | 経済 | 新聞 | で | モ | バ | ゲ | ー | の | 記事 | を | 読ん | だ | 。 | [/quote]

[b](3)自定义词典[/b]

// 使用自定义字典
InputStream is = UserDictSample.class.getClassLoader().getResourceAsStream("resources/userdict_ja.txt");

Builder builder = Tokenizer.builder();
builder.userDictionary(is);
Tokenizer userTokenizer = builder.build();

List<Token> tokens2 = userTokenizer.tokenize(word);

StringBuilder sb2 = new StringBuilder();
for (Token token : tokens2) {
sb2.append(token.getSurfaceForm() + " | ");
}
System.out.println(sb2.toString());


[quote]稀 | 勢 | の | 里 | 寛 |
稀勢の里 | 寛 | [/quote]

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

[b](4)汉字转片假名[/b]

String word = "東京特許許可局";

Builder builder = Tokenizer.builder();
builder.mode(Mode.NORMAL);
Tokenizer tokenizer = builder.build();
List<Token> tokens = tokenizer.tokenize(word);

StringBuilder sb = new StringBuilder();
for (Token token : tokens) {
sb.append(token.getReading() + " | ");
}
System.out.println(sb.toString());

[quote]トウキョウ | トッキョ | キョカ | キョク | [/quote]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值