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(相部屋のため呼び出し)