さくらインターネットでTermExtractをCGI上で実行する
ようやくさくらインターネットで実行できそうになりましたので、CGIとつなげてみます。
#!/usr/bin/perl use strict; use warnings; $ENV{'HOME'}="/home/mlin"; $ENV{'LANG'}="ja_JP.UTF-8"; $ENV{'PATH'}="/home/mlin/perl5/bin:/home/mlin/local/bin"; $ENV{'LD_LIBRARY_PATH'}="/home/mlin/local/lib"; use lib '/home/mlin/perl5/lib/perl5'; use CGI; use MeCab; use TermExtract::MeCab; use Jcode; my $data = new TermExtract::MeCab; my $debug; my $q=new CGI; my @param=$q->param; my %HASH; for (@param){ $HASH{$_}=$q->param($_); $debug.=qq($_ , $HASH{$_} | ); } my $m = new MeCab::Tagger (""); my $s = ""; if (exists $HASH{'text'}){ $s=$HASH{'text'}; } my $n = $m->parseToNode($s); my $str=""; my $txtfile="in.txt"; while ($n = $n->{next}) { $str.=sprintf("%s\t%s\n", $n->{surface}, # 表層 $n->{feature} # 現在の品詞 ); } # 何故かEUCじゃないとTermExtractの結果が返らないのでEUCに変換. $str = &Jcode::convert($str,"euc","utf8"); # 出力モードを指定 # 1 → 専門用語+重要度、2 → 専門用語のみ # 3 → カンマ区切り my $output_mode = 3; # # 「形態素解析」済みのテキストファイルから、データを読み込み # 専門用語リストを配列に返す # (累積統計DB使用、ドキュメント中の頻度使用にセット) # my @noun_list = $data->get_imp_word($str,'var'); # 入力が変数 #my @noun_list = $data->get_imp_word("in.txte"); # 入力がファイル # # 専門用語リストと計算した重要度を標準出力に出す # my $result; foreach (@noun_list) { # 日付・時刻は表示しない next if $_->[0] =~ /^(昭和)*(平成)*(\d+年)*(\d+月)*(\d+日)*(午前)*(午後)*(\d+時)*(\d+分)*(\d+秒)*$/; # 数値のみは表示しない next if $_->[0] =~ /^\d+$/; my $str2 = &Jcode::convert($_->[0],"utf8","euc"); # 結果表示 $result .=sprintf "%-60s %16.2f\n", $_->[0], $_->[1] if $output_mode == 1; $result .=sprintf "%s\n", $_->[0] if $output_mode == 2; $result .=sprintf "%s<br>", $str2 if $output_mode == 3; } print "Content-type: text/html\n\n"; print "<html lang=\"ja\">\n"; print "<head>\n"; print " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; print " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n"; print " <meta http-equiv=\"Pragma\" content=\"no-cache\" />\n"; print " <meta http-equiv=\"cache-control\" content=\"no-cache\" />\n"; print " <meta http-equiv=\"expires\" content=\"0\" />\n"; print " <link rel=\"apple-touch-icon-precomposed\" href=\"\" />\n"; print " <title>Water</title>\n"; print "</head>\n"; #print "<body>$debug\n"; print "<body>\n"; print " <form action=\"index.cgi\" method=\"post\">\n"; print " <input type=\"submit\" value=\"OK\">\n"; print " <a href=\"./index.cgi\">reload</a><br>\n"; print " <textarea name=\"text\" rows=\"10\" cols=\"60\"></textarea><br>\n"; print " $result"; print " </form>\n"; print "</body>\n"; print "</html>\n";
まず、環境変数を設定します。
parseToNodeにテキストエリアからPOSTされてきたデータを渡しています。
最終的に結果を$resultという変数に代入して、
HTMLの中にPRINTしています。
これで、ようやく
文章入力→キーワードに分解
というCGIができました!
ディスカッション
コメント一覧
まだ、コメントがありません