ゲスト[ログイン]

おおいしゆうのASミュージックスコア登録CGI

おおいしゆうが日々のフォルテール演奏の記録を書き続けるCGI(日記じゃないです。blogでもないです)

工画堂スタジオ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』OHP

パルフェ10周年ポータル パルフェ10周年寄せ書き企画

Aozora Melodyのパーフェクト動画公開中!

日 (今日 最終日)
日 ~ 日 (全部)
フォルテール総合情報サイト
ASミュージック
ポータル

同曲演奏状況
CSV登録
工画堂スタジオ&ヤマサ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』応援中!
工画堂スタジオ 『ソルフェージュ~La finale~』OHP
曲名スコア記録曲名スコア記録
天使の歌う小夜曲66774(96.69%)普通69063羽根のブランケットにつつまれて63776(100.00%)普通63776
poetrylove take_033276(93.80%)普通34479LOVE★Drivin'115683(93.68%)好調120675
PostgreSQL8から全文検索機能が付いたとかでいつか対応させようと思っているのですが、日本語を扱うにはtextsearch_jaなるプラグイン?が必要なようで、入れてみました。
が、これが相当苦戦することに…。FreeBSDだからか、EUC基本だからか…

まず、構文解析にMeCabというツールが必要なのでそれからインストール。上のサイトからmecab-0.97.tar.gz(本体)とmecab-ipadic-2.7.0-20070801.tar.gz(辞書データ)を拾ってきてコンパイル…しようとすると、ちゃんと入っているはずなのにiconvが無い、と言われてエラーで止まります。
仕方ないのでオプション付けるかMakefileに無理やりCFLAGS=-I/usr/local/includeとLDFLAGS=-L/usr/local/libを書き加えてやったら一応うまくいきました。make checkはエラーで止まります(爆)。make installもエラーで止まります…が、install.shの実行権限をchmod 755で与えてやれば出来ました。

辞書ファイルの方は得に問題なくインストール完了。EUCモードにしてあります。このCGI自体はSJISなのですが、どうもPostgreSQLの全文検索はEUCかUTF-8のみ対応っぽいのでいずれコンバートしなければならなさそうです。

で、textsearch_jaですが、こっちの方がずっと辛かったです。textsearch_ja-8.3.1.tar.gzを拾ってきてPostgreSQLのソースツリーの、postgresql-8.3.3/contrib以下に展開、そのディレクトリに行ってmakeしろ…と書いてありますが、まずmakeではだめでgmakeでなければなりませんでした。更にいろいろ無いといわれて困るので、Mecabの時と同様にPostgreSQL-8.3.3/src/Makefile.globalのCFLAGSに-I/usr/local/includeを、LDFLAGSに-L/usr/local/libを書き加えました。それでgmake install出来たのですが(その後使いたいデータベースそれぞれに対してpsql -f /usr/local/pgsql/share/contrib/textsearch_ja.sql データベース名、を実行しなければならない)、どうもテストの結果が公式サイトの例と異なっていて、英語モードでしか解析していない模様です。
散々悩んでtextsearch_ja.cのソースとにらめっこした結果、どうも日本語混じりの単語がPostgreSQL標準のパーサでblank扱いになっているのが原因のようです(ソースによるとwordかhword_partかhwordでなければならない)。そっちの直し方はまるで分からないので、仕方ないのでソースを改造してblankでも日本語だと判断するようにしたら一応動きました。本当のblank文字と判断が付かなくなってしまうので仕方なく全部ASCII文字だったらblankだと思うという泣けるコードも入れてあります。具体的には
#define IS_JWORD(t) ((t) == WORD_T || (t) == PARTHWORD || (t) == HWORD)
これを→
#define IS_JWORD(t) ((t) == WORD_T || (t) == PARTHWORD || (t) == HWORD || (t) == SPACE)
こう変更し、

int isascii_s(const char *t,int len)
{
int i;
for(i=0;i<len;i++)
{
if(t[i] && !isascii(t[i])){return 0;};
};
return 1;
};
こんな関数を作っておいてja_gettokenの
if (ignore(parser->node->feature))
lextype = SPACE;
の直後に
else if(isascii_s(*t,*tlen))
lextype = SPACE;
を入れてみました。

一応これで公式サイトの例と同じ結果は出ているみたいなので多分大丈夫なのではないかと…

実際に組み込んでみるのはもう少し後の話になりそうです。出来ればこのCGIの対応と談話室の自作プログラム化を年内~正月休み明けまでにはやりたいなぁ。



フォルテールはtake0→LD→小夜曲の小夜曲入りコース。66774は2ミスより高いのですがラスト転けていてミス回数が3なのでやり直して正則2ミスも出してます。他2曲は問題なし。LD結構調子よかったです。
名前: ひとこと:
この記事へのトラックバックURL: https://www.asmusic.jp/ASHARD/score/tb.cgi/yu-oishi/20081124手動トラックバック