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]