elasticsearchとかsolrでお世話になるkuromojiですがこんな使い方もできました。
import com.atilika.kuromoji.ipadic.Token
import com.atilika.kuromoji.ipadic.Tokenizer
import scala.collection.JavaConversions._
val tokenizer: Tokenizer = new Tokenizer()
tokenizer.tokenize("今日の晩ご飯はお豆腐").map(_.getReading()).mkString
実行結果
res: String = キョウノバンゴハンハオトウフ
ただ変な(?)日本語入れるとToken#getReading()が*を返します。
tokenizer.tokenize("イエに帰る").map(_.getReading()).mkString
実行結果
res: String = *ニカエル
なので*の場合はToken#getSurface使うようにしてみました。
tokenizer.tokenize("イエに帰る").map { token => if (token.getReading == "*") token.getSurface else token.getReading }.mkString
せっかくカタカナにできたのでひらがなに変換してみます。
icu使うと簡単です。
import com.ibm.icu.text._
val kataToHira = Transliterator.getInstance("Katakana-Hiragana")
kataToHira.transliterate("キョウノバンゴハンハオトウフ")
実行結果
res: String = きょうのばんごはんはおとうふ
ですが長音ある場合はちょっと困った動作になります。。。
kataToHira.transliterate("スーパーマーケット")
実行結果```
res: String = すうぱあまあけっと
これが望む答えの場合もあるんでしょうが、、個人的に長音はそのままそっとしておいてほしいのでこんなことをしました。
```scla
"スーパーマーケット".split("ー").map { kataToHira.transliterate }.mkString("ー")
実行結果
res: String = すーぱーまーけっと
最後にひらがなをローマ字にしてみます。
val hiraToLatin = Transliterator.getInstance("Hiragana-Latin")
hiraToLatin.transliterate("きょうのごはんはおとうふ")
実行結果
res: String = kyounogohanhaotoufu
まとめたものは[こちら]
(https://github.com/tky/japanese-tokenizer)