LoginSignup
1
5

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-12-19

はじめに

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

1
5
0

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
  3. You can use dark theme
What you can do with signing up
1
5