2006年04月30日

成分解析 plug-in

そろそろ賞味期限だと思う成分解析ソフトウェア(Clock氏作成)のPukiWiki plug-in版をGWのPHP自習課題として作成しました。

ご利用の際はファイル名の末尾から0.0.1.txtを取り除いてから自分のPukiWikiのpluginフォルダにアップロードしてください。

また、自分のPukiWikiのサイトからこのプラグインを使う場合は、分析結果を掲載したいサイトを編集して、任意の場所に

#seibunkaiseki(分析したい言葉)
と記入してください。

なお、ブロックプラグインなので、上記だけを書いた1行を用意するか、テーブルのセル一つ丸々に上記を書いた場合しか動作しません。

なお、コードはψ(プサイ)氏

をPHPで実装しただけのモノで、一応ソート順まで含めてオリジナルと完全互換となっています。

また、公開に当たり

にある難読化処理をを用いて行っています。

現状の公開方法で問題あるようでしたらご連絡下さい<関係各位

というか、個人的にはなんで難読化しないといけないのかいまいち解らない(仕組み見てがっかりさせないため?)のですが、ルールなので致し方ありません。

また、XSS対策として入力文字はhtmlspecialchars関数を用いてサニタイズっぽいことをしていますが、漏れがあったらごめんなさい。

なお、難読化しているので、個人での修正はかなり面倒かと思います。
バグなど見つけたらひとまず使用を中止したうえでご連絡頂ければ幸いです。

あと、いろいろと罠にはまってしまって、この程度のプラグインを作成するのにあり得ないほどの時間を掛けてしまいました。

っていうか、PHPの数値の扱いに脱帽。

int(32bit整数 必ず符号付き)とfloatの明示しない場合の切り換えタイミングで1時間近く悩みましたし、floatで巨大な数を扱おうとすると「INF(無限)」とかって帰って来るのを知らずに2時間近くはまったり・・・(;´д`)ノ

ぶっちゃけ、ランダム関数だけでもかなり良い時間掛かってます。

あと、ψ(プサイ)氏の解説ページで

また,N=1とする.

与えられた文字列のNバイト目を取得する.これをstrとする.
strを((N and 3) << 3)だけ左シフトする.
codeに上の結果を足す.
Nに1を足す
1に戻る
こうして,4バイトの数codeを得る.

とあったので、素直に
for($i=1;$i<=strlen($string);$i++){
 $code += array_shift(unpack('C',substr($string,$i-1,1))) << (($i & 3) << 3);
なんて言うコードを書いてここも盛大にはまりました(苦笑)
(ここも完成形が解るまで3時間以上掛かったような気がします)

とりあえず自己満足はできましたので、使う方は素晴らしいアイデアのソフトを作成されたClock氏と解析情報をまとめてくださったψ(プサイ)氏に感謝の念を送りつつ、自己責任にてご自由にお使い下さい( ̄▽ ̄)ノ

あと、配布NGかもしれませんので、このプラグインは転載厳禁でお願いします。

また、成分分析の表示結果ブロックには「seibun」というクラス名をつけていますので、/skin/pukiwiki.css.php辺りで

.seibun {
background-color:#EEEEFF;
}
などと書くことによって、背景色をつけるなど色々できるかと思います。

【更新履歴】

Ver.0.0.1 2006/04/30
 ・「,」が含まれて居るときに「,」以降が途切れてしまうバグ修正
 ・アップロードしてあるファイルの文字エンコードをEUCに変更

Posted by Takuchan at 2006年04月30日 17:20 | トラックバック(0)

> なんで難読化しないといけないのか

ソースを一般公開できなくなった理由は……
ニワンゴ版の成分解析に、
 (C)Clock
という表記があるという点から察してくださいませ。

Posted by: 魔界の仮面弁士 at 2006年05月15日 04:34

あ〜、察しました(苦笑)

それから、非互換のソート直したいんですが、時間も需要もない気がするので多分当分ペンディングです。

Posted by: Takuchan at 2006年05月16日 00:17

はじめまして。
成分解析のまとめWikiを今作っていますが、そちらのサイトにリンクしていいでしょうか?

Posted by: keikyu at 2006年07月22日 13:46

> keikyuさん

問題ありません。
ご自由にどうぞ〜

Posted by: Takuchan at 2006年07月23日 00:43