URL内のテキストをすべて抜き出すには[Perl編]

URLを抽出できるようになったので、次にそのURLのテキストを抜き出してみます。
実際には無駄な部分も取得されてしまうと思いますが・・・。

まずはこんな感じにして取得してみました。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;

# urlを指定する
my $url = 'https://www.pref.shizuoka.jp/';
# my $url = 'http://www.jalan.net/kankou/210000/';
print $url."\n";
# IE8
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";

# LWPを使ってサイトにアクセスし、HTMLの内容を取得する
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;

# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);

# DOM操作
my @items =  $tree->find('html');
print $_->as_text."\n" for @items;

 

このように取得できました。

静岡県公式ホームページ ふじのくに総合トップページ このサイトではJavaScriptを使用したコンテンツ・ 機能を提供しています。JavaScriptを有効にするとご利用いただけます。 本文へスキップします。静岡県 文字サイズ・色合い変更音声読み上げふりがなふりがな非表示Other languageサイトマップ メニュー ここから本文です。緊急情報 水難事故注意報の発令(6月1日?6月30日)北朝鮮の「弾道ミサイル」に係る本県の対応 県政情報 総合案内、電子行政サービス、ようこそ知事室へ、県へのご意見、県の広報、採用情報、入札情報など ふじのくに魅力情報 観光情報、グルメ、食材、静岡に暮らす、富士山ガイド、富士山静岡 空港など ライブカメラ富士山ビュー 県庁へのアクセス各種お問い合わせ 著作権・リンクについて個 人情報保護についてユニバーサルデザインに配慮したページ 〒420-8601 静岡県静岡市葵区追手町9番6号 電話番号(県庁案内):054-221-2455 Copyright ・hizuoka Prefecture. All Rights Reserved.

割と良いかも?と思いましたが
JavaScriptを有効にするとご利用いただけます。
てなっていますね。これは仕方ないですかね・・・

JavaScriptの部分はグーグルでも拾えていないとおもいますし。

次に、2件目の
http://www.jalan.net/kankou/210000/
をやりますと、盛大に文字化け・・・。
見てみると、「ShiftJIS」ですね。

とりあえず、取得の部分を以下のように変更ました。

my $content = Jcode::convert( $res->content ,"utf8" , "sjis");

この書き方で「ShiftJIS から UTF8 に」となります。
感覚的には逆ですよね。。。

 

静岡の観光スポットランキングTOP10 – じゃらんnet 国内の観光スポット・イベント情報はじゃらんnetじゃらん PRODUCED BY RECRUIT 日本最大級の宿・ホテル予約サイト予約照会・変更・キャンセルマイページ 宿・ホテル予約出張ビジネス温泉・露天高級宿日帰り・デイユース じゃらんパック(交通+宿泊)遊び・体験予約観光ガイド旅行ガイド 観光ガイド ご当地グルメガイド イベントガイド お土産ガイド みんなの旅行記 ツアーレンタカー高速バス航空券 海外ホテル海外航空券航空券+ホテル 観光ガイド旅行ガイド観光ガイドご当地グルメガイドイベントガイドお土産ガイドみんなの旅行記 海外ツアーはエイビーロードサイトのご利用 方法ヘルプ/問い合わせ 観光ガイド> 静岡の観光 ようこそ、ゲストさん(ログイン)新規会員登録 静岡の観光スポット静岡県での観光となると誰もが真っ先に思いつくスポットが霊峰富士山だろう。世界遺 産にも指定されている富士山近隣には村山浅間神社や須山浅間神社など所縁ある寺社も多く、富士信仰の歴史文化も垣間見ることができる。熱海市や伊豆市は国内屈指の温泉街のため年間を通して多くの旅行者が足を運んでいる。また、天下を統一した徳川家康の居城としても知られる駿府城や浜松城などの城郭も目にすることができる。・・・・・・・

今度はかなり長く取れました。
実はもっともっと長いです。

次はエンコードチェックを自動にして、10件のURLを一気に処理するようにしてみます。

Google検索結果のURLを整形する

url=[ここを取得]&rct
の ここ のみを取得します。

というわけでこんなサブルーチンを作ってみました。

