MeCab, JUMAN
自然言語処理の中でも形態素解析を行うツール
before: 今日は大変天気が良いです。
↓
after : 今日 / は / 大変 / 天気 / が / 良い / です 。
文章を与えると品詞単位に分解してくれます。
品詞情報も利用可能。
KNP
自然言語処理の中でも構文解析を行うツール
before: 今日は大変天気が良いです。
↓
after : 今日は → 良いです。
大変 → 天気が
天気が → 良いです。
ある単語がどの単語に係っているかを簡単に解析することが出来ます。
環境
- MacOS Mojave
- Ubuntu 18.04
MacOSにinstall
MeCab
本体と辞書のinstall
// 本体
$ brew install mecab
// 辞書
$ brew install mecab-ipadic
拡張用の辞書を追加
$ brew install git curl xz
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n
swigとPython用MeCabライブラリのinstall
$ brew install swig
$ pip install mecab-python3
これでPythonからMeCabを使えるようになります。
JUMAN
$ brew install jumanpp
JUMAN自体はこれだけでinstall終了です。
Pythonから利用するにはPyKNP
が必要です。
KNP
$ brew tap uetchy/nlp
$ brew install knp
私の場合、終わるまでに16分くらいかかりました。。。
Pythonから利用できるようにする
$ pip install pyknp
これでPythonから利用可能です。
Ubuntu18.04にinstall
MeCab
本体と辞書のinstall
$ sudo apt install mecab
$ sudo apt install libmecab-dev
$ sudo apt install mecab-ipadic-utf8
拡張辞書のinstall
$ git clone https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ sudo bin/install-mecab-ipadic-neologd
/etc/mecabrcを編集します
$ sudo vim /etc/mecabrc
dicdirを以下のように指定してください
dicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
Pythonから使えるようにする
$ sudo apt install swig
$ sudo apt install python3-pip
$ sudo pip3 install mecab-python3
これでOK。
JUMAN++
$ sudo apt install libboost-all-dev libcdb-dev libjuman zlib1g-dev
$ wget http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.02.tar.xz
$ tar xJvf jumanpp-1.02.tar.xz
$ cd jumanpp-1.02/
$ ./configure
$ make
$ sudo make install
これでOK。
jumanpp
$ wget http://nlp.ist.i.kyoto-u.ac.jp/nl-resource/juman/juman-7.01.tar.bz2
$ tar xvf juman-7.01.tar.bz2
$ cd juman-7.01
$ ./configure
$ make
$ sudo make install
これでOK。
KNP
$ wget http://nlp.ist.i.kyoto-u.ac.jp/nl-resource/knp/knp-4.19.tar.bz2
$ tar jxvf knp-4.19.tar.bz2
$ cd knp-4.16
$ ./configure
$ make
$ sudo make install
めちゃくちゃ時間かかるので覚悟しておいてください!
Pythonから使えるようにする
$ pip3 install pyknp
これでOK。
サンプルプログラム
MeCab
mecab.py
import MeCab
def make_pos_to_word_list(sentence):
mecab = MeCab.Tagger('mecabrc')
mecab.parse('')
node = mecab.parseToNode(text)
while node:
word = node.surface.lower()
pos = node.feature.split(",")[0]
node = node.next
if word != '':
yield {word: pos}
def main():
sentence = '今日は大変天気が良いです。'
pos_to_word_list = make_pos_to_word_list(sentence)
for pos_to_word in pos_to_word_list:
print(pos_to_word)
if __name__ == '__main__':
main()
result
$ python3 mecab.py
{'今日': '名詞'}
{'は': '助詞'}
{'大変': '名詞'}
{'天気': '名詞'}
{'が': '助詞'}
{'良い': '形容詞'}
{'です': '助動詞'}
{'。': '記号'}
JUMAN
juman.py
from pyknp import Juman
def parse_sentence(sentence):
jumanpp = Juman()
result = jumanpp.analysis(sentence)
for mrph in result.mrph_list():
yield mrph.midasi
def main():
sentence = '今日は大変天気が良いです。'
words = parse_sentence(sentence)
for word in words:
print(word, end=' ')
print()
if __name__ == '__main__':
main()
result
$ python3 juman.py
今日 は 大変 天気 が 良い です 。
KNP
knp.py
from pyknp import KNP
def make_dependency_pairs(line):
knp = KNP()
result = knp.parse(line)
tag_list = result.tag_list()
for tag in tag_list:
if tag.parent_id == -1:
continue
parent_tag = tag_list[tag.parent_id]
parent_phrase = ''.join(mrph.midasi for mrph in parent_tag.mrph_list())
children_phrase = ''.join(mrph.midasi for mrph in tag.mrph_list())
yield (children_phrase, parent_phrase)
if __name__ == '__main__':
sentence = '今日は大変天気が良いです。'
dependency_pairs = make_dependency_pairs(sentence)
for dependency in dependency_pairs:
child, parent = dependency
print(child, ' => ', parent)
result
$ python3 knp.py
今日は => 良いです。
大変 => 天気が
天気が => 良いです。
終わりに
現在だとインストールはすんなりいくかもしれませんが、今後新しいダウンロードファイルに置き換わると404とかになることもあるのでできないなーって思ったら各自ダウンロードページに飛んでください!
リクエスト貰えれば修正します!