読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】nltkでロシア語の自然言語処理ができないか調査中、とりあえず歌詞の頻出単語ランキング

主に参考にしたのはこの記事

映画「The Social Network」の脚本をNLTKで解析して遊んでみた - ぬいぐるみライフ(仮)

ロシア語でも基本的に同じことができると思います。Pythonでやるならこの本が非常に参考になるでしょう(英語&日本語でやってます)。

 

入門 自然言語処理

入門 自然言語処理

 

 

とりあえずロシアのフォークメタルバンドКалевала(kalevala)の歌詞をてきとうなところでコピペしてきたファイル(russian/kalevala.txt)を解析しています。

ロシア語の辞書がないため、格変化は考慮していません。日本語の代表的な形態素解析エンジンであるMeCabに日本語の辞書を入れれば可能であると大阪大学の上原順一さんの論文に書いていたのですが、「先行研究で似たような辞書を作成したことがある」のを流用したようです。自分で作るか辞書を作ってる人に連絡をとってみるかしかなさそうです。

MeCabで利用可能なロシア語辞書について

上原さんは統計解析ソフトRMeCabを利用していますが、Pythonでも同じように使えます。詳しくはググりましょう。

 

Unix環境ならこんなのも使えるようです。これに使われてる辞書をMeCabで拝借することもできるかもしれません。

ロシア語形態素解析 lemmatizer - insomnia

 

 一応コード。nltkがよく分かってないので無駄が多そう。nltkを使った日本語の自然言語処理の例は数多いので、それを流用するといいと思います。

例えばこんなのとか。

「魔法少女まどか☆マギカ」の台詞をNLTK(Natural Language Toolkit)で解析する - Yuta.Kikuchiの日記

#データ元:http://jap-lyrics.com/uta/miseru/1818110/kalevala/kashi-ando-honyaku-kalevala/
import nltk

#歌詞ファイルを読み込み
raw = open('russian/kalevala.txt').read()
tokens = nltk.word_tokenize(raw)
text = nltk.Text(tokens)
#単語のリストを作成 fdist = nltk.FreqDist(w.lower() for w in text)
#"単語 出現数"をプリント for w in keys: print w, fdist[w]

最後printしているだけなので、適宜エクスポートするようにしましょう。眠いので暇な時にやります。

出力結果はこんな感じ。

, 20
он 5
На 3
не 3
! 2
: 2
; 2
Вяйнямёйнен 2
Дал 2
Не 2
без 2
(以下略)

大文字と小文字が区別されてないのも問題ですね。これは最初に参考として挙げたThe Social Networkの分析に載っている「全部小文字にして表記ゆれをなくす」方法を参考にしましょう。

また、ストップワード(英語なら'the'や'to'などのようにどの文書でも高頻度で出現する単語)を除く必要もあります。例えば上の例なら','がストップワードにあたるでしょう。nltkパッケージにはデフォルトで英語のストップワードが用意されていますが、ロシア語の解析では最初のうちは手作業で取り除くしかないと思います。