sub urlget{
    my $url=shift;
    if ( $url=~ /\?url\=(.*)\&rct/ ){
        return $1;
    }
    else{
        return $url;
    }
}

 

ほんで、取得・・・

静岡県公式ホームページ ふじのくに総合トップページ
https://www.pref.shizuoka.jp/
静岡県 – Wikipedia
https://ja.wikipedia.org/wiki/%25E9%259D%2599%25E5%25B2%25A1%25E7%259C%258C
静岡の観光スポットランキングTOP10 – じゃらんnet
http://www.jalan.net/kankou/210000/
ハローナビしずおか 静岡県観光情報公式ホームページ
http://hellonavi.jp/
静岡 のニュース検索結果
/search?q=%E9%9D%99%E5%B2%A1&lr=&hl=ja&prmd=ivnsm&source=univ&tbm=nws&tbo=u&sa=X&ved=0ahUKEwjtxcLm0q_UAhXITrwKHQjbBVwQqAIILA
静岡市ホームページ
http://www.city.shizuoka.jp/
絶対に行きたい!“静岡”のオススメ観光スポットランキングTOP40 …
https://retrip.jp/articles/5381/
@S[アットエス] | 静岡新聞SBSオフィシャルサイト
http://www.at-s.com/
しずおか観光情報 駿府静岡市 最高の体験と感動を
http://www.visit-shizuoka.com/
静岡銀行
http://www.shizuokabank.co.jp/

おや・・・一つ変なのがあります。

静岡 のニュース検索結果
/search?q=%E9%9D%99%E5%B2%A1&lr=&hl=ja&prmd=ivnsm&source=univ&tbm=nws&tbo=u&sa=X&ved=0ahUKEwjtxcLm0q_UAhXITrwKHQjbBVwQqAIILA

 

これって、「googleの検索結果が」検索結果に出ているってことみたいですね。
相対パスになります。

ので

https://www.google.co.jp/search?q=%E9%9D%99%E5%B2%A1&lr=&hl=ja&prmd=ivnsm&source=univ&tbm=nws&tbo=u&sa=X&ved=0ahUKEwjtxcLm0q_UAhXITrwKHQjbBVwQqAIILA

とするのが正しそうです。

ですが、いまは共起語の取得のためですから、
このURLは除外してしまっても良いかもしれません。

除外、とすることにします。

sub urlget{
    my $url=shift;
    if ( $url=~ /\?url\=(.*)\&rct/ ){
        return $1;
    }
    else{
        return "";
    }
}

 
こうすると、マッチしないときには空を返すようになりますね。

Google検索結果を検証。必要なURLだけ取得したい。

perlで取得した結果がなんか変だったので確かめてみます。

 

改めまして、「静岡」で検索しました。

静岡県公式ホームページ ふじのくに総合トップページ
/url?url=https://www.pref.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggUMAA&usg=AFQjCNHGdMpNPtlQnLHiWYBYSVwHLO1B2Q
静岡の観光スポットランキングTOP10 - じゃらんnet
http://www.google.co.jp/url?url=http://www.jalan.net/kankou/210000/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggaMAE&usg=AFQjCNE4cTfOF0wUbD7JkGe1RrC_av9otw
静岡県 - Wikipedia
/url?url=https://ja.wikipedia.org/wiki/%25E9%259D%2599%25E5%25B2%25A1%25E7%259C%258C&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFgggMAI&usg=AFQjCNHykSNFBk5JnwvoeAFIVeLWCI0zNw
静岡市ホームページ
http://www.google.co.jp/url?url=http://www.city.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggmMAM&usg=AFQjCNGudOxgX6qLRsXvbJtK5vFSfzfpog
ハローナビしずおか 静岡県観光情報公式ホームページ
http://www.google.co.jp/url?url=http://hellonavi.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggsMAQ&usg=AFQjCNGU_HMOAGgIQVuPN5-3QhWJVLBkfw
絶対に行きたい!“静岡”のオススメ観光スポットランキングTOP40 ...
/url?url=https://retrip.jp/articles/5381/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggyMAU&usg=AFQjCNHnhe4qy_m68DO5BpCf_9TGgUy4JQ
@S[アットエス] | 静岡新聞SBSオフィシャルサイト
http://www.google.co.jp/url?url=http://www.at-s.com/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFgg5MAY&usg=AFQjCNE23oUpCnBS0o8w4kCqUr-2h1zDyg
静岡銀行
http://www.google.co.jp/url?url=http://www.shizuokabank.co.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFgg_MAc&usg=AFQjCNEBmOgVkUxIxApdGuYanF1wSyaX6Q
しずおか観光情報 駿府静岡市 最高の体験と感動を
http://www.google.co.jp/url?url=http://www.visit-shizuoka.com/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFghFMAg&usg=AFQjCNFG0tL7qh0Pox9xAwuEbfDdi1jGiA
静岡大学:トップページ
http://www.google.co.jp/url?url=http://www.shizuoka.ac.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFghLMAk&usg=AFQjCNFiJHo-BZx3TzNKZJot5_Y-HFaXcA

 

