ex_mecab.plの内容をみてみた
ex_mecab.pl の中でやっていることをみてみました。
# 出力モードを指定 # 1 → 専門用語+重要度、2 → 専門用語のみ # 3 → カンマ区切り my $output_mode = 1;
出力形式を変えられるようになっているんですね。
# # 重要度計算で、連接語の"延べ数"、"異なり数"、"パープレキシティ"のい # ずれをとるか選択。パープレキシティは「学習機能」を使えない # また、"連接語の情報を使わない"選択もあり、この場合は用語出現回数 # (と設定されていればIDFの組み合わせ)で重要度計算を行う # (デフォルトは"延べ数"をとる $obj->use_total) # #$data->use_total; # 延べ数をとる #$data->use_uniq; # 異なり数をとる #$data->use_Perplexity; # パープレキシティをとる(TermExtract 3.04 以上) #$data->no_LR; # 隣接情報を使わない (TermExtract 4.02 以上)
結果の横に出てくる数値が”重要度”のようです。
設定しないと「延べ数」になるようですね。
これ設定を変えて結果がどうなるか見てみるのも良いかも??
# 重要度計算で、連接情報に掛け合わせる用語出現頻度情報を選択する # $data->no_LR; との組み合わせで用語出現頻度のみの重要度も算出可能 # (デフォルトは "Frequency" $data->use_frq) # TFはある用語が他の用語の一部に使われていた場合にもカウント # Frequency は用語が他の用語の一部に使われていた場合にカウントしない # #$data->use_TF; # TF (Term Frequency) (TermExtract 4.02 以上) #$data->use_frq; # Frequencyによる用語頻度 #$data->no_frq; # 頻度情報を使わない
これよくわからないですね。
またこんどどう変わるか確認してみます。
# # 重要度計算で、学習機能を使うかどうか選択 # (デフォルトは、使用しない $obj->no_stat) # #$data->use_stat; # 学習機能を使う #$data->no_stat; # 学習機能を使わない
学習機能を使うと、どうなるのか?
単名詞の連接情報は、元となるデータが多ければ多いほど正確な統計データが
得られると推定されます。この学習機能は、いままでに処理対象としたテキストか
ら単名詞の連接情報を蓄積し、重要度計算で用いるものです。ただし、雑多な
文献を扱うと、結果として一般すぎる語が上位にきます。分野を特定した上でお使
い下さい。
とのことです。
どんな原文を解析させていくかで、結果が変わっていくということでしょうか?
# 重要度計算で、「ドキュメント中の用語の頻度」と「連接語の重要度」 # のどちらに比重をおくかを設定する。 # デフォルト値は1 # 値が大きいほど「ドキュメント中の用語の頻度」の比重が高まる # #$data->average_rate(0.5);
なるほど。これは面白そうです。
これも値を変えてみてどうなっていくか調べたいですね。
# 学習機能用DBにデータを蓄積するかどうか選択 # 重要度計算で、学習機能を使うときは、セットしておいたほうが # 無難。処理対象に学習機能用DBに登録されていない語が含まれる # と正しく動作しない。 # (デフォルトは、蓄積しない $obj->no_storage) # #$data->use_storage; # 蓄積する #$data->no_storage; # 蓄積しない
これは、学習機能を使う、とセットでないと意味はなさそう。
# 学習機能用DBに使用するDBMをSDBM_Fileに指定 # (デフォルトは、DB_FileのBTREEモード) # #$data->use_SDBM; # 過去のドキュメントの累積統計を使う場合のデータベースの # ファイル名をセット # (デフォルトは "stat.db"と"comb.db") # #$data->stat_db("stat.db"); #$data->comb_db("comb.db");
DBの種類の設定とDBファイル名の設定ですね。
これは別にそのままでいいと思います。
DBM(バークレーDB)はデフォルトでは入っていないからだそうです。
しかし、今はレンタルサーバーでも入っていると思います。
# データベースの排他ロックのための一時ディレクトリを指定 # ディレクトリ名が空文字列(デフォルト)の場合はロックしない # #$data->lock_dir("lock_dir");
ロックですね。シングルで使うには必要ないでしょう。
# 「形態素解析」済みのテキストファイルから、データを読み込み # 専門用語リストを配列に返す # (累積統計DB使用、ドキュメント中の頻度使用にセット) # #my @noun_list = $data->get_imp_word($str,'var'); # 入力が変数 my @noun_list = $data->get_imp_word($InputFile); # 入力がファイル
変数読み込みもできるように配慮されています。
WEBからの読み込みと組み合わ焦ることも簡単にできそうですね。
# 前回読み込んだ「形態素解析」済みテキストファイルを元に # モードを変えて、専門用語リストを配列に返す #$data->use_stat->no_frq; #my @noun_list2 = $data->get_imp_word(); # また、その結果を別のモードによる結果と掛け合わせる #@noun_list = $data->result_filter (\@noun_list, \@noun_list2, 30, 1000);
ここ謎ですね~
すべてコメントですから、デフォルトでは動作していません。
get_imp_word という関数を使って何かをしマージしているように見えます。
30,1000という引数が何を意味するのでしょうかね・・・?
# # 専門用語リストと計算した重要度を標準出力に出す # foreach (@noun_list) { # 日付・時刻は表示しない next if $_->[0] =~ /^(昭和)*(平成)*(\d+年)*(\d+月)*(\d+日)*(午前)*(午後)*(\d+時)*(\d+分)*(\d+秒)*$/; # 数値のみは表示しない next if $_->[0] =~ /^\d+$/; # 結果表示 printf "%-60s %16.2f\n", $_->[0], $_->[1] if $output_mode == 1; printf "%s\n", $_->[0] if $output_mode == 2; printf "%s,", $_->[0] if $output_mode == 3; }
出力形式をいじれますね。
次回はこれを踏まえて検証をしてみたいと思います。
ディスカッション
コメント一覧
まだ、コメントがありません