[voikko] tokenize isoille dokumenteille

Harri Pitkänen hatapitk at iki.fi
Wed Jan 6 12:40:50 EET 2016


On Wednesday 06 January 2016 12:13:32 Harri Pitkänen wrote:
> > 1.5k noin 0.01s
> > 25k noin 1s
> > 30k noin 2s
> > 40k noin 3s
> > 60k noin 5s
> > 65k noin 7s
> > 115k noin 20s
> > 270k noin 2min 8s eli 128s
> > 415k noin 5min 20s eli 320s
> 
> Tämä näyttää viittaavan melko selvästi siihen, että aikaa kuluu
> neliöllisesti syötteen pituuteen nähden (pituuden kaksinkertaistaminen
> nelinkertaistaa ajankäytön). Teoriassa tämän algoritmin aikavaativuuden
> pitäisi olla lineaarinen, joten bugihan siellä jossain on.
> 
> Yritän korjailla loppuviikon aikana.

Taisin löytää ongelman syyn: libvoikon funktiossa voikkoNextTokenCstr tehdään 
UTF-8-stringin dekoodausta vähän liikaa eli jokaisen tokenin alusta koko 
annetun tekstin loppuun. Tämä on teoriassa tarpeellistakin, koska rajapinta on 
sellainen, ettei tuota dekoodattua stringiä voida säilyttää missään kutsujen 
välillä, ja toisaalta ei voida olla varmoja etteikö se koko tuhansien merkkien 
kokonaisuus voisikin olla yhtä sanaa.

Ihan triviaalia korjausta tuohon ei siis ole tehtävissä, mutta pienellä 
väännöllä tuon pitäisi taipua pahimmassakin tapauksessa vaativuuteen n log(n) 
ja tyypillisessä tapauksessa lineaariseksi. Palaan asiaan...

Harri


More information about the voikko mailing list