Perlスクリプトの説明
戻る
※UNIXコマンドの解説も諸処で入れていますが、基本的にはシェルに精通しているという前提で書いています。ls,cp,mv,catなど基本コマンドは押さえておいて下さい。
※スクリプトの文字コードはすべてEUCです。MeCabやCabochaの辞書もEUCが前提です。(デフォルトだとEUCのはず)
※Fedora等最近はデフォルトがUTF-8なので、ターミナルのエンコードはEUCに変更しないと化けます。
※Cabochaは、普通に入れるのと、さらにperlへのライブラリも入れる必要があります。これは、Cabochaを展開した後のディレクトリの中に、さらにsampleか何か、とにかくサブディレクトリがあって、その中のやつをmakeする必要があります。これは、CPANモジュール同様に。perl Makefile.PL,make,make installで入ります。わからなかったら質問してください。
ディレクトリ:
http/ :http_get.plの結果格納
list/ :URLリストの格納
Perlスクリプト
http_get.pl :URLリストからWebにアクセスしてファイルへ落とす。
text_from_html.pl :Webから落としたファイルから用語説明部分を切り出す。
extrac_disc.pl :抽出ファイルから知識獲得?を行う。
make_q.pl :問題作成を試行。
1:Yahoo!から検索結果を取得
まず、Yahoo!検索エンジンの外部利用CGIを開きます。Enter search wordに、検索する用語を入れ、下のsendボタンを押します。Startは空でかまいません。

Yahoo!へアクセスし、1〜50件の検索結果が返ってきます。結果をスクロールし、下の方のURLのところにあるURLリストをすべてテキストエディタにでもコピペして下さい。

コピペしたら、画面上の方の、リンクNextを押します。そうすると、現在の結果から+50した分(例えば、51件から100件まで)の結果を取得します。

※スクリーンショットは100件分ですが、昔は100件まで取得できたのが仕様が変わって50件までになりました。
この結果のURLを先ほどのコピペ分に追加し、またNextを……という感じで、500件分データを取得します。
取得できたら、適当な名前を付けて(例:mac_address.txt)これをlistディレクトリに保存します。
listディレクトリ内に、サンプルとしてarp.txtがあるので参照してください。(単にURLが並んでいるだけですが)
2.HTMLの取得
URLリストのファイルから内容を取得します。
http_get.plを使用します。コマンドでの使い方は、
perl http_get.pl [URLファイル] [開始] [終了] [プロキシの有無]
です。500件取得したので終了は500ですが、練習の時は100程度でもかまいません。一つずつURLにアクセスするので、少々時間がかかります。
注意するのは、まずhttp_get.plの18行目を大阪工大のプロキシに変更しておくことです。変更しないと正しくアクセスできません。
例:perl http_get.pl url_list/mac_address.txt 1 500 fw
スクリプトを入力すると、file head ->と出ます。ここで、ヘッダを入力します。例えばmacaddressと入力すると、URLの1件目は、mac_address_1.txt、2件目はmac_address_2.txtという具合に、それぞれヘッダとn件目というファイル名が付いて、httpディレクトリに格納されます。(ディレクトリはソース内で決め打ちされています)

ちゃんとファイルが作られているかは、例えば ls http/macaddress* としてみるとファイルリストが取得できて確認できるでしょう。
3.解析結果を使ってHTMLから抽出
このスクリプトは、[HTMLファイルのヘッダ名] [開始位置] [終了位置] [書き出しファイル名] の4つを引数に持ちます。ここまでの例で通せば、以下のようになります。
perl text_from_html.pl http/macaddress 1 500 ex/macaddress.txt
ファイル数によっては、数分かかりますが、気長に待って下さい。ハングアップしたかな〜??と思っていると、突然finishが出て終了します。
指定した書き出しファイル(ここでは、exディレクトリのmacaddress.txt)を試しに見てみましょう。ほぼ、指定した用語についての説明書きが取得できているはずです。
4.抽出ファイルから説明文抽出を行う
perl extrac_disc.pl [text_from_html.plの書き出しファイル]
を実行します。(例えば、perl extrac_disc.pl ip.txt)
$ perl term_disc.pl ip.txt
Please input term --> ※ここに用語名を入力(IPアドレス、など)
Please output-write file --> ※適当にaとでも入力。(ファイルに書き出すが、不完全)
File ip.txt, about 用語名
Read Finish!
(キーワード抽出中。CPUにもよりますが、数分くらいはかかります)
抽出完了すると、ずらーとキーワードが出ます。
例:
(略)
1661: コンピュータ : 60
1662: ネットワーク : 60
1663: 接続 : 84
1664: 利用 : 85
1665: アドレス : 113
1666: IPアドレス : 266 :
重要な単語を選択します。入力して下さい。(exit "0000", clear "*" ,word input "00") ->
※ここで、キーワードの番号を入れる。例えば、「アドレス」なら1665。
ひとつ入れてEnterを押すと、再度出力されるので、また入れる。もう全部入れた、という場合は0000を入れると次の処理へ。
(この処理は近いうちに自動処理にする予定です)
Please file name(Cabocha pasing result) ->
ここに、結果ファイルの出力名を入れる。
Cabochaがちゃんとインストールできていないと(特にPerl用のモジュール)ここでエラーが出るかも。
OK, Now Cabocha parsing...
(この処理がまた数分くらいかかります)
処理が終わったら、だらだら〜と出力されます。
ふさわしいものを選択(ex:1,2,3)->
ここから先は適当な実装しかしてないので、ここでCTRL+Cで終わらせて下さい。
とりあえず今出力したものは、さっき入力したファイルに書き込まれています。
5.問題作成を試行
perl make_q.pl [extrac_disc.plのcabocha parsing書き出しファイル]
を実行します。
実行すると、Please input term -> ときいてくるので、用語名を入れます。
そうすると、あれこれ処理した結果がすぐに出ます。
出力結果が長いので、適当にスクロールして眺めてください。一番最初にとりあえず作ってみた問題、あとはいろいろな試行が出ます。研究途中(コーディング途中)なので、後半は適当です。
by 越智 徹
連絡先
メール:t-ochi@it.hirokoku-u.ac.jp
研究室TEL:0823-73-8226(相部屋のため呼び出し)