日本語の自然言語処理 - nltk と Janome -
前回英文を nltk で読み込んだ際、言葉の集計や描画に matplotlib 等のライブラリが使えたので、日本語についてもそのつもりでいたのですが…。
何日かの印象でしかありませんが、(少なくとも私にとって)Python 自体の恩恵を簡単に受けられるという点では、Janome というライブラリの方がとっかかりは良いのかもしれない、と感じています。
目次
1.nltk による日本語の取り扱い
2.Janome を試してみる
3.まとめ ~ 自然言語処理と可視化
1.nltk による日本語の取り扱い
すでに色々な方が試していらっしゃいますし、「Python による日本語自然言語処理」という、本の 1 章にもなっている詳しいサイトもあります。ニーズやお好みに合わせて参考にされるのが良いかと思います。
nltk を使った日本語読み込みでは、PlaintextCorpusReader という宣言を使って読み込んだファイルのトークン化やコンコーダンス等の例が出ています。
読み込んだ jp_text に対しトークン化等の命令をするのですが、英文の時とどうも命令が違います。
日本語と英語の違いがあるのは分かりますが、どうも違うことをやっているような気がしたので、PlaintextCorpusReader で読み込んだ jp_text のデータ型を見てみました。
英文をトークン化した時はリストであったので、その後 matplotlib 等のライブラリをそのまま使えましたが、PlaintextCorpusReader を使って読み込んだ場合、その中身についてひと手間かけないといけないようです。nltk を使えば、英語と日本語と同様に扱えると思ったのですが、違う操作とデータを扱うのであれば、特に nltk を使って日本語をを操作する積極的な理由がなくなりました。もう少し色々分かってくると解決するかもしれませんが、いったんここで別のライブラリを試してみることにしました。
2.Janome を試してみる
PurePython で書かれた日本語自然言語処理のライブラリで、なんといっても、公式 documentation がとても分かりやすいです。
インストールは以下のみで完了です。
トークン化も、(少なくとも私にとっては)非常に直感的で、以下の script で
トークンの一覧が出ます。
こうやって token が取り出せるということは、t.tokenize(…) のデータ型は、
リストです。つまり、前回英語に関してやったように、collections 等を使って seaborn 等による可視化が出来るということです。
出来ることが一つでも多いことは、初学者にとってはとてもありがたいことです。が、公式ページには、速度は 10 倍程度 MeCab というライブラリより遅いともあります。現時点では、私は単なるライブラリユーザーなので、ドキュメントやライブラリが使いやすいというのは、十分過ぎるメリットです。
3.まとめ ~ 自然言語処理と可視化
自然言語データを可視化しようというニーズは、自然言語処理に取り組んでいる方にとっては、おそらくかなり二次的なニーズかとも思います。けれども、分析に改善すべき点があったとしても、ある段階でどこまで到達できたのかについて可視化できることは、少なくとも実務的にはとても意味があると個人的には感じます。
自然言語と一口に言っても、英語と日本語では構造や単語の処理も違います。自然言語処理にとってはいわば、他の場合におけるデータの前処理、つまり様々な処理を行う前に意味のあるデータの形に整えるための操作がメインターゲットになっている、と言えます。人間にとって全体として意味があるものから、意味を持つ最も小さな単位への細分化。言語自体の分析と並んで、Computer 特有の文字コード等の技術的な違いも相まって、やはりなかなか煩雑な世界のようですね。
本日も最後までお付き合いありがとうございました。