環境:對日開發語言處理
要求:分析詞語,將詞語中的日文單詞分割,轉換形式。
分析:
任務1:詞語拆分
任務2:轉換形式
日文的形式轉換可以用kanavetor去實現 非常簡單 直接調用Kana類的convert方法就可以,在Kana的官網上可以看到用法(即便看不懂介紹,看到管網的表格應該也就一目了然了~)。
重點在於詞語的拆分上:
詞語拆分使用了Kuromoji,Kuromoji是一款非常好用的日語分詞工具,並且,分解后的詞是可以自動將漢字,平假名等轉換成カタカナ的,有類似需要的可以直接用這個而不用再去尋找其他工具了。Kuromoji我找到了兩個版本,一個是kuromoji,0.7.7版本,官網上說捐獻給了apache,內置在Lucene的4.0,5.0版本里,由於忘記Lucene的用法,暫且不考慮。另外一個版本是kuromoji-ipadic,這個東東和kuromoji都是一個公司出的,但是略有不同,稍微研究了一下,kuromoji在使用的時候是只能找到jar包,找不到源代碼文件的,通過maven下載可以,但是gradle是引入不了的。而kuromoji-ipadic則是gradlle也可以引用,並且引入之后可以看到源碼。此外kuromoji畢竟是以前的api,還有一些小小的缺陷。
kuromoji官網:http://www.atilika.org/
Kuromoji-ipadic官網:http://www.atilika.com/en/kuromoji/
Kuromoji用法:
1 Tokenizer tokenizer = Tokenizer.builder().build(); 2 for (Token token : tokenizer.tokenize("壽司が食べたい。")) {
// token 中存放的是分割后的詞 不同的屬性可以取到該詞的不同內容
// surfaceForm:原內容
3 System.out.println(token.getSurfaceForm() + "\t" + );
// baseForm:內容詞語的基礎 例如 食べたい⇒食べ
System.out.println(token.getBaseForm() + "\t" + );
4 }
↑↑↑這個api對日文漢字的識別率不如下面的api(有些簡體日文漢字和特別生僻的識別不出來,畢竟是老版本),並且遇到不認識的漢字時token調用get方法會得到null。。。不建議使用。
Kuromoji-ipadic用法:
1 Tokenizer tokenizer = new Tokenizer() ; 2 List<Token> tokens = tokenizer.tokenize("お壽司が食べたい。"); 3 for (Token token : tokens) { 4 System.out.println(token.getSurface()); // 讀取到的原內容 5 System.out.println(token.getReading()); // カタカナ 6 }
順帶一提,kuromoji-ipadic由於是用new產生產生實例的,所以如果你的工具或系統需要轉換大量詞匯,要注意不要做太多的new操作,不然會很慢很慢很慢,此時可以定義成靜態常量或者單例模式。
歡迎大家評論和指教。