1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonその3Advent Calendar 2019

Day 7

【自由研究】Wikipediaの更新とトレンドに関連性はあるのか?

Last updated at Posted at 2019-12-07

【自由研究】Wikipediaの更新とトレンドに関連性はあるのか?

ゲッタ〜です。小学20年生くらいです。自由研究の発表をします。

……

動機は下に書きますが、興味湧いたのでやってみたらさくっと実装できたので、
qiitaにあげてみようかなって思ったらちょうどアドカレの時期だったので適当に載せときます。

動機

嵐の二宮氏が結婚発表した際に、Wikipediaが荒らされていたのが。

もちろんそのときにはTwitterのトレンドに<は「ニノ結婚」とか入っていた。

そこで「もしかしてWikipediaとTwitterトレンドには関連があるのかな:thinking:」と思った。

関連があった場合何が嬉しいかというと、Wikipediaを見るだけでトレンドもおさえつつ、具体的な知識を得ることができ、SNSを見るよりもトレンドについて詳しく知ることができるのではないか。

方法

TwitterのトレンドをAPIで取得する。

Twitterの日本のトレンドをAPIで取得するプログラム
def auth_api():
    auth = tweepy.OAuthHandler(api_key.CONSUMER_KEY, api_key.CONSUMER_SECRET)
    auth.set_access_token(api_key.ACCESS_TOKEN, api_key.ACCESS_SECRET)
    return tweepy.API(auth)
    
def get_trend_words():
    api = auth_api()
    trends = api.trends_place("23424856") #日本のWOEID
    trend_words = []
    for d in trends[0]["trends"]:
        trend_words.append(d["name"])
    return trend_words

Wikipediaの最近の更新ページをスクレイピングしてリストを取得する。

Wikipediaの最近の更新を取得するプログラム
def get_wikipedia_log_keywords():
    url = 'https://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E6%9C%80%E8%BF%91%E3%81%AE%E6%9B%B4%E6%96%B0?hidebots=1&hidecategorization=1&hideWikibase=1&limit=500&days=7&urlversion=2' # limitを変えれば取得件数が変わる
    html = requests.get(url)
    soup = bs4.BeautifulSoup(html.text, "html5lib")
    keywords = [el.text for el in soup.find_all(class_="mw-changeslist-title")]
    return keywords

それぞれのリストを全探索して単語が一致してたら数え上げてリストの長さで割って出力。

import twitter_trend
import wikipedia_ch_log

def main():
    print("------wikipedia 500 keywords------")
    print()
    wiki = wikipedia_ch_log.get_wikipedia_log_keywords()
    print(wiki)
    print()
    print("------twitter trends------")
    print()
    twi = twitter_trend.get_trend_words()
    print(twi)
    cnt = 0
    for s in twi:
        if "#" in s:
            s = s[1:] #ハッシュタグ除去
        for s2 in wiki:
            if s in s2:
                print("same word :", s, s2)
                cnt += 1
    print("count :", cnt)
    
    print("coincidence :", cnt / (max(len(twi), len(wiki))))
    
if __name__ == "__main__":
    main() 

pythonista3で改行コード使えないのかな?

結果

一致なし

全く一致しないこともあった。

一致した

1件だけ一致。
上に切れているのがWikipediaのリストで、下がTwitterのトレンド。
一致したのが「久保田利伸」1件で、一致度が0.002。

考察

今回はWikipediaとTwitterの比較をやっていきましたが、
Wikipedia約500件、Twitterトレンド約50件に対して、0〜1件の一致しかありませんでした。

スクショ撮ってない中でもせいぜい4件程度の一致しかありませんでした。

この結果によりこれらに全く関連性が無いというよりは、
評価の方法に問題がありました。

一応Twitterのハッシュタグを除く程度の処理はしていますが、それでは不十分で、
冒頭でも言っているように、「ニノ結婚」とかでトレンド入りしても、Wikipediaには「二宮和也」で登録されるはずなので、
当然この方法では一致しないですね。

これをうまく処理するには、それぞれのトレンドワードから何らかの方法(例えばGoogle検索)で関連語を抜いてきてからWikipediaと比較するなどした方が良いかもしれませんね。

また、評価値も一応最大値が1になるように設定しましたが、大きい方のリストの大きさは評価値に効いていますが、小さい方(今回ではトレンド)のリストのサイズが評価に全く影響しないので、あまり良く無い評価式になっています。

感想

前々からWikipediaの履歴抜く発想はありましたが、なかなか面倒でやってなかったんですが、めちゃくちゃ簡単にできてよかったです。
TwitterのトレンドもAPIで用意されてて、APIキーも前に取得していたのでさくっとできてよかったです。

今後引き続きやるのであれば、関連語を抜いたりして一致度をより詳細に調べてみたいですね。

その結果どのくらいトレンドと関連があるかわかれば、Wikipediaの記事を自動で読み取ってトレンドを解説するサイトを副産物的に作ったりも出来るかもしれませんね。

参考

自分の記事
bs4の使い方を思い出すため

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?