投稿者:nk.いかに(2つの意味で)適当にデータを収集するかというお話。明日も朝から実験があるのでこんなクソブログに記事書いてる場合じゃないんだが、自分的にあまりにも上手く行ったので残しておく。以前どっかの記事で心理学やってますみたいなことちらっと書いた気がするんだけど、心理学は心理学でもあまり心「理学」っぽくない領域が専門だったりする。Engeneeringをトゥギャザーしようぜみたいな感じで言ってた気がする(うろ覚え)し、ええ感じに上手いことやりましょうや的発想が求められる。心理学全般で言えば、輸入の学問なので用語が統一されていないところがある。174-208)がどれぐらい浸透しているかはわからない。いうか既にありそうだがそこまでこのトピックに興味あるわけでなし調べてない)というのが現状としてあったので、データとしてまとまった形で用語集が欲しかった。前から存在は知ってたし度々参照してたけど、おそらく島宗先生がネットに公開したと思しき用語集がある。書いたのは、ドメインが島宗先生の前の所属先でサイトのデザインもなんとなくそんな感じだからそう思ってるだけ。署名がないから実際にそうなのかはわからないが、十中八九まあそうだろう。見ていただいたらわかるように、このままでも非常に見やすい。ゴマを擂ってるわけじゃないけど、よくまとまっているし、結構な労力を割かれたのだろうなという印象を持つ。なんとかして扱いやすいデータ、つまりCSV形式にできないだろうかと考えるのは不思議ではないはず。いう経緯で今回CSV化するに至った。相変わらず前フリの長いのが僕の短所だな。プログラマはこういう状況でHTMLソースを見て記述パターンを解析するコードを書くと思うけど、今回それは断念した。ソースを見ていただいたらわかるように、HTML的な意味で構造化があまり正確にされていなくてパターンを抽出するのが面倒だったからだ。このような文書なら<dl>を用いて色やサイズ等に関してはCSSに投げた方が良い。(ページ製作者の名誉のためにフォローしておくと2001年当時はこのような「HTMLはデータ」という発想はあまりなく、そもそもこのページはAdobeのソフトが出力しているために糾弾されるべきは当時のAdobe社である)そんなことを言ってても仕方ない。ページをざっと眺めると次のような特徴があることに気づくだろう。だいたい3行ぐらいで収まってるっぽい最初の行は見出し最後の行は属性的なのに割り当てられていて、しかもその記述は[]に入れられており統一されている。ブラウザ上で表示されているテキストをコピーしても構造的な情報は損なわれなさそうである。HTMLを見るより綺麗に整頓されていることに気づく(このあたりにページ製作者の労力が伺える)。これを利用しない手はない。今後このページが更新されることもなさそうなので、一回限りの作業で良い。今回は家で作業するので神言語Perlの出番である。お前もCSVにしてやろうか~~~とりあえず表示されているテキストをコピーしてテキストエディタに貼り付け、最初の凡例部分までを手動で削除する。一回限りの場合は手動のほうが手っ取り早いこともある。この時点でこんな感じ。画像を見てもらったらわかるように、行のインデックスが19から始まっている。これはこの上にPerlのコードをぶち込んでいるからだ。データを含んだ全体のPerlファイルは著作権的にアレなので公開しないが、このPerlコード部分だけ公開しようと思う。@dic;<>__DATA__アイ・コンタクト(あいこんたくと)誰かあなたの話を聞かない人がいたら、話をする前に、その人があなたの方を見るようにさせなさい...こんな感じ。fuga.csvみたいにするとCSVファイルが生成されて万々歳となる。抽出されたデータはあってるのかさてCSVで保存され万々歳となったが、本当に全部が正しく抽出されているのか。エクセルでCSVを開いてCtrl+↓で空いているセルがないか確認した(Ctrl+↓でブランクのセルの直前まで移動してくれる)ところ、文中にカンマがあるとかでセルがズレてるとかそういう不備はなかった。個数はあっているのか。ブラウザの表示を見ると、項目は水平線<hr>で区切られていることがわかる。今度はソースから攻めよう。HTMLソースをコピーして貼り付け、余分な箇所(凡例まで)を削除する。その後、その編集されたHTMLソースを再びコピーし、今度はエクセルに貼り付ける。エクセルでは改行を含むテキストを貼りつけると、行が変わって入力される。この状態でエクセルの検索機能で「<hr」を調べるだけだ。抽出されたデータ数と一致した。まとめパッと見で規則性を抽出しようとするヒューリスティックスはなんだかんだで上手くいく。上手くいくからヒューリスティックスなんだが。ちなみに僕はこういうのを「目grep」と呼んでいる。そのうち、今回得たデータを使った何かを出すと思う。