形態素解析から単語出現頻度計算

このQ&Aのポイント
  • C初心者のための形態素解析と単語出現頻度計算の方法を教えてください
  • Mecabを使用して形態素解析を行い、テキストファイルから一般名詞の出現頻度を計算したいです
  • 形態素解析結果から余分な文字を省き、テキストファイルから一般名詞の出現頻度を計算する方法を教えてください
回答を見る
  • ベストアンサー

形態素解析から単語出現頻度計算

C初心者です。 Mecabである文章の形態素解析を行ったのですが、そこから出現回数を調べたいのです。 形態素解析の結果が(テキスト文書で出力すると) 例)------ 10 名詞,数,*,*,*,*,* 年 名詞,接尾,助数詞,*,*,*,年,ネン,ネン の 助詞,連体化,*,*,*,*,の,ノ,ノ 歳月 名詞,一般,*,*,*,*,歳月,サイゲツ,サイゲツ と 助詞,並立助詞,*,*,*,*,と,ト,ト -------- のように余分な文字(名詞etc..)が入っているのでどうしたらよいのか分りません。 テキストファイル(またはcsvファイル)から読み込んで、一般名詞だけ頻度計算を行うにはどのようなプログラムを書けばよいのでしょうか? 過去の質問を読んでも、いらないものを省く方法が分からなかったもので。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

結果を一行ずつ解析して、 > 歳月 名詞,一般,*,*,*,*,歳月,サイゲツ,サイゲツ のように「単語 名詞,一般...」の書式になってるとこだけ計算対象とすればよいのでは。 方法としてはいらないものを「省く」んではなく「無視する」やり方ですが。

YAMADAni
質問者

お礼

ありがとうございます。 分けて計算していけばいいのですね!

