Help us understand the problem. What is going on with this article?

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

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away