LoginSignup
5
5

More than 3 years have passed since last update.

日本語の発音を取得する【Python】【MeCab】

Posted at

やったこと

MeCabとPythonで日本語の発音をカナで取得する関数を作りました。
例えば、「今日はよく寝ました」と入力したら「キョーワヨクネマシタ」と返すようなものです。

環境

  • macOS Catalina 10.15.4
  • python3.8.0

下記を参考にMeCab、mecab-ipadic-neologd、mecab-python3をインストールしました。
https://qiita.com/taroc/items/b9afd914432da08dafc8

下記を参考にpythonからimportするMeCabのデフォルト辞書をmecab-ipadic-neologdにしておきました。
https://qiita.com/shimajiroxyz/items/3b475da3b6cd850d2c22

辞書はneologdでなくても構いません。

またひらがなをカタカナに変換する'jaconv'をインストールしておきます。

pip install jaconv

方針

MeCabの出力結果はデフォルトでは下記のようになっています。

表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音

このため、入力日本語をMeCabで形態素解析して、「発音」の部分を取得すればよいです。
ただし発音が取得できない未知語はどうしようもないので、「表層形」を可能な範囲でカタカナに変換したもので、代用することとします。

なお、今回の実装では発音を取得するため「今日は」は「キョーワ」と変換されます。もし「キョウハ」のようにルビを取得したい場合は「読み」の部分を取得するようにしてください。

コード

import MeCab
import jaconv

#記号を削除する関数
#(以下
#http://prpr.hatenablog.jp/entry/2016/11/23/Python%E3%81%A7%E5%85%A8%E8%A7%92%E3%83%BB%E5%8D%8A%E8%A7%92%E8%A8%98%E5%8F%B7%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E6%B6%88%E3%81%97%E5%8E%BB%E3%82%8B
#よりそのまま引用)
import unicodedata
import string

def format_text(text):
    text = unicodedata.normalize("NFKC", text)  # 全角記号をざっくり半角へ置換(でも不完全)

    # 記号を消し去るための魔法のテーブル作成
    table = str.maketrans("", "", string.punctuation  + "「」、。・")
    text = text.translate(table)

    return text
#(引用ここまで)

m = MeCab.Tagger() #形態素解析用objectの宣言

def getPronunciation(text):
    m_result = m.parse(text).splitlines() #mecabの解析結果の取得
    m_result = m_result[:-1] #最後の1行は不要な行なので除く

    pro = '' #発音文字列全体を格納する変数
    for v in m_result:
        if '\t' not in v: continue
        surface = v.split('\t')[0] #表層形
        p = v.split('\t')[1].split(',')[-1] #発音を取得したいとき
        #p = v.split('\t')[1].split(',')[-2] #ルビを取得したいとき
        #発音が取得できていないときsurfaceで代用
        if p == '*': p = surface
        pro += p

    pro = jaconv.hira2kata(pro) #ひらがなをカタカナに変換
    pro = format_text(pro) #余計な記号を削除

    return pro

#出力確認
text = '今日はよく寝ました'
print(text)
print(getPronunciation(text))

出力は下記です。

今日はよく寝ました
キョーワヨクネマシタ

参考

(https://qiita.com/shimajiroxyz/items/3b475da3b6cd850d2c22)
意味悲鳴: Pythonで全角・半角記号をまとめて消し去る

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5