実際にブラウザから検索してみました。
上から3件ですが、以下のようになっていました。

静岡県公式ホームページ ふじのくに総合トップページ
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggnMAA&url=https%3A%2F%2Fwww.pref.shizuoka.jp%2F&usg=AFQjCNGQOwfv93PFx9bbQv8t6qbPwwJdpA&sig2=25OMRKGO_9No4H9r1UlY-A

静岡の観光スポットランキングTOP10 - じゃらんnet
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggtMAE&url=http%3A%2F%2Fwww.jalan.net%2Fkankou%2F210000%2F&usg=AFQjCNHWDzurqyzxpvyf-X7pL4EBkk4a0w&sig2=HFDrxBA552FM4ObWVxP9aw

静岡市ホームページ
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggzMAI&url=http%3A%2F%2Fwww.city.shizuoka.jp%2F&usg=AFQjCNF4FIjZYBGomvMRfmGA7MjBDElrXQ&sig2=2tD8x-R-fDPW52DwJOqE7Q

 

ブラウザと比較してみました。

静岡県公式ホームページ ふじのくに総合トップページ
[perl] /url?url=https://www.pref.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggUMAA&usg=AFQjCNHGdMpNPtlQnLHiWYBYSVwHLO1B2Q
[ブラウザ] https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggnMAA
&url=https%3A%2F%2Fwww.pref.shizuoka.jp%2F&usg=AFQjCNGQOwfv93PFx9bbQv8t6qbPwwJdpA&sig2=25OMRKGO_9No4H9r1UlY-A
[実際につながるページ] https://www.pref.shizuoka.jp/

静岡の観光スポットランキングTOP10 - じゃらんnet
[perl] http://www.google.co.jp/url?url=http://www.jalan.net/kankou/210000/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggaMAE&usg=AFQjCNE4cTfOF0wUbD7JkGe1RrC_av9otw
[ブラウザ] https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggtMAE
&url=http%3A%2F%2Fwww.jalan.net%2Fkankou%2F210000%2F&usg=AFQjCNHWDzurqyzxpvyf-X7pL4EBkk4a0w&sig2=HFDrxBA552FM4ObWVxP9aw
[実際につながるページ] http://www.jalan.net/kankou/210000/

静岡市ホームページ
[perl] http://www.google.co.jp/url?url=http://www.city.shizuoka.jp/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwj_gN3ikq3UAhXEyLwKHcYsAZ0QFggmMAM&usg=AFQjCNGudOxgX6qLRsXvbJtK5vFSfzfpog
[ブラウザ] https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwj8lrrRka3UAhXHu7wKHbPSApwQFggzMAI
&url=http%3A%2F%2Fwww.city.shizuoka.jp%2F&usg=AFQjCNF4FIjZYBGomvMRfmGA7MjBDElrXQ&sig2=2tD8x-R-fDPW52DwJOqE7Q
[実際につながるページ] http://www.city.shizuoka.jp/

リンクを実際に開くと短くなりますね。
というかグーグルを一旦経由してクリック数などをグーグルに送信する仕組みになっているのでしょうね。
perlもブラウザも
url= の後、と言うのは共通ですね。
でも終端が違いますね。

[perl] &rct=
[ブラウザ] &usg=
まで、ということでしょうか。

perlですから、

url=[ここを取得]&rct

とすれば取得できそうです。

Google検索結果を取得する

