今日で、ほぼ完成しました。
精度も速度もだいぶ上がりました。
満足のいくものができたので、
そろそろベクター様に投稿しようと思います。
スクリプトはベクター様で公開されるまで非公開にします。
苦節一週間。
長かったなぁ。
明後日のゼミが自分の番なので
いまから本業に全力投球します。
がんばるおー
藤倉崇晃のなぜつくったし。
かけだしプログラマーの創作活動ブログ!
主にレコメンドエンジンをフリー(オープンソース)で配布します。
アルゴリズムの研究報告なども行う予定!
2015年9月29日火曜日
2015年9月28日月曜日
形態素解析器のいらないキーワード抽出ツール(4)
今日もこれです。
過去記事のスクリプトは削除しました。
だいぶ速くなり、10000字の文書を1~2分で処理できるようになりました。
(ある文字列のスコア) = (出現回数)×(文字列の長さ)
と定め、
キーワードの集合から(文字列1)と(文字列2)を取り出し、
条件1 : (文字列1)&(文字列2)のスコア > (文字列1)のスコア
条件2 : (文字列1)&(文字列2)のスコア > (文字列2)のスコア
の二つを満たしたとき、
(文字列1)&(文字列2)を新たにキーワードの集合に加えます。
(文字列1) : 形態素
(文字列2) : 解析器
(文字列1)&(文字列2) : 形態素解析器
こんな感じです。
過去記事のスクリプトは削除しました。
だいぶ速くなり、10000字の文書を1~2分で処理できるようになりました。
(ある文字列のスコア) = (出現回数)×(文字列の長さ)
と定め、
キーワードの集合から(文字列1)と(文字列2)を取り出し、
条件1 : (文字列1)&(文字列2)のスコア > (文字列1)のスコア
条件2 : (文字列1)&(文字列2)のスコア > (文字列2)のスコア
の二つを満たしたとき、
(文字列1)&(文字列2)を新たにキーワードの集合に加えます。
(文字列1) : 形態素
(文字列2) : 解析器
(文字列1)&(文字列2) : 形態素解析器
こんな感じです。
2015年9月27日日曜日
形態素解析器のいらないキーワード抽出ツール(3)
今日も昨日に引き続き、キーワード抽出ツールを作りました。
前回、「機種依存文字」によって解析が止まると書きましたが、
それは間違いで、正しくは、「特殊文字」でした。
今回のソースコードでは特殊文字は削除します。
あとはアルゴリズムをいじって精度が少し上がりました。
頑張ってベクター様での公開を目指します。
2015年9月26日土曜日
形態素解析器のいらないキーワード抽出ツール(2)
今日は昨日に引き続き、キーワード抽出ツールを作りました。
今日のは完全に自動です。
面倒臭さ軽減!
速度も上昇し、ミスも減ったかな・・・
1000字くらいの記事なら、サクっと解析できます。
しかし「★」とか機種依存文字(?)が文章中にあると、解析が終わらなくなるんです。
まだまだですね。
今日のは完全に自動です。
面倒臭さ軽減!
速度も上昇し、ミスも減ったかな・・・
1000字くらいの記事なら、サクっと解析できます。
しかし「★」とか機種依存文字(?)が文章中にあると、解析が終わらなくなるんです。
まだまだですね。
2015年9月25日金曜日
形態素解析器のいらないキーワード抽出ツール
今作っているものです。
というか一旦は完成しました。
しかしめっちゃ遅いから、まだベクター様で公開できる段階じゃないんです。
あとたまにミスる。
それでなぜ形態素解析器のいらないツールにしたかったか?
なぜなら自分が使うとき面倒だったからです!
2015年9月24日木曜日
HTML::TagParserというPerlモジュールでスパイダリングしてみたよ!
今日は、スパイダリングのスクリプトを作成しました。
起点となるページ(デフォルトでYahoo!ニュース)に飛んで、
同じドメインのページをスパイダリングします。
たぶん幅優先探索になっていると思われます。
とりあえず pタグの innerText を抜きまくって、.txtで保存します。
HTML::TagParserモジュール以外でも作れると思いますし、
もしかすると別のモジュールの方がいいのかもしれません(´・ω・`)ショボーン
実際、Yahoo!ニュースを起点に2000ページほどスパイダリングしたんですが、
かなり時間かかりました。
でも頑張って書いたので、下記をご笑覧ください。
▼Perlスクリプト▼
#!/usr/bin/perl
use strict;
use warnings;
use URI::Fetch;
use HTML::TagParser;
use Encode;
my @contents = ();
print "スパイダリングの起点となるウェブページのURLを入力してください。(半角英数)\n";
print "※デフォルトでYahoo!ニュースが設定されています。\n";
chomp(my $start = <STDIN>);
if($start eq ""){
$start = "http://news.yahoo.co.jp/";
}
my %links = ($start,1);
my @pages =($start);
print "起点からスパイダリングするページ数を指定してください(半角数字)\n";
chomp(my $intensity = <STDIN>);
print "スパイダリングしています。\n";
foreach my $page ( @pages ){
my $html = HTML::TagParser->new( $page );
my @a = $html->getElementsByTagName( "a" );
foreach my $elem ( @a ) {
my $url = $elem->attributes->{href};
if(defined($url)){
if( $url =~ /$start/ && !defined($links{$url})){
$links{$url}++;
$intensity--;
push(@pages,$url);
}
}
}
if($intensity<=0){
last;
}
}
print "スパイダリング完了。\n";
print "pタグのテキストデータを抽出しています。\n";
foreach my $page ( @pages ){
my $html = HTML::TagParser->new( $page );
my @p = $html->getElementsByTagName( "p" );
foreach my $elem ( @p ) {
my $str = decode('UTF-8', $elem->innerText);
my $text = encode('Shift_JIS', $str);
push(@contents,$text);
}
}
unlink './learningData.txt';
open(DATAFILE, ">> ./learningData.txt");
print DATAFILE "@contents\n";
close DATAFILE;
exit;
2015年9月23日水曜日
教師なし形態素解析
辞書なしで形態素解析できないか悩んでいたら、下記を発見しました。
『ベイズ階層言語モデルによる
教師なし形態素解析』
NTTコミュニケーション科学基礎研究所
持橋大地
http://chasen.org/~daiti-m/paper/nl190segment-slides.pdf
教師なしってことは、
学習用データを与えれば、
勝手に学習して、
学習後にサクサクっと形態素解析してくれるってことでしょうか。
テラオモシロス。
同じ原理でデマのパターン抽出とかもできそうだな。
連休最終日にオモロイものをみた。
登録:
投稿 (Atom)