トップ «前の日記(2017/11/21) 最新 次の日記(2017/11/25)» 編集

kaztomo日記


2017/11/23 [長年日記]

_ [Python]wordcloud で stopwords 問題の回避

おとといの日記 の通り、 wordcloud 関数の stopwords パラメータは、unicode じゃなくて str にする必要がある ことは分かったけど、decodeしてみたり、ひょっとしたら文字コードが絡むのかと試してみたり したけど、結局のところは strにしても stopwords として認識してくれなかった (+_+)

更に、色々とググったところ、 別の方法で stopwords を処理しているサイト を発見 (^o^)/

元のコードに同様の処理を追加して、無事 stopwords 処理(もどき)が出来上がった。\(^o^)/

  • stopwords を unicode から str にしただけ(おとといの日記)。stopwordsしたい "こと"、"する"といった文字が残っている

画像の説明

  • 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

参考にさせていただいたサイト: