- 締切済み
バッチファイル、awkスクリプトの作成について
日本語の文章を単語ごとに分け、さらにその単語の品詞を表示し、頻度ごとに並び替えるというバッチファイルかawkスクリプトを教えてください。同様に品詞ごとに分けた上で、頻度ごとに並び替えるバッチファイルかawkスクリプトも教えていただけたら幸いです。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- nightowl
- ベストアンサー率44% (490/1101)
前の回答を読み返してみて我ながら不親切だと思ったので、 awk でのサンプルを示します。でも awk でソートなどするのは面倒ですよ。 このプログラムのソートも半分インチキです。 asort() という関数もありますが gawk(GNU awk)の独自拡張だし。 すべてにおいて awk がベストの解ではありません。 統計なら Excel を使ってもいいし。 スクリプト言語で全部賄う必要があるなら、ここはもう Perl や Ruby などの出番だと個人的には思います。 { while (getline) { if (!/EOS/) { # 句読点をはねたいときはここに追加 freq[$0]++ lineno++ if (freq[$0] > maxfreq) maxfreq = freq[$0] } } } END { for (i = maxfreq; i > 0; i--) # 昇順にするにはここを書き換え for (line in freq) if (freq[line] == i) printf("%10d(%.3g%%) %s\n", freq[line], 100*freq[line]/lineno, line) } 茶筅の出力をパイプでこのスクリプトに食べさせてください。 後はこれを叩き台にして頑張ってください。
- nightowl
- ベストアンサー率44% (490/1101)
こんばんは。この間はお返事ありがとうございました。 どのようなテキストからどのような処理結果がほしいのか、 大まかなイメージだけでも示していただきたかったです。 「バッチファイル」とおっしゃるからには Windows 環境でしょうか。 まずは No.2 の方も URL つきで紹介されていますが、奈良先端大で開発されている 形態素解析システム「茶筌」(ChaSen)をインストールしましょう。 Windows 版の「WinCha」もあります。 以下はあなたの質問文を茶筌にかけてみた結果の一部です。 頻度 ヒンド 頻度 名詞-一般 ごと ゴト ごと 名詞-接尾-一般 に ニ に 助詞-格助詞-一般 並び ナラビ 並ぶ 動詞-自立 五段・バ行 連用形 替える カエル 替える 動詞-自立 一段 基本形 という トイウ という 助詞-格助詞-連語 バッチ バッチ バッチ 名詞-一般 ファイル ファイル ファイル 名詞-一般 か カ か 助詞-副助詞/並立助詞/終助詞 awk 未知語 スクリプト スクリプト スクリプト 名詞-一般 を ヲ を 助詞-格助詞-一般 教え オシエ 教える 動詞-自立 一段 連用形 て テ て 助詞-接続助詞 ください クダサイ くださる 動詞-非自立 五段・ラ行特殊 命令i 。 。 。 記号-句点 また No.1 の方の取り上げられたケースですが、 >「にわにはにわにわとりがいます」 →「に/わに(鰐)/はにわ(埴輪)/にわとり/が/い/ます」 確かに茶筌でも解析誤りに陥ってしまいました。 かしこのような一種「病的」なケースは入力を漢字仮名交じり文とすれば 問題なく回避できます。 さて、原文はファイル「source」に入っているものとして 形態素の出現頻度ごとにソートしてみます。 茶筌の出力フォーマットを指定し、見出し語と品詞のみを表示させます。 参考までに、Linux での処理結果は以下のようになりました。 chasen -F "%m\t%U/%H/\n" source | grep -v EOS | sort | uniq -c | sort -nr 5 に 助詞 4 ごと 名詞 3 を 助詞 3 、 記号 2 並び 動詞 2 分け 動詞 2 頻度 名詞 2 品詞 名詞 2 単語 名詞 2 替える 動詞 2 教え 動詞 2 ファイル 名詞 2 バッチ 名詞 2 スクリプト 名詞 2 の 助詞 2 て 助詞 2 か 助詞 2 awk 未知語 2 。 記号 1 文章 名詞 1 表示 名詞 1 日本語 名詞 1 同様 名詞 1 上 名詞 1 幸い 副詞 1 も 助詞 1 という 助詞 1 です 助動詞 1 で 助詞 1 たら 助動詞 1 た 助動詞 1 その 連体詞 1 し 動詞 1 さらに 副詞 1 ください 動詞 1 いただけ 動詞 気がついたら awk をまったく使っていませんでした。 このように、UNIX/Linux なら単機能のテキストツールを援用して コマンドラインから1行でいけます。 Windows で本格的にテキスト処理を続けるおつもりなら、 Windows に UNIX 環境を提供する「Cygwin」などの導入をお勧めします。 (この件についての追加質問はお受けいたしかねます)
- nota55
- ベストアンサー率37% (138/366)
それ自体はバッチやawkの仕事じゃないので,茶筌でも 使ってゴリゴリやる方法を考えたら? http://chasen.aist-nara.ac.jp/hiki/ChaSen/
- はなおか じった(@Jitta)
- ベストアンサー率42% (69/161)
そこまでできれば翻訳ソフトの約半分ができるので、バッチやスクリプトでは無理、と思うのですが。 例えば、「にわにはにわにわとりがいる」「ははははははとわらった」という入力があった場合、どのように“単語”を分けましょうか?“単語帳”が要りますよね。英語と違って、日本語の構文解析はかなり難しいですよ。 ご参考: http://www.google.com/search?q=%E6%97%A5%E6%9C%AC%E8%AA%9E+%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90&sourceid=opera&num=25&ie=utf-8&oe=utf-8