google検索結果を取得するにはAPIを使う方法がありますが、
無料分は100クエリまでということですので、普通に検索結果から取得してみます。

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Jcode;

my $search_word = 'perl';
# EUC -> UTF8 に変換 
# UTF8環境なので不要 # $search_word = jcode($search_word,'euc')->utf8; 
# URLエンコード
$search_word =~ s/(\W)/'%' . unpack('H2', $1)/eg;
my $url = 'http://www.google.co.jp/search?hl=ja&q=' . $search_word . '&lr=';
# IE8のユーザーエージェントを設定
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";

# HTMLの内容を取得する
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;

 

検索対象は「perl」です。
これでHTMLが取得できましたので、解析してみます。

検索結果のURLですが、h3タグの中に入っているようです。
これは「アキラ100%」で検索した時の1結果です 笑

<h3 class=”r”>
<a href=”http://miyatarou.com/comedy/1830/”
onmousedown=”return rwt(this,”,”,”,’9′,’AFQjCNF250bPEXnKwY4wP87
kqyYbxC2DGg’,’WJCl1kI7irdVIrwPTPzpBw’,’0ahUKEwjgjYjS-KXUAhWF1
xQKHfk6CBIQFgheMAg’,”,”,event)”>
アキラ100%はR-1も本当に履いてない?前張りの噂と女性芸能人の反応 …
</a>
</h3>

 

h3タグを@itemsに取得しておいて、
更にその中のaタグ、アトリビュートhrefの内容を表示しています。

# HTML::TreeBuilderで解析
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);
my @items =  $tree->find('h3');
for (@items){
    my @a=$_->find('a');
    for ( @a ){
        print $_->attr('href')."\n";
    }
}

 

こんな風に結果が取れてきます。
一応取れているようですが、どういうわけか、ブラウザでアクセスした場合とちょっとHTMLが違うようです。

http://www.google.co.jp/search?hl=ja&q=perl&lr=
/url?url=https://ja.wikipedia.org/wiki/Perl&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggYMAE&usg=AFQjCNFE5JzFlwzErpZQe11A64UIEV00eQ
/url?url=https://ja.wikipedia.org/wiki/Perl&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggcMAI&usg=AFQjCNFE5JzFlwzErpZQe11A64UIEV00eQ
http://www.google.co.jp/url?url=http://www.kent-web.com/perl/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggnMAM&usg=AFQjCNHhc6en3-laRPR7K7in8iUKP-cW6A
http://www.google.co.jp/url?url=http://www.kent-web.com/perl/chap1.html&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFggyMAQ&usg=AFQjCNFpd3GwJwVlNmN5jQZkTLWFb3iElg
http://www.google.co.jp/url?url=http://www.tohoho-web.com/wwwperl.htm&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFgg4MAU&usg=AFQjCNEK_m6bL32seOW2yV7O5n_HOvbn3Q
http://www.google.co.jp/url?url=http://www.perlplus.jp/perl/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFgg_MAY&usg=AFQjCNFOeqYEGczhLQs3ara6kPW-RBVR2Q
http://www.google.co.jp/url?url=http://www.perlplus.jp/perl/for/index5.html&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghFMAc&usg=AFQjCNFa7DnOB-kZWA82-1S_RYhf1JbKHA
http://www.google.co.jp/url?url=http://d.hatena.ne.jp/perlcodesample/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghLMAg&usg=AFQjCNFEwzKbRrMON3l7Ar4ivOUE2pluag
/url?url=https://www.ruby-lang.org/ja/documentation/ruby-from-other-languages/to-ruby-from-perl/&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghRMAk&usg=AFQjCNHvburk5b6rlKI6i47ruq295UtGow
http://www.google.co.jp/url?url=http://qiita.com/Arashi/items/f28035d81f98985fcf2b&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghWMAo&usg=AFQjCNE-GuzMlb0ybPWXIF-ZirOoJAp1_g
http://www.google.co.jp/url?url=http://www.tryhp.net/perlcgi.htm&rct=j&frm=1&q=&esrc=s&sa=U&ved=0ahUKEwivqI-b0KvUAhUCTbwKHacPDJ8QFghcMAs&usg=AFQjCNG48V-2vCGPVwQ8zSxwISiAF4-jXQ

