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