解説
形態素解析や係り受け解析のツールは多くの企業・団体・研究所が提供しています。以下にその一部をまとめています。基本的な文書構造解析は、ソースコードにてjanomemを用いた形態素解析、MeCabを用いた係り受け解析をしていますので、参考にしてください。
ツール名 | 種別 | 特徴 | 公式サイト |
---|---|---|---|
MeCab | 形態素解析 | ・CRF(Conditional Random Fields)を用いたパラメータ推定を採用
・判別精度、実行速度ともに高い |
http://taku910.github.io/mecab/ |
JUMAN | 形態素解析 | ・コスト最小法を採用
・Twitterなどの表記揺れが多いものを解析するのに優れている |
http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN |
Janome | 形態素解析 | ・Pythonのパッケージ管理システム「pip」でインストールできる
・MeCabと同等の結果を取得可能 |
http://mocobeta.github.io/janome/ |
ChaSen | 形態素解析 | ・統計処理 (HMM) によって連接コストや単語生起コストを 推定できる | http://chasen.naist.jp/hiki/ChaSen/ |
Kytea | 形態素解析 | ・SVMやロジスティック回帰などを採用
・分類器の学習にはLIBLINEARを使用 |
http://www.phontron.com/kytea/index-ja.html |
CaboCha | 係り受け解析 | ・SVM の分類アルゴリズムの高速化手法である PKEを適用
・内部の辞書に, 高速な Trie 構造である Double-Array を採用 |
https://taku910.github.io/cabocha/ |
KNP | 係り受け解析 | ・JUMANにパイプで連結して使う
・CaboChaよりも少し処理が遅い |
http://nlp.ist.i.kyoto-u.ac.jp/?KNP |
ステップアップ
・Kakasiについて
漢字かなまじり文をひらがな文やローマ字文に変換することができます。
http://kakasi.namazu.org/
・JUMAN++について
言語モデルとしてRecurrent Neural Network Language Model(RNNLM) を採用しているため、単語の並びの意味的な自然さを考慮した解析を行います。JUMANやMeCabに比べ、性能が向上していると公式サイトが報告しています。
http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++
キーワード
- 形態素解析
- 係り受け解析
- MeCab
- JUMAN
- Janome
- ChaSen
- Kytea
- CaboCha
- KNP
- *Kakasi
- *JUMAN++
ソースコード
■環境構築
http://mocobeta.github.io/janome/を参考にしてください。
morphological_analysis_janome.py:文章に対して形態素解析を行うプログラム
# -*- coding: utf-8 -*- from janome.tokenizer import Tokenizer def morphological_analysis(data): t = Tokenizer() tokens = t.tokenize(data) print("*********形態素と品詞の出力***********") for token in tokens: # 品詞を取り出す partOfSpeech = token.part_of_speech.split(',')[0] print("形態素:",token.surface," 品詞:",partOfSpeech) print("*********各種情報の出力***********") for token in t.tokenize(data): print(token) if __name__ == '__main__': # テストデータ作成 data = "halで勉強して優秀なデータサイエンティストになろう。" morphological_analysis(data)
このプログラムを実行すると、与えられた文章の形態素情報を表示します。
*********形態素と品詞の出力*********** 形態素: hal 品詞: 名詞 形態素: で 品詞: 助詞 形態素: 勉強 品詞: 名詞 形態素: し 品詞: 動詞 形態素: て 品詞: 助詞 形態素: 優秀 品詞: 名詞 形態素: な 品詞: 助動詞 形態素: データ 品詞: 名詞 形態素: サイエンティスト 品詞: 名詞 形態素: に 品詞: 助詞 形態素: なろ 品詞: 動詞 形態素: う 品詞: 助動詞 形態素: 。 品詞: 記号 *********各種情報の出力*********** hal 名詞,一般,*,*,*,*,*,*,* で 助詞,格助詞,一般,*,*,*,で,デ,デ 勉強 名詞,サ変接続,*,*,*,*,勉強,ベンキョウ,ベンキョー し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ て 助詞,接続助詞,*,*,*,*,て,テ,テ 優秀 名詞,形容動詞語幹,*,*,*,*,優秀,ユウシュウ,ユーシュー な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ データ 名詞,一般,*,*,*,*,データ,データ,データ サイエンティスト 名詞,一般,*,*,*,*,サイエンティスト,サイエンティスト,サイエンティスト に 助詞,格助詞,一般,*,*,*,に,ニ,ニ なろ 動詞,自立,*,*,五段・ラ行,未然ウ接続,なる,ナロ,ナロ う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ 。 記号,句点,*,*,*,*,。,。,。 Process finished with exit code 0
■環境構築
http://www.maytry.net/how-to-use-cabocha-mecab-with-python/を参考にしてください。
※python3系のときは、エラーが発生するので以下リンクの内容を参考にしてください。
http://qiita.com/kansiho/items/8f9303d5ea8bb8046131
dependency_parsing_cabocha.py:与えられた文章に対して係り受け解析を行うプログラム
# -*- coding: utf-8 -*- import CaboCha def dependency_parsing(sentence): c = CaboCha.Parser() tree = c.parse(sentence) # 簡易 Tree 表示での出力 print(tree.toString(CaboCha.FORMAT_TREE) ) # 計算機に処理しやすいフォーマットで出力 print(tree.toString(CaboCha.FORMAT_LATTICE)) if __name__ == '__main__': # テストデータ作成 sentence = "halで勉強して優秀なデータサイエンティストになろう。" dependency_parsing(sentence)
このプログラムを実行すると、与えられた文章の係り受け解析結果を表示します。
halで-D 勉強して-----D 優秀な-D | データサイエンティストに-D なろう。 EOS * 0 1D 0/1 1.550119 hal 名詞,一般,*,*,*,*,* で 助詞,格助詞,一般,*,*,*,で,デ,デ * 1 4D 1/2 -1.261292 勉強 名詞,サ変接続,*,*,*,*,勉強,ベンキョウ,ベンキョー し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ て 助詞,接続助詞,*,*,*,*,て,テ,テ * 2 3D 0/1 1.830613 優秀 名詞,形容動詞語幹,*,*,*,*,優秀,ユウシュウ,ユーシュー な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ * 3 4D 1/2 -1.261292 データ 名詞,一般,*,*,*,*,データ,データ,データ サイエンティスト 名詞,一般,*,*,*,*,サイエンティスト,サイエンティスト,サイエンティスト に 助詞,格助詞,一般,*,*,*,に,ニ,ニ * 4 -1D 0/1 0.000000 なろ 動詞,自立,*,*,五段・ラ行,未然ウ接続,なる,ナロ,ナロ う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ 。 記号,句点,*,*,*,*,。,。,。 EOS
データセット
ー