iakioの日記 RSSフィード

2010-08-01PostgreSQLのマニュアルでよく使われている英単語(をPostgreSQLで調べる) このエントリーを含むブックマーク

PostgreSQLの標準の全文検索機能に含まれるts_stat()関数を使って、ドキュメントでよく使われている英単語を調べてみます。

とにかくデータベースにドキュメントを入れてさえしまえば、htmlタグを除いたり、大文字小文字や複数形なんかはPostgreSQLが面倒見てくれます。

全文検索機能についてはこちらもご覧下さい。

=# create table pg90doc (path text primary key, contents text, vec tsvector);

テーブルはこんな感じ。実際のところ今回はtsvectorだけあればOK。

<?php
$contents = file_get_contents($argv[1]);
$dbh = new PDO("pgsql:dbname=db1 options=--client_encoding=iso88591");
$stmt = $dbh->prepare("insert into pg90doc values(?, ?, to_tsvector('english', ?))");
$rst = $stmt->execute(array($argv[1], $contents, $contents));

手抜きですが投入するプログラムはこんな感じ。client_encodingがiso88591になってるのと、to_vector()呼んでるあたりがポイントです。で、シェルから実行

$ for x in $(find postgresql-9.0beta3/doc/src/sgml/html -name '*.html'); do php importdoc.php $x; done

投入できたら、こんなSQLで単語の出現回数を調べることができます。

=# select rank() over (order by nentry desc),
 word, nentry from ts_stat('select vec from pg90doc');

 rank |               word                   | nentry
------+--------------------------------------+--------
    1 | use                                  |   6222
    2 | function                             |   5489
    3 | tabl                                 |   5085
    4 | name                                 |   4907
    5 | type                                 |   4605
    6 | valu                                 |   3826
    7 | data                                 |   3350
    8 | postgresql                           |   3131
    9 | pg                                   |   3101
   10 | set                                  |   3083
   11 | creat                                |   3006
   12 | databas                              |   2980
   12 | row                                  |   2980
   14 | return                               |   2802
   15 | column                               |   2750
   16 | index                                |   2651
   17 | oper                                 |   2575
   18 | command                              |   2551
   19 | server                               |   2463
   20 | queri                                |   2385
...

まあわりと普通な結果でした。何でか知らんけど38位にtomというのがいましたがw。

MSDNの上位だったretrieveは568位、specifiyは34位、elementは348位、containは57位、syntaxが214位でした。

他のドキュメントと単語の出現傾向を比較してみると面白いかもしれませんね。

SEAWorksSEAWorks2010/08/19 18:16見つけた。

KipKip2012/07/29 12:55That's 2 cleevr by half and 2x2 clever 4 me. Thanks!

jxwopxvdjxwopxvd2012/07/29 17:15DGLObQ <a href="http://auvcgjkqijse.com/">auvcgjkqijse</a>

ngkvwbtdqpngkvwbtdqp2012/07/30 12:54gMR4um , [url=http://bnzkmjirlzuv.com/]bnzkmjirlzuv[/url], [link=http://xghoiyukuphl.com/]xghoiyukuphl[/link], http://hmuzqwdhmnzd.com/

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20100801