#はじめに
自然言語処理をやってみようと思い、twitterからテキストを集めました。
tweepyを使って過去のツイートを取得しましたが、前処理に手間取ったので、その前処理方法を紹介します。
#困ったこと
・絵文字の処理でemojiモジュールを使ったが、取り除ききれなかったものがあった
unicodeで\uf353や\uf605など
・改行をコードを取り除くと文章がつながってしまう
例
楽しかった
いい一日だった → 楽しかったいい一日だった
#やったこと
・「絵文字を取り除く」ではなく「英数字・日本語のみ取り出す」とする
・改行コードを読点"。"に置き換える
twitterテキストでの改行は文の区切りを意味するため
#実装
###絵文字の除去
reモジュールを使って1文字ずつ英数字・日本語かどうかを判断し、英数字・日本語であれば残す、とします。1行目は半角英数記号、ひらがな・カタカナ、漢字、句読点などの記号の文字コードのコンパイルです。2行目で文字を1つずつ取り出し、判定します。
n = re.compile(r"[\u0020-\u007e\u3040-\u30FF\u4E00-\u9FFF\u3000-\u303F]") #文字コードコンパイル
result = "".join(t for t in text if n.search(t)) #一文字ずつre.searchで判定
#\u0020-\u007e 半角英数記号
#\u3040-\u30FF ひらがな・カタカナ
#\u4E00-\u9FFF 漢字
#\u3000-\u303F 句読点などの記号
###改行コードの置き換え
こちらは単純に"\n"を"。"に置き換えます。
result = re.sub(r"\n", "。", text)
#完成
テキストの正規化(neologdn.normalize())、urlの除去を加えたtwitterテキストの前処理関数が以下になります。
def fix_twitter_text(text):
normalized_text = neologdn.normalize(text) #テキストの正規化
text_without_url = re.sub(r"https?://[\w/:%#\$&\?\(\)~\.=\+\-]+", "", normalized_text) #url除去
text_replace_newline = re.sub(r"\n", "。", text_without_url) #改行コードを読点に置き換え
n = re.compile(r"[\u0020-\u007e\u3040-\u30FF\u4E00-\u9FFF\u3000-\u303F]")
result = "".join(t for t in text_replace_newline if n.search(t)) #絵文字除去
return result
#おわりに
twitterから取得したテキストの前処理を紹介しました。力技な気もしますが、実現したいことはできました。これでtwitterのテキストで自然言語処理をしてみます。(Twitter APIは1週間以上前のデータも取得できるようにしてください)