激凹みから立ち直る方法

日本語の文章を単語ごとに分け、さらにその単語の品詞を表示し、頻度ごとに並び替えるというバッチファイルかawkスクリプトを教えてください。同様に品詞ごとに分けた上で、頻度ごとに並び替えるバッチファイルかawkスクリプトも教えていただけたら幸いです。

A 回答 (4件)

前の回答を読み返してみて我ながら不親切だと思ったので、


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)
}

茶筅の出力をパイプでこのスクリプトに食べさせてください。
後はこれを叩き台にして頑張ってください。

参考URL:http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manua …
    • good
    • 0

こんばんは。

この間はお返事ありがとうございました。

どのようなテキストからどのような処理結果がほしいのか、
大まかなイメージだけでも示していただきたかったです。

「バッチファイル」とおっしゃるからには 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」などの導入をお勧めします。
(この件についての追加質問はお受けいたしかねます)

参考URL:http://www.cygwin.com/,http://www.mars.dti.ne.jp …
    • good
    • 0

それ自体はバッチやawkの仕事じゃないので,茶筌でも


使ってゴリゴリやる方法を考えたら?

http://chasen.aist-nara.ac.jp/hiki/ChaSen/

参考URL:http://chasen.aist-nara.ac.jp/hiki/ChaSen/
    • good
    • 0

 そこまでできれば翻訳ソフトの約半分ができるので、バッチやスクリプトでは無理、と思うのですが。



 例えば、「にわにはにわにわとりがいる」「ははははははとわらった」という入力があった場合、どのように“単語”を分けましょうか?“単語帳”が要りますよね。英語と違って、日本語の構文解析はかなり難しいですよ。

ご参考:
http://www.google.com/search?q=%E6%97%A5%E6%9C%A …

参考URL:http://www.google.com/search?q=%E6%97%A5%E6%9C%A …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報