namazu-ml(avocado)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
wakatigaki with perl (Re: HTML detection)
Satoru Takabayashi <satoru@xxxxxxxxxxxxx> wrote:
>性能
>
> % time kakasi -w < manual.html > /dev/null
> real 0m1.877s
> user 0m1.640s
> sys 0m0.240s
>
> % time perl wakati.pl kakasidict < manual.html > /dev/null
> real 0m3.980s
> user 0m3.780s
> sys 0m0.200s
>
> どなたか高速化に挑戦してみませんか?
変数を含むパターンマッチに o モディファイアをつけたら
real 0m3.271s
user 0m3.020s
sys 0m0.250s
になりました。この性能なら KAKASI/ChaSen を使わずに自前でわかち書
きを行う線も無茶ではなさそうです。送り仮名を処理するとかなり遅くな
るので省いていますが。もっと速くならないかな?
ところで、これとは別にどなたか Perl の XS モジュール対応の高速わか
ち書きエンジンを作りません? 多くの方々に感謝されること間違いなしで
す :-)。
できれば kakasidict にある『北陸先端科学技術大学院大学』のような長
い複合語 (?) を細かく分解したり、あるいは大きなわかち書きと細かい
わかち書きを併記するオプションがあると嬉しいです。
動作例
通常動作
% echo "北陸先端科学技術大学院大学" | wakati
北陸先端科学技術大学院大学
細かいわかち書き
% echo "北陸先端科学技術大学院大学" | wakati -s
北陸 先端 科学 技術 大学院 大学
併記
% echo "北陸先端科学技術大学院大学" | wakati -b
北陸先端科学技術大学院大学 {北陸 先端 科学 技術 大学院 大学}
…他力本願で申し訳ないのですが、どなたかぜひ。
-- Satoru Takabayashi
45,46c45,46
< # if ($content =~ /\G($KANJI(?:$KANJI|$HIRAGANA)*)(\s*)/gc) {
< if ($content =~ /\G($KANJI+)\s*/gc) {
---
> # if ($content =~ /\G($KANJI(?:$KANJI|$HIRAGANA)*)(\s*)/ogc) {
> if ($content =~ /\G($KANJI+)\s*/ogc) {
52c52
< /gcx)
---
> /ogcx)
55,56d54
< } elsif ($content =~ /\G(\s+)/gc) {
< print $1;
79c77
< while ($tmp =~ /\G($CHAR)/gc) {
---
> while ($tmp =~ /\G($CHAR)/ogc) {