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
参考にさせていただいたサイト: