前回の記事で形態素解析を行う簡単なプログラムが完成したので、今回は解析対象をTwitterから拾ってこれるようにしてみます。
目次
ライブラリのインストール
今回はTwitterAPIを使用するために、tweepyを使用します。
pip3 install tweepy
アクセストークンの取得
twitter公式ページから、自分のアカウントのAPIキーとトークンを取得します。
この時審査がありますが、個人的なアプリの作成という名目で提出すると承認してもらえます。
API_KEY = "********************************"
API_SECRET = "********************************"
ACCESS_TOKEN = "********************************"
ACCESS_TOKEN_SECRET = "********************************"
以上の4種類はTwitter上に作成したアプリケーション固有なので控えておきます。
日本語判定
形態素解析ライブラリjanomeは日本語以外の単語を全て固有名詞とみなしてしまうため、あらかじめ取得した文字列が日本語かそれ以外かを判定するための関数を作成しておきます。
def is_japanese(string):
k = unicodedata.name(string,'a')
if "CJK UNIFIED" in k or "HIRAGANA" in k or "KATAKANA" in k:
return True
else:
return False
unicodedataのname()メソッドはstringがNoneの時そのままNonetypeを返してしまうため、返り値のデフォルトとしてaを当てはめておきます。(アルファベットならなんでも良いです。)
ついでに、句読点判別用の関数も作成しておきます。
def is_punctuation(string):
if string == '。' or string == '、':
return True
else:
return False
OAuth
tweepyモジュールを利用してTwitterAPI認証を行います。
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
authに対してアクセストークンを設定します。
auth.set_access_token(ACCESS_TOKEN , ACCESS_TOKEN_SECRET)
apiオブジェクトを設定します。
api = tweepy.API(auth)
ツイートの取り出し
リソースサーバーからデータを取得する用意ができたので、ツイートの取り出しをしていきます。
初めに、ツイートを取り出したいユーザーのユーザー名をidに代入しておきます。
id = '@*****'
目標のidに対してツイートを任意の数だけ取り出します。
tweets = api.user_timeline(id=id,count=500)
text = ''
for t in tweets:
text += str('|')
for string in t.text:
if is_japanese(string) or not is_punctuation(string):
text+= string
else:
pass
text += str('|')
print(text)
textに、句読点、アルファベットを抜いた文章が全て格納されています。
コードの全体像
import tweepy
import unicodedata
API_KEY = "********************************"
API_SECRET = "********************************"
ACCESS_TOKEN = "********************************"
ACCESS_TOKEN_SECRET = "********************************"
def is_japanese(string):
k = unicodedata.name(string,'a')
if "CJK UNIFIED" in k or "HIRAGANA" in k or "KATAKANA" in k:
return True
else:
return False
def is_punctutaion(string):
if string == '。' or string == '、':
return True
else:
return False
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN , ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
id = "@*****"
tweets = api.user_timeline(id=id,count=500)
text = ''
for t in tweets:
text += str('|')
for string in t.text:
if is_japanese(string) or is_punctuation(string):
text+= string
else:
pass
text += str('|')
print(text)
次は、取得したツイートを形態素解析し、マルコフ連鎖を使用することで”その人がいいそうな文章”を再構築するプログラムについて考えていきます。