どういうわけか上記のURLの幾つかは接続不能です。

ついでに、検索結果一覧にある要約文を取得してみます。

 

spanタグのclass=”st”の中に要約がはいっているようですので、以下のようにします。

@items =  $tree->look_down('class', 'st');
print $_->as_text."\n" for @items;

 

このように取れました。

Perl(パール)とは、ラリー・ウォールによって開発されたプログラミング言語である。実用 性と多様性を重 視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング 言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、 ...
Perlによる基礎入門ページです。初心者向けに分かりやすく解説します。
Perlによる初心者向け基礎入門ページです。サンプルコードを中心に、Perlの文法や 構文を学習します。
1997年2月3日 ... とほほのperl入門. トップ > とほほのperl入門. 概要編  倹erlとは  クソク」 酵 perlの バージョン  ク巐貉セ 歯 実行方法  ウ銚・惚 ファイル指定  カァオニエャオ卸ワ 拒 標準入力 読み込み型  エ・犧・ュ 隙 簡単な実行例  ーッー隹シーューヒエ擎、ーツ 甥 定数・変数・値.
プログラミング言語としてPerlを使った方法を学習される方を対象として、Perlによる プログラム記述方法を 確認していきます。PerlのプログラミングとしてはCGIとしてWWW サーバと連携した利用方法がよく使われます が、まず単独で動作するプログラムの作成  ...
foreach文はfor文と似た構文です。foreachは値の集合であるリストを指定すると、リスト に含まれる値の数だけ順に繰り返しを行います。(リストについては別のページで詳しく見 ていきます)。 foreach文の書式は次の ようになっています。 foreach 変数 (リスト){ ...
Perl学習サイト - サンプルコードPerl入門. Perlは「テキスト処理」「システム管理」「Web 開発」の三つの 分野で優れたプログラム言語です。 開発の現場でPerlが利用されている ことは多いので、ITエンジニアとしてぜひ基礎的なことをマスターしておきましょう。
Perlはすばらしい言語です。ドキュメントもすばらしいし、Perlコミュニティもすばらしい コミュニティです 。 しかし、言語はかなり大きく、間違いなく複雑です。 もっとシンプルで 直交的な言語や、最初から洗練さ れたオブジェクト指向の機能が組み込まれた言語を 求め ...
2016年9月16日 ... はじめにPHPerのぼくが、Perlを触った思い出に基本的なことを書いていこうと思います 。 というのも、毎回Google先生に聞くのもいいのですが無くなる記事も多くあるので自分 でまとめちゃおうという魂胆です(`・ω・´)ゞ初心者のぼくでも少しだけ ...
これらの問題をすべてカバーしてくれるのがPerl(以下Perl、パールと読む)言語です。 Perlは、テキストベー スで動作するコンパイラ言語ですので、作成するのはテキスト ファイルだけです。 このテキストページにアクセスがあればPerlが自動でコンパイルして 実行 ...

もしかすると、これだけでもある程度共起語が取れるかもしれません。

[前途多難]テキスト抜き出し

WEBページからテキストを抽出して形態素解析にかけるには
テキスト抜き出しをしなければなりません。

タグを削除する

単純にタグを消すだけでも良いのですが、
↑に説明があるように、HTML::TokeParserを使ってみます。

モジュール HTML::TokeParser の get_text メソッド,または get_trimmed_text メソッドや, striphtml を使っても同じようなことができます

こんな簡単なperlスクリプトを試します。

#!/usr/bin/perl
use strict;
use HTML::TokeParser;
use LWP::Simple;

my $url = shift @ARGV or die "usage $0 url\n";
my $content = get $url;
my $parser = HTML::TokeParser->new( \$content );
die "Error constructor of HTML::TokeParser\n" unless defined $parser;
while ( my $text = $parser->get_text("") ) {
    print $text;
}

ところが以下のような簡単なhtmlであればうまくいきますが、

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>テストページ</title>
</head>
<body>
これはテストコンテンツです。
<br>
テストとは、英語のtestのカタカナ表記です。<br>
試験、試す、という意味です。
<br>
<img src="002.png" alt="画像ファイルです">
<br>
画像を表示できます。
</body>
</html>

多くのWebサイトではjavascriptが本文として抽出されてしまいます。
Scriptタグを除去した後に、テキストを抽出する必要がありそうです。

さくらインターネットでTermExtractを使ってみる

さくらインターネットでTermExtractが使えるかどうか試してみました。

cpanmを使ってインストールしました。

cpanm

perlモジュールのinstallにcpanmを使う

さくらインターネットサーバでのCPAN導入を完全に手順化して見た

手前味噌ですが・・・
さくらインターネットにcpanmでNET::Twitterを導入(1)(CPANM導入編)

cpanmは既にインストール済みの方が多いかもしれませんね。

TermExtractをインストール

cpanmでインストールします。

wget http://gensen.dl.itc.u-tokyo.ac.jp/soft/TermExtract-4_11.tar.gz
cpanm TermExtract-4_11.tar.gz

これだけ。

試してみる

自分のブログから少し抜き出してきました。

形態素解析して共起語を抽出したいと思います。
Mecabだとキーワードが細切れになってしまいます。
名詞と名詞をつなげるというようなカスタマイズもありですが、
自動的につなげてくれるモジュールがあるようです。

これをtest.txtとして

mecab text.txt > mecab_out.txt

./ex_mecab.pl

補足
@INCにはいっていない場合は
use TermExtract::MeCab; の前にいかのように書いておくと動きます。
use lib ‘/home/ユーザー名/perl5/lib/perl5’;

結果はこんな感じ

名詞 2.00
共起語 1.41
モジュール 1.00
キーワード 1.00
細切れ 1.00
カスタマイズ 1.00
Mecab 1.00

なかなか良い感じです。

課題

今後の課題です。

  1. google検索
  2. 検索結果のリンク部分を取得
  3. リンクを開く
  4. テキスト部分を抜き出す

こうして得たテキストを解析すると共起語っぽい結果が得られるのではないでしょうか。

TermExtractインストールするも、まったく動作しなかった

Mecabだとキーワードが細切れになってしまいます。
名詞と名詞をつなげるというようなカスタマイズもありですが、
自動的につなげてくれるモジュールがあるようです。

専門用語(キーワード)自動抽出システム – TermExtract

インストールは以下を参考にRaspberryPiにインストールしました。

TermExtractとMecabとperl

> wget http://gensen.dl.itc.u-tokyo.ac.jp/soft/TermExtract-4_11.tar.gz
> tar xvzf TermExtract-4_11.tar.gz
> cd TermExtract-4_11
> perl Makefile.PL
> make
> sudo make install

対象テキストはmecabのwikiの文章としました。

まずmecabで解析したテキストをmecab_out.txtに出力して
ex_mecab.pl
を実行すればよいのだと思うが何も表示されない。

というわけでデバッグ実行してみました。

デバッグ

> perl -d ex_mecab.pl

main::(./ex_mecab.pl:15): my $data = new TermExtract::MeCab;
DB n
main::(./ex_mecab.pl:16): my $InputFile = “mecab_out.txt”; # 入力ファイル
DB n
main::(./ex_mecab.pl:20): $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = ‘sigexit’;
DB n
main::(./ex_mecab.pl:25): my $output_mode = 1;
DB n
main::(./ex_mecab.pl:100): my @noun_list = $data->get_imp_word($InputFile); # 入力がファイル
DB n
main::(./ex_mecab.pl:112): foreach (@noun_list) {
DB n
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.

という感じで終わってしまう。
get_imp_wordを実行しても
@noun_listに何も値が入らないみたい・・・。

eucにしたら動いた

ベースはUTF8で動いているのだけど、何故かEUCじゃないとダメな感じになってしまいました。

というわけで、なんかうまく動かないと思った方は
一旦変換対象をEUCにしてみると動くかもしれません。

結果は以下のような感じです。

ChaSen 4.00
. 3.00
MeCab 3.00
日本語入力 2.91
解析 2.83
[ 2.83
Google日本語入力開発者 2.35
開発者 2.21
開発開始 2.00
– 2.00
解析精度 2.00
]。 2.00
][ 2.00
解析速度 2.00
規模日本語n – gramデータ 1.95
iPhone OS 1.86
品詞情報 1.86
形態素解析エンジン 1.78
Mac OS X v 1.77
Google 1.73
IPA品詞体系 1.70
Googleソフトウェアエンジニア 1.70
工藤拓[ 1.59
奈良先端科学技術大学院大学出身 1.41
オープンソース 1.41
和布蕪 1.41
v 1.41
IPADIC 1.00
推定 1.00
程度 1.00
作成 1.00
Spotlight 1.00
ChaSenTNG 1.00
平均 1.00
好物 1.00
名前 1.00
名称 1.00
スクラッチ 1.00
基 1.00
辞書 1.00
] 1.00
独立 1.00

なかなかいい感じではないでしょうか?!
’[’ や ’]’ や ’.’ が邪魔なような感じがしますので、少しカスタムが必要そうですが。

共起語ツールの作成

関連後やサジェストを調べると記事作成がはかどります。
と言うか、SEO的にも良い記事が出来上がる・・・ような気がする。

そこで共起語

共起というのは、

共起(きょうき)は、ある単語がある文章(または文)中に出たとき、その文章(文)中に別の限られた単語が頻繁に出現すること。

ということですから、
Google検索やBing検索で
あるキーワードを検索したときに、同時に使っているキーワードを抽出すれば良い感じがします。
関連語やサジェストではサービスが停止したり不便なこともありましたが、
共起語は検索結果ですので、ずっと使えそうですね。

とりあえず形態素解析

共起の共起語を考えてみます。

自然言語処理の分野において、任意の文書や文において、ある文字列とある文字列が同時に出現することである。

これをmecabコマンドにかけてみます。

すると結果はこう出ました。

自然 名詞,形容動詞語幹,*,*,*,*,自然,シゼン,シゼン
言語 名詞,一般,*,*,*,*,言語,ゲンゴ,ゲンゴ
処理 名詞,サ変接続,*,*,*,*,処理,ショリ,ショリ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
分野 名詞,一般,*,*,*,*,分野,ブンヤ,ブンヤ
において 助詞,格助詞,連語,*,*,*,において,ニオイテ,ニオイテ
、 記号,読点,*,*,*,*,、,、,、
任意 名詞,一般,*,*,*,*,任意,ニンイ,ニンイ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
文書 名詞,一般,*,*,*,*,文書,ブンショ,ブンショ
や 助詞,並立助詞,*,*,*,*,や,ヤ,ヤ
文 名詞,一般,*,*,*,*,文,ブン,ブン
において 助詞,格助詞,連語,*,*,*,において,ニオイテ,ニオイテ
、 記号,読点,*,*,*,*,、,、,、
ある 連体詞,*,*,*,*,*,ある,アル,アル
文字 名詞,一般,*,*,*,*,文字,モジ,モジ
列 名詞,一般,*,*,*,*,列,レツ,レツ
と 助詞,格助詞,一般,*,*,*,と,ト,ト
ある 動詞,自立,*,*,五段・ラ行,基本形,ある,アル,アル
文字 名詞,一般,*,*,*,*,文字,モジ,モジ
列 名詞,一般,*,*,*,*,列,レツ,レツ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
同時に 副詞,一般,*,*,*,*,同時に,ドウジニ,ドージニ
出現 名詞,サ変接続,*,*,*,*,出現,シュツゲン,シュツゲン
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
こと 名詞,非自立,一般,*,*,*,こと,コト,コト
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある 助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。 記号,句点,*,*,*,*,。,。,。

名詞だけに絞るとこんな感じに。

自然 言語 処理 分野 任意 文書 文 文字 列 文字 列 出現 こと

一部ダブっていますが。

これは悩ましいかも

冒頭の
 ”自然 言語 処理”
は1語ずつとするのか
 ”自然言語処理”
と一つの単語として扱うのが正解なのか判断がわかれるところで悩ましいですね。

もう少しいろいろ試していこうと思います。

クライシスゾーンにハマった話

週末の会社の帰りによく寄っていたゲームセンターがありました。
そこにはやがてタイムクライシス2がやってきました。
これも結構やったと思うのですが、あまり覚えていません。

クライシスゾーン登場


というのも、タイムクライシス2のあとに来たクライシスゾーンが強烈だったからです。

銃はマシンガンになり、連射感がとても心地よかったのです。
マシンガンなので、敵を狙うというよりも、薙ぎ払う感じ?が新鮮でした。
無駄に敵以外の棚とか植木なども壊すことができました。
とにかく撃ちまくれる!ということで、毎週末通っているうちにワンコインでクリアできるようになりました 笑

PS2にタイムクライシス2が登場するが・・・

ゲームセンターではタイムクライシス2は既に古くなっていましたが、PS2で発売されました。
もちろん予約買いしましたが、一つ期待していたことがありました。
しかしやっぱり
ブローバックしない
かなりがっかりしました。
クライシスゾーンもPS2への移植が容易なんじゃないかと言われていました。
ということは、もしPS2にクライシスゾーンが発売されても、ブローバックしないということです。

待てど暮らせど発売されないクライシスゾーン

ガンコン1に続きガンコン2もブローバックせず、かなりがっかりしましたが、
それどころか、
クライシスゾーンが一向に発売されません。
風のうわさで、韓国では発売されたと聞きました。
しかし、しかし、結局日本では発売されることはありませんでした・・・。

そんな折に、海外通販で発見しました。
確か6000円ぐらいで悩んだ末、買いませんでした。
買えばよかったですね。。。

PS2版クライシスゾーンは今でも手に入る!しかし・・・

オークションなどにたまに出品はされています。
しかし今買っても・・・なんですよ。
と言いますには、
「ブラウン管テレビがないのでガンコンが使えない」
からなんです・・・。

Topgun2という液晶でも使えるガンコンはあるにはあるのですが・・・

なんと待望のブローバックもついています。
ところがところが・・・!
精度が今ひとつという意見が多いのと、価格がどんどん上がっているのが・・・!

一番安いときは数千円で買えたのですが、いまは万です。。。

ほんとに縁がなかったなあ?、と思います。

残念でした。

ガンシューの傑作。タイムクライシス

私はゲームが大好きだったので、
むしろ逆に、大学時代はゲーム断ち、をしていました。
一人暮らしでしたので、家にゲームを持ち込んでしまうと、ゲームばかりやってしまうと思ったんです。
(その結果テレビばかり見てましたが・・・笑)

衝撃的だったタイムクライシス

大学卒業間近に先輩たちと急速に仲が良くなり(遅 汗)
ゲームセンターに連れて行ってもらい、
そのときにかなり久しぶりにプレイしたゲームが「タイムクライシス」でした。
直感で面白そう、と思ったのですが、
直感は当たり、かなり面白いゲームだと思いました。
足元にペダルがあり、それを踏まないと隠れているので攻撃できない仕様です。
かなり画期的でした。

タイムクライシスがお家にやってきた?!

会社勤めをはじめて、自分でお金を稼いで、気兼ねなくゲームができるようになりました。
とは言え入社前のまだ給料をもらっていない段階で、入社祝いを使ってPS1を購入しました 笑
ゲーム断ち終了です。
しばらくすると、タイムクライシスがPS1にて発表になりました。
当時、CD-ROMが付いているPSの雑誌が出ており(雑誌名失念・・・)
その中にムービーが収録されていて、何度も繰り返し見た覚えがあります。
嬉しかった反面、なんか変だったので、不安だったのです。
ムービーは少し荒く、ギクシャクしていました。
でも、もう予約するしか無いじゃないですか 笑
発売日に手に入れてスタートさせたタイムクライシスはあの時ゲーセンで楽しんだものと遜色ないように見えました。
結局はあのムービーはエンコードに失敗していたのか、録画をコマの荒いビデオで撮ったのか、
品質が悪かっただけ、ということでした。

タイムクライシスの不満点

ムービーもサウンドも本当によくできていました。
家庭用ゲームもここまで来たんだ、と感動に値するレベルでした。
ところが、大きな不満がありました。。。

ブローバックしない

ということでした。
ブローバックというのは、銃がガシャンガシャンと動くことです。
ゲームセンターではよく故障していたりしました。
しかしこれがあるとナイトでは大違いなんです。
PS1用のガンコンはブローバック機能がついていませんでした。
ブローバックしなくてもいいので、振動だけでもつけてほしかったですね・・・。