Re: [hunspell-fi-devel] Perusmuodossa olevien sanojen kerääminen

Reijo Tomperi reijo.tomperi at pp2.inet.fi
Sun Oct 30 13:16:14 EET 2005


Harri Pitkänen wrote:

[ CC Jorille taas, ilmoittele jos haluat kopioiden loppuvan. ]


>Jotain tällaista tosiaan olisi hyvä tehdä, ja Jori on miettinyt samanlaista 
>järjestelyä. Mielestäni paras paikka tällaiselle olisikin Jorin tekemän 
>www-liittymän yhteydessä. Jorin liittymää ei voida siirtää hunspell-fi.org 
>-palvelimelle, koska meillä ei ole oikeuksia käyttää itse Hunspelliä siellä. 
>Mutta Reijon suunnittelema tietokanta voisi tarvittaessa sijaita siellä. 
>Tässä tosiaan tietokanna käyttäminen on järkevämpää kuin tavallisen 
>tekstitiedoston, koska sanoja jouduttaisiin sekä lisäämään että poistamaan 
>(ja merkitsemään jonkun varaamiksi) reaaliajassa. Tuosta tekijänoikeusasiasta 
>olisi tosiaan hyvä olla jonkinlainen selvä ja tiukasti muotoiltu maininta, 
>mutta lisäksi voisi olla järkevää, että liittymän kautta voisi syöttää vain 
>yhden sanan kerrallaan mikä vaikeuttaisi väärinkäyttöä. 
>
En kannata yhden sanan syöttöä kerrallaan. Mikäli palvelimen ja 
asiakkaan välissä on pientäkin viivettä, käyttöliittymän käyttö 
muodostuu tuskaksi, jos haluaa syöttää useita sanoja kerrallaan. Tämän 
olen saanut kokea esim. sourceforgeen projektia pystyttäessäni 
(projektin jokaisen ominaisuuden joutuu laittamaan yksi kerrallaan ja 
kaikkien asetuksien säätöön meni noin 3 tuntia).

Suosittelen sen sijaan sitä että tallennetaan syöttäjän ip ja vaikka 
myös syöttökerran id. Tällä tavalla vaikka ip:n valehtelisi, samalla 
kerralla syötetyt sanat pystyisi silti admin-liittymästä poistamaan 
yhdellä napinpainalluksella. Täten siis käyttäjille olisi käyttö 
helpompaa, eikä väärinkäyttö voisi olla sen pahempaa kuin yhden sanan 
liittymälläkään.

>Sisäänkirjautumisen 
>vaatiminen saattaisi kuitenkin jo mennä liiallisuuksiin, koska tuonne 
>kuitenkin kerättäisiin vain perusmuodossa olevia sanoja. Olisiko mahdollista 
>tehdä vaikka niin, että ohjelma rajoittaisi yhdestä IP-osoitteesta 
>syötettävien sanojen määrän muutamaan kymmeneen päivässä, ja aktiivisempien 
>käyttäjien kanssa sovittaisiin sitten erikseen tavasta, jolla tuon 
>rajoituksen voisi kiertää?
>  
>
Edelleen, en usko että rajoitukselle on tarvetta, koska voimme tehdä 
tehokkaita suodatuksia ja tarvittaessa poistaa kaikki tietystä ip:stä 
tulleet sanat. Tietty jos on pelkoa siitä että joku tekee 
DOS-hyökkäyksen täyttämällä palvelimen sanoilla, voimme tehdä rajauksen 
johonkin järjettömään määrään. Mutta toisaalta ip:n muuttaminen on melko 
helppoa, etenkin kun tässä tapauksessa ip:n voi vain valehdella. Voisin 
itse tehdä luultavasti parissa tunnissa ohjelman mikä pystyisi 
täyttämään kannan random-sanoilla, lähettäen niitä eri ip-osoitteista. 
Kysymys kuuluu, haluaako joku oikeasti tehdä sellaisen hyökkäyksen? Jos 
tuosta tulee ongelma, ainoa varma ratkaisu on käyttäjätunnus-järjestelmä 
ja tunnukset saa vain sitten kun joku ihminen on hakijan hyväksynyt.

>Kuitenkin olen sitä mieltä, että tällaista liittymää ei kannata ottaa käyttöön 
>ennen kuin olemme käyneet läpi Ispell-sanaston, jossa edelleen on tuhansia 
>lisäämättömiä sanoja. Tuo sanastohan on julkaistu GPL-lisenssillä, joten sitä 
>voimme käyttää aivan ongelmitta. Ja myöskin sitä ennen meidän pitää edetä 
>noiden verbien kanssa, koska muuten me hukkuisimme siihen verbitulvaan, joka 
>tuon liittymän kautta tulisi. Minulla on tarkoitus aloittaa verbien 
>luokittelu jo marraskuussa, ja jos viitsin käyttää siihen osan 
>joululomastani, niin ehkäpä tammi-helmikuussa voisi sitten ottaa tällaisen 
>liittymän käyttöön.
>  
>
Voisimme myös ottaa järjestelmän kehittäjien sisäiseen käyttöön ja sopia 
vaikka aluksi että vain substantiiveja ja/tai adjektiiveja saa syöttää. 
Samalla voisimme testata järjestelmää paremmin ennen sen julkistamista 
suuremmalle yleisölle. Voi olla parempi, että sanojen syöttäjä 
luokittelee sanat verbi/subst/adj/yms. luokituksella. Tällöin tosin 
voisimme kerätä verbejä jo nyt, vaikka taivutamme niitä vasta myöhemmin. 
Ispell-sanaston hyödyntäminen on tietysti myös hyvä idea tehdä ensin.

