140_形態素解析や係り受け解析のツールを適切に使い、基本的な文書構造解析を行うことができる

解説

形態素解析係り受け解析のツールは多くの企業・団体・研究所が提供しています。以下にその一部をまとめています。基本的な文書構造解析は、ソースコードにて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

データセット