- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-07-19T08:31:49+00:00","default:masatomix","masatomix")
#author("2018-07-22T14:39:48+00:00","default:masatomix","masatomix")
#topicpath
----
#contents
[[自然言語処理/形態素解析エンジンMecab]] にて、形態素解析エンジンであるMecabのセットアップを行いましたが、そのエンジンをこんどはPythonから呼び出してみます。
一式をGithubにアップしました。Vagrantを使って一通りの環境を構築できるようにしてあります。自分でLinuxを用意した場合は適宜、Python環境をセットアップするまでやってください。。
一式をGithubにアップしました。Vagrantを使って一通りの環境を構築します。自分でLinuxを用意した場合は適宜、Python環境をセットアップしてください。
** やってみる [#g5213bfa]
*** Vagrantで環境構築をつくる [#q8967f42]
$ git clone https://github.com/masatomix/mecab-python-samples.git
$ cd mecab-python-samples
$ vagrant up
ちなみにVagrantのprovision機能で、初回 up 時にpython3/pip3/mecabなどを自動的にセットアップするようにしてあるので、それなりに時間がかかります。
ちなみにVagrantのprovision機能で、初回 up 時にpython3/pip3/mecabなどを自動的にセットアップするようにしてあるので、それなりに時間がかかります。provision機能でやっているセットアップは、具体的には以下の通りです。
具体的には以下の通りです。
$ cat ./script/provision.sh
#!/bin/bash
sudo apt-get update
sudo apt install -y build-essential
# https://pip.pypa.io/en/latest/installing/
curl https://bootstrap.pypa.io/get-pip.py -O
sudo python get-pip.py
sudo apt install -y python-pip
sudo apt install -y python3-pip
# install mecab
sudo apt install -y mecab libmecab-dev mecab-ipadic-utf8
# install mecab-ipadic-neologd -n(更新する) -y(聞かない)
git clone https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd/
sudo ./bin/install-mecab-ipadic-neologd -n -y
とにかく
以上が自動的に実行されます。
$ vagrant ssh
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-130-generic x86_64)
Last login: Thu Jul 19 06:42:09 2018 from 10.0.2.2
vagrant@ubuntu-xenial:~$
となればOK。 [[自然言語処理/形態素解析エンジンMecab]] でやったコマンドは一通り動くと思います。
となればOK。
[[自然言語処理/形態素解析エンジンMecab]] でやったコマンドは一通り動くと思います。
*** Pythonから呼び出し [#w8da0d55]
さて、Pythonから呼び出しをおこないますが、そのまえにpip3を使って、MecabのPythonライブラリをセットアップします。
さて、Pythonから呼び出します。そのまえにpip3を使って、MecabのPythonライブラリをセットアップします。
vagrant@ubuntu-xenial:~$ cd /vagrant/samples/
vagrant@ubuntu-xenial:/vagrant/samples$ sudo pip3 install -r requirement.txt -t ./
ここもそれなりに時間がかかります。気長に待ちましょう。
ここもそれなりに時間がかかりますので、気長に待ちましょう。
呼び出してみます。ソースはこんな感じ。
ようやくPythonからの呼び出しです。ソースはこんな感じ。
vagrant@ubuntu-xenial:/vagrant/samples$ cat mecab_sample.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MeCab
import sys
# Mecabを用いて、形態素解析した結果を出力する
def main(args):
m = MeCab.Tagger("-Ochasen -d /usr/lib/mecab/dic/mecab-ipadic-neologd")
# m = MeCab.Tagger('-Ochasen')
text = "Pythonから形態素解析エンジンMecabを呼び出してみました。"
print(m.parse(text))
if __name__ == "__main__":
main(sys.argv)
実行します
vagrant@ubuntu-xenial:/vagrant/samples$ sudo python3 mecab_sample.py
Python パイソン Python 名詞-固有名詞-一般
から カラ から 助詞-格助詞-一般
形態素解析 ケイタイソカイセキ 形態素解析 名詞-固有名詞-一般
エンジン エンジン エンジン 名詞-一般
Mecab Mecab Mecab 名詞-一般
を ヲ を 助詞-格助詞-一般
呼び出し ヨビダシ 呼び出す 動詞-自立 五段・サ行 連用形
て テ て 助詞-接続助詞
み ミ みる 動詞-非自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
。 。 。 記号-句点
EOS
呼び出すことができましたー。
呼び出すことができました。。
*** 配列で受け取る [#off57d96]
形態素ごとに配列でデータを受け取ることも出来ます。データとして処理するならこっちの方がイイかも?
$ cat mecab_sample2.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MeCab
import sys
# Mecabを用いて、形態素解析した結果を、二次元配列にして出力する
def main(args):
m = MeCab.Tagger("-Ochasen -d /usr/lib/mecab/dic/mecab-ipadic-neologd")
# m = MeCab.Tagger('-Ochasen')
text = "Pythonから形態素解析エンジンMecabを呼び出してみました。"
m.parse('') # なんだかおまじないらしい。
node = m.parseToNode(text)
node = node.next # 最初はいらないので、除去
results = []
while node:
word = []
word.append(node.surface) # 表層を追記
word.extend(node.feature.split(",")) # 素性もカンマでsplitして、追記
results.append(word)
node = node.next
results.pop() # 最後はいらないので、除去
print(results)
# tab 区切りで出力する
def print (results):
for line in results:
for word in line:
sys.stdout.write(word + "\t")
sys.stdout.write('\n')
if __name__ == "__main__":
main(sys.argv)
実行します。
vagrant@ubuntu-xenial:/vagrant/samples$ sudo python3 mecab_sample2.py
Python 名詞 固有名詞 一般 * * * Python パイソン パイソン
から 助詞 格助詞 一般 * * * から カラ カラ
形態素解析 名詞 固有名詞 一般 * * * 形態素解析 ケイタイソカイセキ ケイタイソカイセキ
エンジン 名詞 一般 * * * * エンジン エンジン エンジン
Mecab 名詞 一般 * * * * *
を 助詞 格助詞 一般 * * * を ヲ ヲ
呼び出し 動詞 自立 * * 五段・サ行 連用形 呼び出す ヨビダシ ヨビダシ
て 助詞 接続助詞 * * * * て テ テ
み 動詞 非自立 * * 一段 連用形 みる ミ ミ
まし 助動詞 * * * 特殊・マス 連用形 ます マシ マシ
た 助動詞 * * * 特殊・タ 基本形 た タ タ
。 記号 句点 * * * * 。 。 。
vagrant@ubuntu-xenial:/vagrant/samples$
配列データとして処理することが出来ましたね。
[[Python: MeCabによる形態素をリスト化するモジュール - Fuwafuwa's memorandum>http://hibari1121.blog.fc2.com/blog-entry-58.html]]
**TIPS [#y3dfe8ab]
**関連リンク [#uf508edd]
----
この記事は
#vote(おもしろかった,そうでもない)
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}