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) {