自然言語処理をやっている人はよく辞書の整備が大変だと言います。
そんな話をしていたところ、「自分が詳しくない分野の言葉を知るときはweblio辞書が便利だよ」という知見を教えてもらいました。
しかし、私は怠惰なプログラマーなので、スクレイピングでデータを取得しました。 試しに、建築・不動産の辞書をスクレイピングで引っ張ってくることにしました。
PythonとRubyでスクレイピングするのは飽きたのでRでコードを書きました。 問題になった(工夫した)のは以下の点です。
- 英字('a', 'b', 'c'...)、日本語('aa', 'ka', 'sa'...)、数字(0:9)、記号('sign')のURLがある
- JavaScriptの即時実行式を真似たのはトリッキーすぎるかな…
- 単語と読みが別々に表示されている
- サーバーに負荷をかけすぎないように、3秒ごとにsleepさせています
- 本当は404の例外が来たときに例外をキャッチして、数秒sleepした後に再実行するようにしたかった
- 書き捨てのコードなのでやってないです
コードはgistに公開しています。
return
の後にパイプ処理を重ねるのは先輩のコードの癖が移ったものです。お元気でしょうか…。
スクレイピングには、みんな大好きHadley Wickhamのrvest
ライブラリを利用しました。Pythonのurllib
とBeautifulSoup
(Rubyのopen-uri
とNokogiri
)の処理を一気にやってくれます。
xpath方式などでHTMlの要素を指定できるので、
RubyのNokogiri
に似た感覚で使うことができました。
また、高階関数を扱うライブラリpurrr
のmap_df
がめちゃめちゃ便利ですね。
Map関数(purrr::map
の)戻り値は通常list
なのですが、それをデータフレームにしてくれます。
また、細かいところではRには定数(letters
)でアルファベットの一覧のベクトルが使えることを初めて知りました。
詳しくはR-Tipsの記事へ。