Mecab+Python
python3でMeCabを使えるようにする
pip install mecab-python3
ファイル作成
import sys import MeCab m = MeCab.Tagger ("-Ochasen") #注意、〇Tagger、×tagger print(m.parse ("すもももももももものうち"))
実行結果
すもも スモモ すもも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 の ノ の 助詞-連体化 うち ウチ うち 名詞-非自立-副詞可能 EOS
node.surfaceのバグ
最新版のmecab-python3はnode.surfaceを行った時にバグがあります。
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
想定
: BOS/EOS すもも: 名詞 も: 助詞 もも: 名詞 も: 助詞 もも: 名詞 の: 助詞 うち: 名詞 : BOS/EOS
結果
すもももももももものうち すもももももももものうち もももももものうち ももももものうち ももものうち もものうち のうち う
この解決方法の一つは、mecab-python3のバージョンを下げることです。
pip uninstall -y mecab-python3 pip3 install mecab-python3==0.7
参考
parseメソッド
import MeCab tagger = MeCab.Tagger('-Ochasen') tagger.parse('') text = 'すもももももももものうち' result = tagger.parse(text) print(result)
結果
すもも スモモ すもも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 の ノ の 助詞-連体化 うち ウチ うち 名詞-非自立-副詞可能 EOS
parseToNodeメソッド
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
結果
BOS/EOS,*,*,*,*,*,*,*,* -------------------------- すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ -------------------------- も 助詞,係助詞,*,*,*,*,も,モ,モ -------------------------- もも 名詞,一般,*,*,*,*,もも,モモ,モモ -------------------------- も 助詞,係助詞,*,*,*,*,も,モ,モ -------------------------- もも 名詞,一般,*,*,*,*,もも,モモ,モモ -------------------------- の 助詞,連体化,*,*,*,*,の,ノ,ノ -------------------------- うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ -------------------------- BOS/EOS,*,*,*,*,*,*,*,* --------------------------
名詞のみ抽出
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)
結果
すもも もも もも うち
辞書を指定
tagger = MeCab.Tagger('-Ochasen -d /usr/local/lib/mecab/dic/naist-jdic/')
0 Comments