前処理

import pandas as pd
import numpy as np

形態素解析

spaCyを使うことで形態素解析とトークナイズを行うことができます。

import spacy

nlp = spacy.load("ja_core_news_md")
doc = nlp("今日は銀座から池袋へ向かいました。")
list(doc)

見出し語(レンマ)化

.lemma_ 属性を参照して見出し語化できます。

for token in doc:
    print(token.text, token.pos_, token.lemma_)

品詞によるフィルタリング

# 形態素の品詞の形態について書く (Universal Dependencies)
# https://hironsan.hatenablog.com/entry/visualize-dependencies-per-bunsetsu
doc = nlp("今日は銀座から池袋へ向かいました。")

# 内容語のみを残すようにフィルタリング
for token in nlp(doc):
    if token.pos_ in {"NOUN", "PROPN", "VERB"}:
        print(token.pos_, token.lemma_)

ストップワードによるフィルタリング

ストップワードの集合を作成し、トークンがストップワードに含まれていれば出力しないようにします。 ストップワードを考慮してトークナイズする関数を定義してみましょう。

def tokenize(text, stopwords=set()):
    return [t.lemma_ for t in nlp(text) if t.lemma_ not in stopwords]
stopwords = {
    "は", "から", "へ",
    "ます", "た",
    "。", "、",
}
tokenize("今日は銀座から池袋へ向かいました。", stopwords=stopwords)

小文字化

strオブジェクトのlowerを使います。

doc = nlp("spaCyの練習")
for token in doc:
    print(token.text, token.text.lower())

絵文字の変換

SNSのデータを処理する際には絵文字が出現することが多いです。 絵文字を事前に文字に変換しておくと処理しやすいです。

絵文字の変換にはemojiパッケージが便利です。

Note

emojiパッケージを利用するにはインストールが必要です。

pip install emoji==1.7.0
import emoji

絵文字を文字列に変換します。

emoji.demojize("今日はケーキを食べます🍰")

文字列を絵文字に変換します。

emoji.emojize("今日はケーキを食べます:shortcake:")

絵文字を除去します。

emoji.replace_emoji("今日はケーキを食べます🍰")