LoginSignup
4

More than 1 year has passed since last update.

posted at

updated at

pythonで自然言語処理のためのtwitterから取得したテキストの前処理

はじめに

自然言語処理をやってみようと思い、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週間以上前のデータも取得できるようにしてください)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4