除外した品詞が除外できていない
pythonでMeCabで文章の処理をかけています。
for text in df["msg_body"]:
for line in mecab.parse(text).rstrip().splitlines():
items = line.split("\t")
if len(items) == 2:
surface, feature = items
if re.search("^(名詞|動詞,自立)", feature) and not\
re.search("^(BOS/EOS|名詞,数|記号)", feature):
small_list.append(surface)
else:
surface=" "
small_list.append(surface)
のように、対象の文章から、名詞と動詞のみ(名詞は数字と記号は抜かす)ように条件を与えています。
ですが、出力結果の品詞をカウントしてみると、
['名詞', '一般', '*'] 216
['動詞', '自立', '*'] 139
['名詞', '固有名詞', '一般'] 121
['名詞', 'サ変接続', '*'] 63
['名詞', '固有名詞', '組織'] 29
['名詞', '固有名詞', '人名'] 28
['名詞', '固有名詞', '地域'] 24
['副詞', '一般', '*'] 7
['形容詞', '自立', '*'] 7
['名詞', '形容動詞語幹', '*'] 5
と、除外した単語が入ってきます。
これはどうしてでしょうか?
MeCabではこのような不安定な挙動があるのでしょうか?
もしくはコードが間違えているのでしょうか?
よろしくお願いします。
追記 (コメントへの返信)
feature には何が入っていますか? MeCab のインスタンスはどうやって生成していますか?
featureはコードの通りです。mecab = MeCab.Tagger("-b 5242880")
でパースしたものは基本的に単語と品詞(ここではsurfaceとfeature)に分けられますので。mecabインスタンスは上記のとおりです。dfはテキストが入っているデータフレームです。small_listは条件をクリアした単語のみ格納するただのリストです。
条件を満たすものは
surface
だけしか集めていないのに、どうやってフィルター後のfeature
を数えているのですか?
残った単語を再度パースしているだけです。