前提・実現したいこと
Mecabを使って、特定の品詞を出力しようとしています。
発生している問題・エラーメッセージ
stopワードを設定して、また未知語を除かない設計にすると、
以下のエラーが出てしまい、解決方法がわからず困っています。
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-11-bef4bebf1ee9> in <module>() 27 return keywords 28 text = "東京(日本)" ---> 29 extractKeyword(text) <ipython-input-11-bef4bebf1ee9> in extractKeyword(text) 17 keywords = [] 18 while node: ---> 19 features = tuple(node.feature.split(",")) 20 if features[0] == u"名詞" and features[:3] not in STOP_POS: 21 keywords.append(node.surface) AttributeError: 'str' object has no attribute 'feature'
該当のソースコード
python
1import sys 2import MeCab 3STOP_POS = { 4 ('名詞', '副詞可能', '*'), 5 ('名詞', '非自立', '副詞可能'), 6 ('名詞', '非自立', '一般'), 7 ('名詞', '接尾', '副詞可能'), 8 ('名詞', '接尾', '助数詞'), 9 ('名詞', '数', '*'), 10} 11 12 13def extractKeyword(text): 14 tagger = MeCab.Tagger('-Ochasen') 15 tagger.parse('') 16 node = text 17 keywords = [] 18 while node: 19 features = tuple(node.feature.split(",")) 20 if features[0] == u"名詞" and features[:3] not in STOP_POS: 21 keywords.append(node.surface) 22 elif features[0] == u"形容詞" and features[1] == u"自立": 23 keywords.append(node.surface) 24 elif features[0] == u"動詞" and features[1] == u"自立": 25 keywords.append(node.surface) 26 node = node.next 27 return keywords 28text = "東京(日本)" 29extractKeyword(text)
試したこと
以下のコードでは、エラーなく実行可能でした。
python
1import sys 2import MeCab 3def extractKeyword(text): 4 tagger = MeCab.Tagger('-Ochasen') 5 tagger.parse('') 6 node = tagger.parseToNode(text) 7 keywords = [] 8 while node: 9 if node.stat != 0: 10 node = node.next 11 continue 12 if node.feature.split(",")[0] == u"名詞": 13 keywords.append(node.surface) 14 elif node.feature.split(",")[0] == u"形容詞": 15 keywords.append(node.surface) 16 elif node.feature.split(",")[0] == u"動詞": 17 keywords.append(node.surface) 18 node = node.next 19 return keywords 20text = "東京(日本)" 21extractKeyword(text)
出力
['日本', '東京']
補足情報(FW/ツールのバージョンなど)
python3.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。