データ貰うだけもらって、放置していたlivedoor clipsのデータを覗いてみました。
クローリングしてる暇があるなら…論文かいたら? | EDGE Datasets(研究用データセット)
ダウンロードと一緒に取り扱い説明がついています。そのままだとtagが文字列データとして1カラムに複数件入り使いにくいので、分割するようにしました。
#!/usr/bin/perl use strict; use Text::CSV_XS; my $csv = Text::CSV_XS->new({ binary => 1 }); my $i = 1; while (<>) { if ($csv->parse($_)) { my ($user_id, $url, $created_on, $tags) = $csv->fields; foreach my $tag (split(/\s/,$tags)) { print "\"$i\",\"$user_id\",\"$url\",\"$created_on\",\"$tag\"\n"; $i++; } } }
create table clips ( id int auto_increment primary key, user_id int not null, url varchar(255) not null, timestamp timestamp not null default CURRENT_TIMESTAMP, tag varchar(255) ) DEFAULT CHARSET=utf8; CREATE INDEX clips_key_tag on clips ( tag );
load data infile /vol/project/buzz/data/result.txt ignore
into table clips character set utf8 fields
terminated by ',' enclosed by '"' (id,user_id,url,@var1,tag)
set timestamp = str_to_date(@var1,"%Y-%m-%d %T");
mysql> select tag,count(*) from clips group by tag order by count(*) desc limit 50; +--------------------+----------+ | tag | count(*) | +--------------------+----------+ | javascript | 32520 | | web | 28946 | | google | 28036 | | css | 24224 | | yuiseki | 20466 | | ネタ | 19685 | | tips | 19265 | | Firefox | 18544 | | あとで | 17582 | | キャッシング | 17498 | | 2ch | 16980 | | ローン | 16452 | | blog | 15340 | | tool | 15297 | | あとで読む | 15111 | | まとめ | 14995 | | design | 14341 | | 未カテゴリ | 13444 | | 審査 | 13274 | | hatena | 12877 | | 金融 | 11651 | | Mac | 11540 | | YouTube | 11480 | | windows | 11415 | | ajax | 11401 | | perl | 11358 | | LDR | 10655 | | mobile | 10402 | | clip | 9774 | | software | 9617 | | flash | 9578 | | ruby | 9506 | | programming | 9475 | | ブラック | 9326 | | PHP | 9019 | | 社会 | 8984 | | news | 8725 | | toread | 8646 | | neta | 8643 | | アダルト | 8516 | | web2.0 | 8284 | | webdesign | 8257 | | カード | 8077 | | 動画 | 8074 | | 融資 | 8063 | | エロ | 7972 | | 仕事 | 7954 | | Webee | 7908 | | twitter | 7901 | | webサービス | 7748 | +--------------------+----------+
割とブックマークスパムっぽいのがあります。キャッシング、Webee、融資、金融。ある程度判定出来ないかなと思って考えてみました。コーパスとして使う場合、なるべくスパムをはじいておきたいです。スパムのタグは、タグの数に比べてURLの分散が少ないはずと仮説を立てて試してみました。
まずは、タグ名とカウント数を格納するテーブルを作り、データを流し込みます。
mysql> CREATE TABLE tags ( id int auto_increment primary key, tag varchar(255), cnt int, url_cnt int ) DEFAULT CHARSET=utf8; insert into tags (tag,cnt) select tag,count(*) from clips group by tag order by count(*) desc ;
perlでタグ付けされたURLの数を抽出して、tagsテーブルのurl_cntを更新するプログラムを書きます。
SQLはこんな感じです。
select count(*) url_cnt from ( SELECT url,count(*) FROM clips WHERE tag=? GROUP BY url ) AS A
結果は、以下の通りです。
mysql> select id,tag,cnt,url_cnt,url_cnt/cnt*100 rate from tags order by cnt desc limit 50; +----+--------------------+-------+---------+---------+ | id | tag | cnt | url_cnt | rate | +----+--------------------+-------+---------+---------+ | 1 | javascript | 32520 | 7277 | 22.3770 | | 2 | web | 28946 | 16843 | 58.1877 | | 3 | google | 28036 | 7948 | 28.3493 | | 4 | css | 24224 | 4424 | 18.2629 | | 5 | yuiseki | 20466 | 19721 | 96.3598 | | 6 | ネタ | 19685 | 11920 | 60.5537 | | 7 | tips | 19265 | 10031 | 52.0685 | | 8 | Firefox | 18544 | 4341 | 23.4092 | | 9 | あとで | 17582 | 15024 | 85.4510 | | 10 | キャッシング | 17498 | 1829 | 10.4526 | | 11 | 2ch | 16980 | 7106 | 41.8492 | | 12 | ローン | 16452 | 1764 | 10.7221 | | 13 | blog | 15340 | 8151 | 53.1356 | | 14 | tool | 15297 | 8404 | 54.9389 | | 15 | あとで読む | 15111 | 10971 | 72.6027 | | 16 | まとめ | 14995 | 5551 | 37.0190 | | 17 | design | 14341 | 6363 | 44.3693 | | 18 | 未カテゴリ | 13444 | 4990 | 37.1169 | | 19 | 審査 | 13274 | 1335 | 10.0573 | | 20 | hatena | 12877 | 3351 | 26.0231 | | 21 | 金融 | 11651 | 1413 | 12.1277 | | 22 | Mac | 11540 | 3817 | 33.0763 | | 23 | YouTube | 11480 | 4056 | 35.3310 | | 24 | windows | 11415 | 4375 | 38.3268 | | 25 | ajax | 11401 | 3350 | 29.3834 | | 26 | perl | 11358 | 3325 | 29.2745 | | 27 | LDR | 10655 | 8874 | 83.2848 | | 28 | mobile | 10402 | 4628 | 44.4914 | | 29 | clip | 9774 | 9364 | 95.8052 | | 30 | software | 9617 | 5395 | 56.0986 | | 31 | flash | 9578 | 3266 | 34.0990 | | 32 | ruby | 9506 | 2645 | 27.8245 | | 33 | programming | 9475 | 5095 | 53.7731 | | 34 | ブラック | 9326 | 930 | 9.9721 | | 35 | PHP | 9019 | 2406 | 26.6770 | | 36 | 社会 | 8984 | 5361 | 59.6728 | | 37 | news | 8725 | 6029 | 69.1003 | | 38 | toread | 8646 | 8371 | 96.8193 | | 39 | neta | 8643 | 6824 | 78.9541 | | 40 | アダルト | 8516 | 626 | 7.3509 | | 41 | web2.0 | 8284 | 4187 | 50.5432 | | 42 | webdesign | 8257 | 4184 | 50.6722 | | 43 | カード | 8077 | 767 | 9.4961 | | 44 | 動画 | 8074 | 3793 | 46.9780 | | 45 | 融資 | 8063 | 1034 | 12.8240 | | 46 | エロ | 7972 | 510 | 6.3974 | | 47 | 仕事 | 7954 | 4053 | 50.9555 | | 48 | Webee | 7908 | 110 | 1.3910 | | 49 | twitter | 7901 | 1914 | 24.2248 | | 50 | webサービス | 7748 | 4752 | 61.3320 | +----+--------------------+-------+---------+---------+
ほぼスパムオンリーのWebeeなんかは、1.39%。カードやキャッシング、ローン等も10%程度。仮説が割とあってそうです。率が低いタグのURL先のコンテンツを教師データに使って、ブログスパムのスパムフィルターとか作れそうですね。後で試してみようと思います。後は、グルーピングやカテゴライズ等にも使えそうです。
集合知プログラミングに書いていることが色々試せますね。ありがたい。
こんなに有益なデータを公開してくれたlivedoorには感謝感謝です。ただ一つだけ謝らないといけないことがあります。私は、livedoor clips使ったことありません。
See Also:
集合知プログラミングが凄すぎる件について