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
参考にさせていただいたサイト:
[ツッコミを入れる]