自然言語処理/形態素解析エンジンMecab にて、形態素解析エンジンであるMecabのセットアップを行いましたが、そのエンジンをこんどはPythonから呼び出してみます。 一式をGithubにアップしました。Vagrantを使って一通りの環境を構築できるようにしてあります。自分でLinuxを用意した場合は適宜、Python環境をセットアップするまでやってください。。 やってみる †Vagrantで環境構築をつくる †$ git clone https://github.com/masatomix/mecab-python-samples.git $ cd mecab-python-samples $ vagrant up ちなみに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 でやったコマンドは一通り動くと思います。 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 呼び出すことができました。。 配列で受け取る †形態素ごとに配列でデータを受け取ることも出来ます。データとして処理するならこっちの方がイイかも? $ 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 TIPS †関連リンク †この記事は 現在のアクセス:1628 |