2017/11/23
_ [Python]wordcloud で stopwords 問題の回避
おとといの日記 の通り、 wordcloud 関数の stopwords パラメータは、unicode じゃなくて str にする必要がある ことは分かったけど、decodeしてみたり、ひょっとしたら文字コードが絡むのかと試してみたり したけど、結局のところは strにしても stopwords として認識してくれなかった (+_+)
更に、色々とググったところ、 別の方法で stopwords を処理しているサイト を発見 (^o^)/
元のコードに同様の処理を追加して、無事 stopwords 処理(もどき)が出来上がった。\(^o^)/
- stopwords を unicode から str にしただけ(おとといの日記)。stopwordsしたい "こと"、"する"といった文字が残っている

- stopwords で指定せず、形態素を門前払いにする処理の場合

- 修正したコード
def mecab_analysis(text):
t = mc.Tagger('-Ochasen -d /usr/local/lib/mecab/dic/ipadic/')
enc_text = text.encode('utf-8')
node = t.parseToNode(enc_text)
stop_words = [ "てる", "いる", "なる", "れる", "する", "ある", "こと", \
"これ", "さん", "して", \
"くれる", "やる", "くださる", "そう", "せる", "した", "思う", \
"それ", "ここ", "ちゃん", "くん", "", \
"て","に","を","は","の", "が", "と", "た", "し", "で", \
"ない", "も", "な", "い", "か", "ので", "よう", ""]
output = []
while(node):
if node.surface != "": # ヘッダとフッタを除外
word_type = node.feature.split(",")[0]
if word_type in ["形容詞", "動詞","名詞", "副詞"] and node.surface not in stop_words:
output.append(node.surface)
node = node.next
if node is None:
break
return output
参考にさせていただいたサイト:
[ツッコミを入れる]