![]() |
ノート/テキストマイニング/oregano5https://pepper.is.sci.toho-u.ac.jp:443/pepper/index.php?%A5%CE%A1%BC%A5%C8%2F%A5%C6%A5%AD%A5%B9%A5%C8%A5%DE%A5%A4%A5%CB%A5%F3%A5%B0%2Foregano5 |
![]() |
ノート/テキストマイニング
訪問者数 4103 最終更新 2014-01-29 (水) 10:16:28
>>ノート/テキストマイニング/oregano
>>ノート/テキストマイニング/oregano6?
2009-03-02 (月) 17:53:14 追記(Yamchaコンパイル時にエラー) 2010-10-13
これの続きは >> ノート/テキストマイニング/CaboChaで主節の骨組を取り出す
CaboCha (Support Vector Machines に基づく日本語係り受け解析器) http://chasen.org/~taku/software/cabocha
2005年ぐらいらしい(v0.53 ← UTF-8が不可)
新しいバージョン (0.60pre4 http://sourceforge.net/project/showfiles.php?group_id=212798&package_id=256723&release_id=626442)
だとUTF-8対応という話あり。その代わりchasen対応があるのかないのか?
必要な要素:
* YamCha 0.30以上 (必須) 要するにタガーらしい
* ChaSen (必須) 形態素解析器
* MeCab ChaSen の代用, ChaSen を用いない時は必要
* TinySVM (学習を行う場合は必須) Support Vector Machineのメカニズム
* C++ コンパイラ (g++ 2.95.1 以上で動作確認済み)
このv0.60だと、新たにCRF++というパッケージが必要ならしい。
準備1. TinySVM (サポートベクターマシンのソフト) http://chasen.org/~taku/software/TinySVM/
ファイル http://chasen.org/~taku/software/TinySVM/src/TinySVM-0.09.tar.gzをダウンロード&解凍して、
% ./configure % make % make check % su # make install
準備2. YamCha (http://chasen.org/~taku/software/YamCha/)をインストール。
ファイル http://chasen.org/~taku/software/YamCha/src/yamcha-0.33.tar.gzをダウンロード&解凍して、
% ./configure % make % make check % su # make install
(2010-10-13 追記)新しいOregano (Fedora12/x86_64)では、YamChaコンパイル時に2箇所エラー
yamcha-0.33/src/param.cpp 先頭部分に #include <cstring> を追加 yamcha-0.33/libexec/mkdarts.cpp 先頭部分に #include <cstdlib> を追加 make で成功
準備3. CRF++ (http://www.chasen.org/~taku/software/CRF++)をインストール。
ファイル http://sourceforge.net/project/showfiles.php?group_id=192973&package_id=227302&release_id=612865)をダウンロード&解凍して、
% ./configure % make % make check % su # make install
CaboChaのインストール
ファイル http://sourceforge.net/project/showfiles.php?group_id=212798&package_id=256723&release_id=626442 をダウンロード&解凍して、
% ./configure --with-charset=UTF8 --with-posset=IPA % make % make check % su # make install
前にも言った(ここ、shared libraryのロード時の検索パスの問題で、エラーが出るので、ldconfigを再度実行。毎回実行するのはかったるいと思いつつ。
(2010-10-13 追記)新しいOregano (Fedora12/x86_64)では、0.60pre4はコンパイルエラーになる。公開版の 0.53 で導入。CaboChaコンパイル時に1箇所エラー
cabocha-0.53/src/param.cpp 先頭部分に #include <cstring> を追加 make で成功
(2011-02-01 追記)上記Oreganoで、0.60pre4でのコンパイルエラーを修正。ldconfigで/usr/local/libにサーチパスを通した後、更にsrc/Makefile上でLIBSに -liconv を追加してmakeしたら、通った。
実行結果は
$ cabocha 太郎は次郎が持っている本を花子に渡した。 <PERSON>太郎</PERSON>は---------D <PERSON>次郎</PERSON>が-D | 持っている-D | 本を---D 花子に-D 渡した。 EOS
のように無事にインストール完了。
更に、pythonからのインターフェースをインストール。 ディレクトリpythonで、
python setup.py build python setup.py install
でインストール完了。
テストは、同じディレクトリにあるtest.pyを実行。test.pyの中身は
#!/usr/bin/python # -*- coding: utf-8 -*- import CaboCha # c = CaboCha.Parser(""); c = CaboCha.Parser() sentence = "太郎はこの本を二郎を見た女性に渡した。" print c.parseToString(sentence) tree = c.parse(sentence) print tree.toString(CaboCha.FORMAT_TREE) print tree.toString(CaboCha.FORMAT_LATTICE)
実行結果は
$ python test.py <PERSON>太郎</PERSON>は-----------D この-D | 本を---D | 二郎を-D | 見た-D | 女性に-D 渡した。 EOS <PERSON>太郎</PERSON>は-----------D この-D | 本を---D | 二郎を-D | 見た-D | 女性に-D 渡した。 EOS * 0 6D 0/1 0.000000 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー B-PERSON は 助詞,係助詞,*,*,*,*,は,ハ,ワ O * 1 2D 0/0 1.468291 この 連体詞,*,*,*,*,*,この,コノ,コノ O * 2 4D 0/1 0.742535 本 名詞,一般,*,*,*,*,本,ホン,ホン O を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ O * 3 4D 1/2 1.892480 二 名詞,数,*,*,*,*,二,ニ,ニ O 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー O を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ O * 4 5D 0/1 1.032296 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ O た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ O * 5 6D 0/1 0.000000 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ O に 助詞,格助詞,一般,*,*,*,に,ニ,ニ O * 6 -1D 0/1 0.000000 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ O た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ O 。 記号,句点,*,*,*,*,。,。,。 O EOS
以上で作業終り。これで、かなり遊べそうだ。
まず、CaboChaの使い方(出力の意味?)の説明は、この説明 に簡単に書いてある。十分とは言えない?
CaboChaでparseした後の出力を、googledocsにあるPython による日本語自然言語処理(ちなみにこのドキュメントはよく書けていると思うが) の CaboChaの項では、tree.toString(CaboCha.FORMAT_XML)を指定してXML形式に出力し、それをXML解析せよと書いてあった。それも一法かもしれない。
ここでは、parseでの出力を(pythonの構造体として)出してみよう。対応バージョンはCaboCha-0.60pre4で、以前の0.53では細かいところが異なっているので要注意。
#!/usr/bin/python # coding: utf-8 import CaboCha import sys import codecs sys.stdout = codecs.getwriter('utf_8')(sys.stdout) ##c = CaboCha.Parser (sys.argv) c = CaboCha.Parser () #sentence = "太郎はこの本を二郎を見た女性に渡した。" sentence = "太郎と花子は2003年、奈良先端大を卒業した。" tree = c.parse (sentence) size = tree.size() print tree.toString(2) # 適当にフォーマット2で全体を書いてみる(本論とは関係せず) print "==================" # ここから myid = 0 # 項目のカウンター for i in range (0, size): token = tree.token (i) if token.chunk: print "* ", myid, "link=", token.chunk.link, "headpos=", token.chunk.head_pos,\ "funcpos=", token.chunk.func_pos, "tokensize=", token.chunk.token_size,\ "tokenpos=", token.chunk.token_pos, "score=", token.chunk.score,\ "featurelistsize=", token.chunk.feature_list_size myid=myid+1 print "surface=", token.normalized_surface, "feature=", token.feature, "ne=", token.ne print "---" print "EOS"
参考にしたのは、CaboCha-0.60pre4パッケージ中のpythonの中のCaboCha.pyである。
実行結果の出力は以下のとおり。
<PERSON>太郎</PERSON>と-D <PERSON>花子</PERSON>は-----D 2003年、---D <ORGANIZATION>奈良先端大</ORGANIZATION>を-D 卒業した。 EOS * 0 1D 0/1 1.360878 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー B-PERSON と 助詞,並立助詞,*,*,*,*,と,ト,ト O * 1 4D 0/1 0.000000 花子 名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ B-PERSON は 助詞,係助詞,*,*,*,*,は,ハ,ワ O * 2 4D 4/4 0.000000 2 名詞,数,*,*,*,*,2,ニ,ニ O 0 名詞,数,*,*,*,*,0,ゼロ,ゼロ O 0 名詞,数,*,*,*,*,0,ゼロ,ゼロ O 3 名詞,数,*,*,*,*,3,サン,サン O 年 名詞,接尾,助数詞,*,*,*,年,ネン,ネン O 、 記号,読点,*,*,*,*,、,、,、 O * 3 4D 0/1 0.000000 奈良先端大 名詞,固有名詞,組織,*,*,*,奈良先端大,ナラセンタンダイ,ナラセンタンダイ B-ORGANIZATION を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ O * 4 -1D 1/2 0.000000 卒業 名詞,サ変接続,*,*,*,*,卒業,ソツギョウ,ソツギョー O し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ O た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ O 。 記号,句点,*,*,*,*,。,。,。 O EOS ================== * 0 link= 1 headpos= 0 funcpos= 1 tokensize= 2 tokenpos= 0 score= 1.36087810993 featurelistsize= 12 surface= 太郎 feature= 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー ne= B-PERSON --- surface= と feature= 助詞,並立助詞,*,*,*,*,と,ト,ト ne= O --- * 1 link= 4 headpos= 0 funcpos= 1 tokensize= 2 tokenpos= 2 score= 0.0 featurelistsize= 11 surface= 花子 feature= 名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ ne= B-PERSON --- surface= は feature= 助詞,係助詞,*,*,*,*,は,ハ,ワ ne= O --- * 2 link= 4 headpos= 4 funcpos= 4 tokensize= 6 tokenpos= 4 score= 0.0 featurelistsize= 12 surface= 2 feature= 名詞,数,*,*,*,*,2,ニ,ニ ne= O --- surface= 0 feature= 名詞,数,*,*,*,*,0,ゼロ,ゼロ ne= O --- surface= 0 feature= 名詞,数,*,*,*,*,0,ゼロ,ゼロ ne= O --- surface= 3 feature= 名詞,数,*,*,*,*,3,サン,サン ne= O --- surface= 年 feature= 名詞,接尾,助数詞,*,*,*,年,ネン,ネン ne= O --- surface= 、 feature= 記号,読点,*,*,*,*,、,、,、 ne= O --- * 3 link= 4 headpos= 0 funcpos= 1 tokensize= 2 tokenpos= 10 score= 0.0 featurelistsize= 11 surface= 奈良先端大 feature= 名詞,固有名詞,組織,*,*,*,奈良先端大,ナラセンタンダイ,ナラセンタンダイ ne= B-ORGANIZATION --- surface= を feature= 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ ne= O --- * 4 link= -1 headpos= 1 funcpos= 2 tokensize= 4 tokenpos= 12 score= 0.0 featurelistsize= 14 surface= 卒業 feature= 名詞,サ変接続,*,*,*,*,卒業,ソツギョウ,ソツギョー ne= O --- surface= し feature= 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ ne= O --- surface= た feature= 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ ne= O --- surface= 。 feature= 記号,句点,*,*,*,*,。,。,。 ne= O --- EOS
>> 続き ノート/テキストマイニング/CaboChaで主節の骨組を取り出す
JUMAN系らしい。大分古い。
大本は http://www-nagao.kuee.kyoto-u.ac.jp/nl-resource/
長尾研: http://www-nagao.kuee.kyoto-u.ac.jp/nl-resource/knp.html
やってみた情報: www433.elec.ryukoku.ac.jp/~yokomizo/ntool/install.html
資料: http://nlp.kuee.kyoto-u.ac.jp/nl-resource/knp/20050830-practice.ppt
やってみた情報: http://his.luky.org/ML/vine-users.3/msg08590.html
>>ノート/テキストマイニング/oregano
>>ノート/テキストマイニング/oregano6?