何をするのか
- テキストを表音(後述)表記にする
- ほぼ文節ごとにスペースを入れる
例
入力:
今日はある場所(東京都京都市北区東町西-南-3)へゲームを消化するために行きましたが、そもそもゲームがありませんでした。なので明日を消そうと思います。
結果:
キョオワ アル バショ(トオキョオ ト キョオト シ キタ ク ヒガシマチ ニシ-ミナミ-3)エ ゲエムヲ ショオカ スル タメニ イキマシタガ、ソモソモ ゲエムガ アリマセンデシタ。ナノデ アスヲ ケソオト オモイマス。
用語説明
表音とは
簡単に説明すると音そのままを文字にする書き方。
例の中の単語で言うとこういう書き方↓
- 紹介(しょうかい) → しょおかい
- 今日(きょう) → きょお
- ゲーム → げえむ
- 〜〜へ(方向を示す助詞) → 〜〜え
- 〜〜は(主語とかの助詞) → 〜〜わ
文節とは
文節とは、文章を不自然にならない程度に区切ったときの単位。
- 私は走った。 → 私は / 走った。
- 今日は晴れだ。 → 今日は / 晴れだ。
- 明日に向かって走る。 → 明日に / 向かって / 走る。
大抵自立語の前を区切ればOK
自立語の後に付属語が連なるようになる。
MeCab (fugashi)
これは何かというと、日本語形態素解析システムというもので、文章の単語の品詞や読みを解析してくれるシステムである。
MeCabのPythonライブラリがfugashiというライブラリになる。
これをメインに表音と文節を実装しよう。
UniDic
UniDicは、MeCabの解析用の辞書で、ここにMeCabで使われる品詞が定義されている。
基本的に中学国語の文法で出る品詞そのもので、それに加えて記号や接頭辞などが定義されている。
実装
表音
UniDicに含まれる属性でpronという属性を使う。
これは発音形...つまり表音そのものになる。
ただ、"を"が"お"になったり、"今日"が"きょー"になるので、一部を条件分岐などで処理する。
文節
UniDicに定義された品詞で、自立語であるものの前にスペースを入れる。
ただ、接頭辞→名詞や、数詞、記号など、スペースを入れなくても良いなっていうのもあるのでこれを条件分岐で処理する。
UniDicの属性だと、基本的にpos1、数詞はpos2に含まれる。
一覧は以下
https://hayashibe.jp/tr/mecab/dictionary/unidic/pos
スペース、改行
元から存在するスペース、改行はfugashiに通すと消える。なので一旦分離してそれぞれを関数に通す。
再帰処理にする。
完成品
参考