概要
Sudachiで発音を取得する関数を作りました。
背景
形態素解析ライブラリのうちMeCabでは発音を取得できますが、Sudachiでは「読み」のみで発音は取得できません。
そこで「読み」の結果を少し調整して、発音(っぽい文字列)を取得する関数を作りました。
実装
ライブラリをインストールします。
辞書はなんでもよいですが、今回はfullでやってみます。
pip install sudachipy
pip install sudachidict_full
関数を作ります。以下がポイントです。
- 表層系、読み、品詞はそれぞれ
surface
、reading_form
、part_of_speech
メソッドで取得可能 - 記号の発音は取得しない。品詞が「補助記号」かどうかで判定
- 助詞の「は」「へ」は「ワ」「エ」になおす
from sudachipy import tokenizer
from sudachipy import dictionary
tokenizer_obj = dictionary.Dictionary(dict="full").create()
mode = tokenizer.Tokenizer.SplitMode.A
def get_word_pronunciation(text):
tokens = tokenizer_obj.tokenize(text ,mode)
prons = []
for token in tokens:
pron, surface, pos = token.reading_form(), token.surface(), token.part_of_speech()[0]
if pos == "補助記号": #記号は発音しないので結果に含めない
continue
if surface == "は" and pos == "助詞": #助詞の「は」は「わ」になおす
pron = "ワ"
elif surface == "へ" and pos == "助詞": # 助詞の「へ」は「え」になおす
pron = "エ"
prons.append(pron)
return prons
print(get_word_pronunciation("吾輩は猫であるaseaewf123。「どこへ」いきますか"))
['ワガハイ', 'ワ', 'ネコ', 'デ', 'アル', 'aseaewf', 'イチニサン', 'ドコ', 'エ', 'イキ', 'マス', 'カ']