Mecab+Python

python3でMeCabを使えるようにする

[code lang=”python” title=””]

pip install mecab-python3

[/code]

ファイル作成

[code lang=”python” title=”test.py”]
import sys
import MeCab

m = MeCab.Tagger ("-Ochasen") #注意、〇Tagger、×tagger

print(m.parse ("すもももももももものうち"))
[/code]

実行結果

[code lang=”python” title=””]
すもも スモモ すもも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
の ノ の 助詞-連体化
うち ウチ うち 名詞-非自立-副詞可能
EOS
[/code]

node.surfaceのバグ

最新版のmecab-python3はnode.surfaceを行った時にバグがあります。

[code lang=”python” title=””]
import MeCab

tagger = MeCab.Tagger(‘-Ochasen’)
tagger.parse(”)

node = tagger.parseToNode("すもももももももものうち")

while node:
word = node.surface
hinshi = node.feature.split(",")[0]
print(word+": "+hinshi)
node = node.next
[/code]

想定

[code lang=”python” title=””]
: BOS/EOS
すもも: 名詞
も: 助詞
もも: 名詞
も: 助詞
もも: 名詞
の: 助詞
うち: 名詞
: BOS/EOS
[/code]

結果

[code lang=”python” title=””]
すもももももももものうち
すもももももももものうち
もももももものうち
ももももものうち
ももものうち
もものうち
のうち

[/code]

 
この解決方法の一つは、mecab-python3のバージョンを下げることです。

[code lang=”python” title=””]
pip uninstall -y mecab-python3

pip3 install mecab-python3==0.7
[/code]

 
参考


parseメソッド

[code lang=”python” title=””]
import MeCab

tagger = MeCab.Tagger(‘-Ochasen’)
tagger.parse(”)

text = ‘すもももももももものうち’

result = tagger.parse(text)

print(result)
[/code]

 
結果

[code lang=”python” title=””]
すもも スモモ すもも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
の ノ の 助詞-連体化
うち ウチ うち 名詞-非自立-副詞可能
EOS
[/code]

parseToNodeメソッド

[code lang=”python” title=””]
import MeCab

tagger = MeCab.Tagger(‘-Ochasen’)
tagger.parse(”)

text = ‘すもももももももものうち’

node = tagger.parseToNode(text)

while node:
print(node.surface) #表層形の取得
print(node.feature) #形態素情報の取得
print(‘————————–‘)
node = node.next

[/code]

 
結果

[code lang=”python” title=””]

BOS/EOS,*,*,*,*,*,*,*,*
————————–
すもも
名詞,一般,*,*,*,*,すもも,スモモ,スモモ
————————–

助詞,係助詞,*,*,*,*,も,モ,モ
————————–
もも
名詞,一般,*,*,*,*,もも,モモ,モモ
————————–

助詞,係助詞,*,*,*,*,も,モ,モ
————————–
もも
名詞,一般,*,*,*,*,もも,モモ,モモ
————————–

助詞,連体化,*,*,*,*,の,ノ,ノ
————————–
うち
名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
————————–

BOS/EOS,*,*,*,*,*,*,*,*
————————–
[/code]

名詞のみ抽出

[code lang=”python” title=””]
import MeCab

tagger = MeCab.Tagger(‘-Ochasen’)
tagger.parse(”)

text = ‘すもももももももものうち’

node = tagger.parseToNode(text)

keywords = []

#Node.featureのフォーマット
#品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

while node:
if node.feature.split(",")[0] == u"名詞":
keywords.append(node.surface)
node = node.next

for w in keywords:
print(w)
[/code]

 
結果

[code lang=”python” title=””]
すもも
もも
もも
うち
[/code]

辞書を指定

[code lang=”python” title=””]

tagger = MeCab.Tagger(‘-Ochasen -d /usr/local/lib/mecab/dic/naist-jdic/’)

[/code]

[code lang=”python” title=””]

[/code]

[code lang=”python” title=””]

[/code]

[code lang=”python” title=””]

[/code]

MeCab

Posted by iser