iakioの日記 RSSフィード

2010-08-16

PostgreSQLのマニュアルでよく使われている英単語(ry)その3

16:38 |  PostgreSQLのマニュアルでよく使われている英単語(ry)その3 - iakioの日記 を含むブックマーク はてなブックマーク -  PostgreSQLのマニュアルでよく使われている英単語(ry)その3 - iakioの日記

最初にPHPでやった時は文字コードをiso8859-1からUTF-8に変換したのに、前回は何でやらなかったんだろうと思ってたら、実はデータベースエンコーディングがSQLASCIIだったというヘマをやってました。

で、UTF-8DBにインポートしてみようと思ったのですが、pg_read_file()が文字コード指定できないうえに内部でpg_verifymb()されているために、テータベースエンコーディング以外のファイルを読み込もうとするとエラーになってしまいます。せめてtextじゃなくbyteaを返してくれればいいんですが。

この関数をこんな目的で使おうとしているのが世界で一人かもしれないけど。

で、仕方ないんでpg_verifymb()はコメントアウトして(w)、あとpg_read_file()にはbyteaを返してもらうようにします。textとbyteaは内部表現は一緒なはずなので、

=# create function pg_read_file_bytea(text, bigint, bigint) returns bytea language internal as 'pg_read_file';  

と、無理矢理再利用してあげればOK。byteaをconvert_fromで変換します。

=# insert into pg84doc
with
 s1 as (select (pg_stat_file('html/' || pg_ls_dir)).*, pg_ls_dir from pg_ls_dir('html')),
 s2 as (select pg_ls_dir, convert_from(pg_read_file_bytea('html/' || pg_ls_dir, 0, size)::bytea, 'iso88591') as contents from s1)
select pg_ls_dir, contents, to_tsvector('english', contents) from s2;

さて日本語でもやってみてとの声が聞こえてきたので、textsearch_jaでやってみました。トップ30は以下の通り。

=# select rank() over (order by nentry desc),
 word, nentry from ts_stat('select vec from pg84jdoc') limit 30;
 rank |     word     | nentry
------+--------------+--------
    1 | する         |  39986
    2 | れる         |  13053
    3 | 場合         |   5466
    4 | 使用         |   5228
    5 | できる       |   5129
    6 | この         |   4791
    7 | いる         |   4624
    8 | なる         |   4609
    9 | 関数         |   4493
   10 | ある         |   4487
   11 | 型           |   3905
   12 | 1            |   3765
   13 | 列           |   3459
   14 | テーブル     |   3424
   15 | 値           |   3277
   16 | postgresql   |   2998
   17 | データ       |   2866
   18 | pg           |   2860
   19 | くださる     |   2427
   20 | データベース |   2370
   21 | 2            |   2330
   22 | 指定         |   2326
   23 | 設定         |   2318
   24 | 行           |   2314
   25 | 的           |   2217
   25 | sql          |   2217
   27 | その         |   2213
   28 | コマンド     |   2163
   29 | リリース     |   2141
   30 | 問い合わせ   |   2081
(30 rows)

pgsqlpgsql2010/08/16 22:56付属語や代名詞がトップに来ちゃってますね。Mecabのおかげで、そういった属性は判断できるので、ストップワード扱いで最初から弾いてしまう手もあるかもしれません。

stzrswgtobstzrswgtob2013/12/20 00:23cmuzmqptuhsftrm, <a href="http://www.ovqjcgiaff.com/">ousdfyojda</a>

lywndnejaelywndnejae2013/12/22 04:59wtmqmqptuhsftrm, http://www.gogdgeitkg.com/ elrzzzmuvq

bnrshrtazabnrshrtaza2013/12/26 07:42gyyolqptuhsftrm, <a href="http://www.bpuybnosqy.com/">bkolmtsemd</a>

ychwgqkgfcychwgqkgfc2014/03/19 23:20anmeiqptuhsftrm, <a href="http://www.fxkwmddkmc.com/">rtgdbrqqic</a> , [url=http://www.zboyralwnn.com/]gjafdryuig[/url], http://www.pcpxifkqhj.com/ rtgdbrqqic

ulrinawivpulrinawivp2014/12/04 00:56ltbblqptuhsftrm, <a href="http://www.qoundtiwkf.com/">fxipookxru</a> , [url=http://www.yafobygjoz.com/]yuvgbjfijl[/url], http://www.kcmmsyzpsj.com/ fxipookxru

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