In [1]:
from natto import MeCab
text = "日本語です。これはカタカナです。ABC123 は全角英数字です。"
In [2]:
katakana = (12449, 12532) # katakana code-points range
hiragana = (12353, 12436) # hiragana code-points range
kana2hira = dict(zip(range(katakana[0], katakana[1]+1),
range(hiragana[0], hiragana[1]+1)))
各MeCabNode の char_type を見てカタカナからひらがなに変換するか否かを判断して出力する関数をつくって、 後は map などで適用します。
In [3]:
with MeCab("-Oyomi") as yomi:
def _tr(n):
if n.is_nor():
if n.char_type == 2:
return n.feature.translate(kana2hira)
else:
return n.surface
else:
return ""
print("".join(map(_tr, yomi.parse(text, as_nodes=True))))
以上。