LoginSignup
3
3

More than 3 years have passed since last update.

[自然言語処理] MeCab, JUMAN, KNPの導入方法とPythonのサンプルプログラム(MacOS, Ubuntu18.04)

Last updated at Posted at 2019-07-17

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とかになることもあるのでできないなーって思ったら各自ダウンロードページに飛んでください!
リクエスト貰えれば修正します!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3