カテゴリー別アーカイブ: 自然言語処理

KNPの解析結果をXMLで受け取る(照応解析)🐫

KNPの出力結果を眺めて、どうやって解析すればいいのか悩んでいたのですが、KNPに同梱のPerlライブラリでXML出力をサポートしているのを発見して安心しました。(「perldoc KNP::Result」すると書いてある。)

CaboChaができない照応解析をする必要があってKNPをインストールしたので、早速、人称代名詞を人称代名詞が指し示す人物名に置換するプログラムを書いてみました。

Perl 5.22.0 にアップデートしてから「Lingua::JA::Moji」が警告を吐くようになってしまったので、暇があれば作者にプルリクエストしておきましょうかね。

照応解析では、名前の女性名らしさや男性名らしさなどはさすがに考慮してくれないようなので、それも考慮させたい場合は、自前でなんとかしないといけません。

照応解析誤りが目立ちますが、「安倍 晋三」と「晋三」を同一人物と推定してくれるだけでも非常に助かります。

KNPの固有表現抽出と照応解析は以下が詳しいです。

最近のCPAN活動

Pythonも少しやっていましたが、文字列処理はPerlのほうが強力で完全に乗り換える気にはなりません。おそらく、前処理はPerlでやって、統計解析やグラフ描画はPythonでやるのが一番楽だと思います。

Lingua::JA::NormalizeText
日本語正規化モジュール。2000万ツイート文を正規化しても問題が発生しなかったので Ver. 0.50 に上げました。コードに変化はありません。

Lingua::JA::KanjiTable
常用漢字と人名用漢字のユーザ定義文字プロパティを提供するモジュール。2015年1月7日に人名用漢字に「巫」が追加されたのでアップデートしました。

Lingua::JA::DocumentFrequency::AozoraBunko
青空文庫での文書頻度を返すモジュール。たまに欲しくなるので新規にアップロードしました。

他の言語をやればやるほどにCPANを素晴らしく思います。

Python勉強メモ#5「homura と madoka で形態素の頻度を数えよ」

あらかじめ「pip」とかで「homura」と「madoka」を入れておきましょう。

まずはダウンローダーの「homura」で形態素解析済みの青空文庫のデータをダウンロード。

適当に解凍したら「madoka」(Pythonの辞書より省メモリかもしれないデータ構造を提供するライブラリ)で形態素をカウントです。
(Madokaの詳細: http://s-yata.github.io/madoka/index.ja.html

出力された頻度(推定値)は以下のようになりました。

実際の頻度は以下の通り。

Web Speech API と Twitter n-gram を利用した英語発音矯正ゲーム

4月からは自分が研究室で唯一の日本人になってしまうので、英語の発音のトレーニングをひたすら楽しく積めるWebアプリケーションを研究の合間に作っていました。

「えいごのはつおんとれーにんぐ」
https://pron.chobitool.com/

開発は6日間ぐらいで、そのうち素材集めに3日ほど費やしました。

Web Speech API に音声認識と音声合成のインターフェースがあるので、これらをフル活用しました。
出題される問題は Twitter n-gram の高頻度の表現から抽出しています。

いい練習になるので、マイクとChromeがあればどうぞ。

オペレーターズサイドという音声認識ゲームに触発されて「なんだとはなんだゲーム」も作りました。

学生寄宿舎の壁が薄すぎて小さい声でしか練習できないのが辛いところです。

青空文庫のIDF(逆文書頻度)リストを出す

珍しい語には高い重みを、ありふれた語には低い重みを与えるもので、idf_t = log(N / df_t) (N:全文書数、df_t:用語tを含む文書数)で定義されます。
小説執筆サイトの著者の特徴語を出すのにIDFを利用したいために計算しました。
データは「青空文庫 形態素解析データ集」の「newnew.csv.gz」を利用しました。

まずは以下のコードで全文書数と形態素ごとの df_t を求めました。

上記のコードで出た N(全文書数 = 6704)と df_t(用語tを含む文書数)を使って idf_t を求めるコードは以下の通りです。
(以下のコードを使う場合は「全文書数」と「形態素を含む文書数ランキング」の行と空行は消しておいてください。)

(自分にとって)不要な形態素をふるいにかけるのが以下のコードです。

順番に使い捨てPerlスクリプトを実行していくと以下のIDFリストが得られます。

文書数(作品)の数がもう少し欲しいところですが、これでもかなり使えるかと思います。