映画が好きでよく見るんですが、パルプフィクションが面白くて3回くらい見てしまいました。
映画を見ていても感じるんですが、Wikiにもこんな記載があります。
- 劇中でのfxxkの使用回数は250回を超える。
※一応全編通して伏字にします。
本当に250回も言っているのか?
勉強中のスクレイピングで検証します。
スクレイピング先
http://www.imsdb.com/scripts/Pulp-Fiction.html
保存してGrepすれば一発なのですが、スクレイピングの勉強のためここから抽出します。DOMを確認
特に階層化されていなくてテキストでベタっと張ってあるようです。
コード
スクレイピングの書き方は勉強中のこちら
Automate the Boring Stuff with Python
#! python3 import requests, bs4 from collections import Counter, defaultdict url = 'http://www.imsdb.com/scripts/Pulp-Fiction.html' res = requests.get(url) res.raise_for_status() soup = bs4.BeautifulSoup(res.text, "html.parser") # Search script script = soup.pre.text dict = Counter(script.split()) # Convert to lower case lower_d = defaultdict(int) for key, val in dict.items(): lower_d[key.lower()] += val # Search f-word for key, val in lower_d.items(): if key.find('fxxk') >= 0: print(key.ljust(40), str(val).rjust(1))
実行してみる
メインマシンは環境が汚いので、Fedora Python ClassroomのVagrant版で実行します。
(python3) [vagrant@localhost work]$ python pulp.py fxxking 3 fxxkin' 91 motherfxxkers' 1 fxxk 30 fxxk, 1 motherfxxkers! 2 fxxked 7 motherfxxkin-house, 1 motherfxxker 5 motherfxxker. 8 motherfxxker, 2 english-motherfxxker-can-you-speak- 1 motherfxxkin' 4 motherfxxkers 3 fxxker 1 fxxks 1 fxxk's 3 motherfxxker! 2 motherfxxker's 1 fxxked-up 1 motherfxxker" 1 (python3) [vagrant@localhost work]$
取れました!
いろんなバリエーションがありますね。
数を計算すると...169個!
あれ...全然少ない。
アドリブで言ってるってこと?
とりあえずうまいことスクレイピングできたので良しとします。
あとがき
参考にさせていただいたサイト
Python Tips:リストの中の要素を要素別にカウントしたい - Life with Python
Python Tips:文字列の中の文字をカウントしたい - Life with Pythonやりたいことメモ
- 文字列の整理
ピリオド、カンマ等取り除いて単語のバリエーションをすっきりさせたい。
正規表現でできそう。 - 合計値の出力
本当は合計値まで計算して出力したかったのですが、辞書のキーから特定ワード抽出後の加算がうまいことできないので諦めました。
もう一回リストに入れなおしてsumとかでできるかな?
とりあえずもっと勉強して修正したいと思います。 - 誰が何を何回言ったか
人物ごとに何のワードを何回言ったかまで作りこめたらいいな~
でもDOMの構造上難しそう...
- 文字列の整理
復習がてらコードの解説も書こうと思ったけど長くなりそうなのでやめます。
簡単なコードですが、世の中に公開する私の初めてのコードになります。
これからもっと頑張って勉強したいと思います。
でも本業のインフラの勉強もやらないと!
おまけ
shellでやれば一発でした。
(python3) [vagrant@localhost work]$ curl -s http://www.imsdb.com/scripts/Pulp-Fiction.html | tr " " "\n" | grep [fF]xxk | sort | uniq -c | awk '{s += $1} END {print s}' 169
詳細
(python3) [vagrant@localhost work]$ curl -s http://www.imsdb.com/scripts/Pulp-Fiction.html | tr " " "\n" | grep [fF]xxk | sort | uniq -c 1 English-motherfxxker-can-you-speak- 25 fxxk 1 fxxk, 5 fxxk 7 fxxked 1 fxxked-up 1 fxxker 89 fxxkin' 2 fxxkin' 3 fxxking 1 fxxks 3 fxxk's 3 motherfxxker 2 motherfxxker, 2 motherfxxker! 8 motherfxxker. 2 Motherfxxker 1 Motherfxxker" 3 motherfxxkers 1 motherfxxker's 2 motherfxxkers! 1 motherfxxkers' 4 motherfxxkin' 1 motherfxxkin-house,