関連するQ&A

  • 形態素解析とtfidf計算処理のjavaプログラム

    二つのプログラムを作成しようと思っています。 1、一行に「単語<tab>数字列(132:1,83:2,........)」という形のデータが存在するファイルを読み込んで、単語の部分(殆ど名詞)だけ抽出し形態素解析(cmecabを使用)して名詞の何の種類かによって値を与え、一行に「単語<tab>値」という形でテキストファイルに出力するプログラム 値について 一般名詞、固有名詞の場合:2 形容動詞語幹の場合:1 サ変接続、副詞可能、ナイ形容詞語幹、接尾、非自立の場合:0.5 代名詞、数詞、その他(動詞や副詞、接頭詞)の場合:0 例:読み込むファイルの中身(単語<tab>文書番号:その文書での単語の出現回数,.........) 小学校 76:1,167:1,254:1,395:1,400:1,488:1 旦那 183:1 委員 275:1 最終 401:1 月曜日 376:1 以下のプログラムはCmecabでテキストファイルを読み込んで形態素解析し出力するプログラム。これを改造すればいけると思っています。 // 引数に解析したいファイルを指定 // 結果は"cmecab-output.txt"に出力 // コンパイル方法"javac -encoding utf8 cmecab.java" // 入力ファイルの文字コードはUTF8で保存しておく // 出力ファイルの文字コードもUTF8で出力されるので注意 // Mecabの辞書はUTF8でコンパイルしておくこと import net.moraleboost.mecab.Tagger; import net.moraleboost.mecab.impl.StandardTagger; import net.moraleboost.mecab.Node; import java.io.*; import java.util.*; import java.lang.*; public class cmecab{ public static void main(String[] args) throws Exception{ // 引数が無い場合はヘルプを表示 if (args.length == 0) { System.out.println("使用方法: java cmecab [入力テキストファイル名]"); return; } // バージョン文字列を取得 System.out.println("MeCab version: " + StandardTagger.version()); // 入出力ファイルの設定 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF-8")); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("cmecab-output.txt"), "UTF-8")); String text = ""; while((text = br.readLine()) != null){ // Taggerを構築。 // 第一引数には、MeCabの辞書の文字コードを与える。 // 第二引数には、MeCabのcreateTagger()関数に与える引数を与える。              Tagger tagger = new StandardTagger("UTF-8", ""); // tagger.parse()を呼び出して、文字列を形態素解析する。 // 返されるオブジェクトは、Iterator<String>を実装している。 Node node = tagger.parse(text); // 一つずつ形態素をたどりながら、表層形と素性を出力 while (node.hasNext()) { String surface = node.next(); String feature = node.feature(); bw.write(surface + "\t" + feature +"\n"); } // taggerをクローズ tagger.close(); } br.close(); bw.close(); } } 例:形態素解析して出力される形(「単語<tab>品詞,名詞の形」において「名詞の形」の部分を抽出して上記に書いた値に振り分けたいと思っている。) 70 名詞,数,*,*,*,*,* : 名詞,サ変接続,*,*,*,*,* 1 名詞,数,*,*,*,*,* 何処 名詞,代名詞,一般,*,*,*,何処,ドコ,ドコ 2、1で読み込んだ「単語<tab>文書番号:その文書での単語の出現回数,.........」という形のファイルを読み込んでtfidf値を求め、一行に「単語<tab>tfidf値」という形でテキストファイルに出力していくプログラム tfidfの定義 tf=文書番号Yにおける単語Xの出現確率(出現確率の分母はその文書における単語の合計数) idf=log(文書の合計数/単語Xを含む文書数) よろしくお願いいたします。

  • 形態素解析Macabの並び替え方と、主な利用方法

    PHPにて形態素解析のMecabを使ってみました。 しかし、いまいち利用方法が分かりません。 活用系とか分離されたのは分かるのですが、 例えば「アイスクリーム」という文字が何か出たとか、名詞の出現回数の多い順に並び替える・・・ といった事は出来ないのでしょうか? 配列で分離された文字が返ってくるのは分かるのですが、それをsortして・・・とか考えたのですが良く分かりませんでした。 どのようにすればいいのでしょうか? あまり思ったようなMecabの情報とか出てこないようなので質問させて頂きました。 また、上記のように出現回数の多い順に並び替える・・・以外にどのような利用法が考えられるのでしょうか? 形態素解析など学んでいないので分からないのですが、利用方法のイメージが浮かんできません。

    • ベストアンサー
    • PHP
  • 【MeCab】解析結果が出力できません

    急に仕事でテキストマイニングが必要になり、 なんとかmecabにトライしているものの、現在つまづいております。 mecabにてテキストを解析したあと、 その結果を出力したいので出力コマンドを入力しましたが、 コマンドと認識されずコマンド自体が解析されてしまいます。 ※出力コマンドに限らず他のコマンドもそうです。 初歩的な質問で申し訳ございませんが、 どなたかお知恵を貸して頂ければと思います。 下記がコマンド実行後の状況です。 ============================ % mecab -0dump % 名詞,サ変接続,*,*,*,*,* mecab 名詞,一般,*,*,*,*,* - 名詞,サ変接続,*,*,*,*,* 0 名詞,数,*,*,*,*,* dump 名詞,固有名詞,組織,*,*,*,* EOS ============================ ※KHcorderもエラーが発生し対応できませんでした。  他にテキストマイニングができるフリーソフトなどご存知でしたら  合わせて教えて頂ければと思います。  分析対象はTwitterでの投稿内容です。 宜しくお願いします。

  • 形態素解析の解析内容を各品詞別にファイルに書き込みたいです。

    形態素解析の解析内容を各品詞別にファイルに書き込みたいです。 以下のサイトのフォームに文章を入力すると品詞ごとに分解されます。 http://dai-gokuh.sakura.ne.jp/jikkenn/morph11.html その品詞をそれぞれの品詞ファイルに書き込みたいと思っています。 例えば、「餃子はおいしい。」と入力すれば、 餃子 は名詞ファイルに、 は は助詞ファイルに、 おいしい は形容詞ファイルに、 ○ はその他ファイルに書き込まれます。 また、「ラーメンはおいしい。」などと書き込むと今度はラーメンが新しいワードとしてファイルに登録されます。このようなプログラムを作りたいと思っています。 どなたかよろしくお願いします。 MECAPIについては以下のサイトもご参考ください。 言語はPerlでお願いします。 http://mimitako.net/api/mecapi.cgi

    • ベストアンサー
    • Perl
  • EUC-JPのファイルをutf-8に変換したい

    EUC-JPで書かれたデータをpythonで形態素解析しようと思っています。 pythonにはutf-8がデフォルトとなっているmecabが入っています。 名詞のみを取り出したいのですが、文字コードのせいなのか、条件分岐がうまくできません。 EUC-JPの文章をutf-8で形態素解析すれば整合性がとれてうまくいくとおもうのですが、どのようにすればいいのでしょうか。よろしくお願いします。

  • mecab-pythonのインストールに失敗しまし

    先ほどmecabのインストールに成功して、今度はmecab-pythonをインストールしようとしたら、失敗したようです。 参考にしたサイトは以下です http://tatsuyaoiw.hatenablog.com/entry/20120414/1334405065 ●mecabのインストール直後 root@debian:/usr/local# mecab 参考までに、私がインストールした手順を下に書きます。 参考 名詞,サ変接続,*,*,*,*,参考,サンコウ,サンコー まで 助詞,副助詞,*,*,*,*,まで,マデ,マデ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 、 記号,読点,*,*,*,*,、,、,、 私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ インストール 名詞,一般,*,*,*,*,インストール,インストール,インストール し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 手順 名詞,一般,*,*,*,*,手順,テジュン,テジュン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 下 名詞,一般,*,*,*,*,下,シタ,シタ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 書き 動詞,自立,*,*,五段・カ行イ音便,連用形,書く,カキ,カキ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 。 記号,句点,*,*,*,*,。,。,。 EOS ^Z ●ここからmecab-pythonインストール開始 root@debian:/usr/local# wget *ttp://mecab.googlecode.com/files/mecab-python-0.993.tar.gz --2015-01-08 06:05:07-- *ttp://mecab.googlecode.com/files/mecab-python-0.993.tar.gz mecab.googlecode.com (mecab.googlecode.com) をDNSに問いあわせています... 173.194.72.82 mecab.googlecode.com (mecab.googlecode.com)|173.194.72.82|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 63267 (62K) [application/x-gzip] `mecab-python-0.993.tar.gz' に保存中 100%[======================================>] 63,267 147K/s 時間 0.4s 2015-01-08 06:05:09 (147 KB/s) - `mecab-python-0.993.tar.gz' へ保存完了 [63267/63267] root@debian:/usr/local# tar zxvf mecab-python-0.993.tar.gz mecab-python-0.993/ mecab-python-0.993/MeCab.pyc mecab-python-0.993/LGPL mecab-python-0.993/BSD mecab-python-0.993/COPYING mecab-python-0.993/setup.py mecab-python-0.993/test.py mecab-python-0.993/MeCab.py mecab-python-0.993/GPL mecab-python-0.993/bindings.html mecab-python-0.993/README mecab-python-0.993/MeCab_wrap.cxx mecab-python-0.993/AUTHORS root@debian:/usr/local# cd mecab-python-0.993 root@debian:/usr/local/mecab-python-0.993# python setup.py build running build running build_py creating build creating build/lib.linux-x86_64-2.7 copying MeCab.py -> build/lib.linux-x86_64-2.7 running build_ext building '_MeCab' extension creating build/temp.linux-x86_64-2.7 gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I/usr/include/python2.7 -c MeCab_wrap.cxx -o build/temp.linux-x86_64-2.7/MeCab_wrap.o cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default] g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/MeCab_wrap.o -L/usr/local/lib -lmecab -lstdc++ -o build/lib.linux-x86_64-2.7/_MeCab.so root@debian:/usr/local/mecab-python-0.993# sudo python setup.py install running install running build running build_py running build_ext running install_lib copying build/lib.linux-x86_64-2.7/_MeCab.so -> /usr/local/lib/python2.7/dist-packages copying build/lib.linux-x86_64-2.7/MeCab.py -> /usr/local/lib/python2.7/dist-packages byte-compiling /usr/local/lib/python2.7/dist-packages/MeCab.py to MeCab.pyc running install_egg_info Writing /usr/local/lib/python2.7/dist-packages/mecab_python-0.996.egg-info ●ここからmecab-python試験 root@debian:/usr/local/mecab-python-0.993# python Python 2.7.3 (default, Jan 2 2013, 13:56:14) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import MeCab Traceback (most recent call last): File "<stdin>", line 1, in <module> File "MeCab.py", line 25, in <module> _MeCab = swig_import_helper() File "MeCab.py", line 17, in swig_import_helper import _MeCab ImportError: libmecab.so.2: cannot open shared object file: No such file or directory >>> import sys >>> import MeCab Traceback (most recent call last): File "<stdin>", line 1, in <module> File "MeCab.py", line 25, in <module> _MeCab = swig_import_helper() File "MeCab.py", line 17, in swig_import_helper import _MeCab ImportError: libmecab.so.2: cannot open shared object file: No such file or directory このOSにはipythonというものがあり、いわゆるインテリセンスがコンソールから使えるのですが、"MeCab"を補完しません。 どうすれば良いのでしょうか Linux未熟者は手を出さないほうが良かったかも

  • ある和歌の文末連体形について

    前回の続きに当たる質問です。 申し訳ありませんが、宜しくお願いします。 なぜ、これが連体形なのかわからない、という質問です。 文末連体形について幾つか例文が出されました。 1 袖ひちて結びし水のこほれるを春たつけふの風やとくらむ (らむ) 2 五年六年のうちに千年や過ぎにけむ (けむ) 3 鸚鵡は人のいふらんことをまねぶらむよ (らむ) 4 さやの中山など越えけむほどもおぼえず (けむ) 5 ひさかたの光のどけき春の日にしず心なく花の散るらむ (らむ) 1,2は係助詞「や」の結びで連体形だとわかります。 3,4は続く終助詞?「よ」名詞?「ほど」の要求で連体形だとわかります。 しかし、5だけはなぜ連体形かわかりません。形からしても終止形でいいのでは、と思うのですが「連体形です」ということで、私の中で疑問になっております。 詳しい方、どうかご教示下さい。宜しくお願いします。

  • MeCabと言うファイルが

    C:\Program (86)に、MeCabと言うファイルが実際に存在してる人にだけ、お伺いしたいのですが。 net検索で、オープンソースの形態素解析エンジンで有ると言う事は理解出来たのですが、実際にはPCでどのような時に働いているのでしょうか? installした覚えは無いので、何んか、怪しい動きをして居るのでは無いかと心配に成って居ます。 宜しく お願い致します。 win10pro64bit 自作 (1703)にて使用。

  • 英文から英単語の抽出をしたい

    こんばんは HTML、テキストファイル、pdfファイルなどの英文のソースがあったときに、そこで使われている英単語を抽出してテキストファイルやExcelなどで英単語のリストを作りたいのですが、何かよい方法はあるでしょうか?少し調べてみたのですが、形態素解析などをすることになるのでしょうか?どなたか教えていただけると幸いです。 例えば、 「No other region has demonstrated the fragility of both human society and the international community more markedly than Africa.」 という英文があったとき、 Africa and demonstrate has other region … のように単語を抽出してくれて、できればその意味も Africa:アフリカ and:そして demonstrate:証明する has:持つ other:他の region:地域 … のようにできるととても助かります。

  • 文字列検索

    文字列検索 テキストファイルの検索を行いたいです. 下記のようなサンプルファイルでfooを検索し, 含まれるならマッチした個数,含まれないならnilを返す関数を作りたいです. mecabを用いて形態素解析を1行ずつしようかと思ったんですが, 大量のファイルを処理する予定なので,オーバヘッドが気になります. 関数でgrepがあるみたいですが,マッチした行しか返されません. 標準関数で1行ずつよみこんで,1行のなかでマッチした回数を返す関数はありますか? --sample.txt-- foo foo bar bar foo hoge,hoge,hoge,hoge hage-hage-hage-foo -- end --

    • ベストアンサー
    • Ruby

専門家に質問してみよう