>Idea Reijolle: voisiko sitä sinun tekemääsi taivutusluokkien "arvausskriptiä" 
>muokata niin, että sen läpi voisi ajaa tuon Ispell-sanaston ja skripti 
>luokittelisi sanat valmiiksi todennäköisimpiin taivutusluokkiin ja 
>tallentaisi tuloksen tiedostoon? Siitä olisi sitten suhteellisen helppoa 
>käydä läpi sanoja luokka kerrallaan ja tarkistaa, että ne tosiaan menivät 
>oikeisiin luokkiin. Tätä voisi käyttää myös myöhemmin tuon www-liittymän 
>kautta saatujen sanojen esikäsittelyyn.
>  
>
Liitin toiseen tekemääni ohjelmaan jo päätteiden tunnistamisen. 
Lukuunottamatta paria poikkeusta ja sekoilua adjektiivien ja 
substantiivien välillä, se osaa tehdä kohtuullisen luotettavaa työtä 
(tai näin uskon) ja usein kertoa suoraan mihin luokitukseen sana kuuluu 
ja erityisesti osaa kertoa jos sanalle ei ole luokitusta, koska 
tietääkseni ainoat virheet ovat ylimääräiset positiiviset luokitukset. 
Ohjelmalla pystyy myös samalla testaamaan sanan eri taivutusmuotoja ja 
näin pystyy varmistamaan, että sana tuli oikeaan luokitukseen.

Tuon ohjelman heikkoudet ovat todellakin se, että se vaatii hunspell, 
python, php ja hf-luolistat-ohjelmat ja http-palvelimen. Ja se että sitä 
voi käyttää vain yksi kerrallaan (koska se käyttää kiinteitä 
tiedostonimiä mm. .dic ja .aff tiedostoissa, jotka hf-luolistat 
generoi). Nykyversiolla voi myös tarkistaa vain yhden sanan kerrallaan, 
mutta voisin yrittää jalostaa siitä sellaisen version, että se osaa 
tarkistaa useita eri sanoja taivutuksineen samanaikaisesti. Tällöin 
järjestelmästä voisi tehdä ainakin cronissa ajettavan version, jolloin 
sanat syötettäisiin tietokantaan ja käytäisiin sitten cron-ajastetusti 
esim. kerran minuutissa läpi ja talletettaisiin muokattuina taas 
kantaan, josta syöttäjä voisi käydä ne katsomassa (joko 
ip-tunnistuksella ja aikaleimalla pelkästään omat sanansa, tai sitten 
kaikkien syöttämät).

Totesin myös, että tuo ensimmäinen arvausohjelmani on melko turha, koska 
se tekee huomattavasti epäluotettavampaa työtä kuin pelkkä 
sanaluokituksen päätteiden tarkastelu. Mutta voisin tuosta toisesta 
ohjelmastani jalostaa version, joka toimii pelkän php-tiedoston avulla 
ja ainoastaan listaa ne luokitukset, jotka sanan päätteen perusteella 
täyttävät luokituksen säännöt.

Tuo toinen ohjelmahan toimii siten, että sille syötetään esim sana 
perusmuodossa ja sen jälkeen muutamassa taivutusmuodossa, esim: 
"koti,kotia,kotien,kodeissa". Tämän perusteella se tulostaa seuraavan 
listauksen (suluissa sanat joista tuli oikoluvun mukaan virhe):

subst-i2 FAILED (kodeissa)
subst-i2-av1 FAILED (kodeissa)
subst-i2-av3 FAILED (koti,kotia,kotien,kodeissa)
subst-i2-av5 FAILED (koti,kotia,kotien,kodeissa)
subst-i3 FAILED (kodeissa)
subst-i3b FAILED (kodeissa)
subst-p FAILED (kodeissa)
subst-p-av1 OK
subst-p-av5 FAILED (koti,kotia,kotien,kodeissa)

Ilman hunspellia, listana tulisi siis pelkästään lista kaikista 
luokituksista jotka tuossa näette. Muut luokitukset hylättiin jo ennen 
hunspell-tarkistusta sanan päätteen perusteella. Ohjelmaa on tietysti 
mahdollista tarkentaa lisäämällä siihen sääntöjä. Siinä myös hyvin 
mahdollisesti on vielä bugeja. Ihmetyttää itseäni esimerkiksi se, miksi 
sana perusmuodossaankin on merkitty kirjoitusvirheeksi parin 
taivutusmuodon mukaan.

Eli jos joku osaa tehdä esimerkiksi Ispellin sanalistasta listan, jossa 
sanaa on taivutettu vähintään "koti,kotia,kotien,kodeissa" tyylisesti. 
Voin yrittää tehdä ohjelman joka lukee tämän listan ja tekee 
kohtuullisen luotettavat arvaukset sanojen luokituksista ja siis samalla 
tarkistaa, että sana oikeasti taipuu luokituksen mukaan siten miten 
listaan on kirjoitettu. Listan olisi hyvä olla lajiteltuna 
adjektiiveihin ja substantiiveihin, jotta voidaan automaattisesti karsia 
myös positiiviset sekaannuksen näiden ryhmien välillä. Arvioihin, että 
ohjelma osaa tehdä 65% oikean luokitusvalinnan, 20% todeta että sanalle 
ei ole luokitusta ja 15% antaa useamman ehdotuksen (yleensä 2 tai 3). 
(Nämä luvut saatu noin 50 sanan testiryhmällä)

Kiinnostaisi myös tietää mitenkä te testaatte ja varmistatte että sanan 
luokitus on mennyt oikein? Tämä ohjelmahan on yritys yhdistää testaus ja 
sanan luokitus siten, että käyttäjän tarvitsee suorittaa vain testi-osio 
ja ohjelma hoitaa luokituksen automaattisesti.



More information about the devel mailing list