Building And UsingA Weighted Speller
This document and the hfst speller setup in our infra was inspired by
Weights in spellers
Weight classes
The weights should be restricted to signed integers in the range
To make the interaction of the weights more predictable, we group types of
- 10^0 (0-9)
- Tiny adjustments, nit-picking
- 10^1 (10-90)
- Smaller adjustments
- 10^2 (100-900)
- Regular edits
- 10^3 (1000-9000)
- Heavy-handed weights
- 10^4 (10000-...)
- Most heavy demotion - do not suggest. Although not yet
It is possible to use fractions (the weighted hfst format allow any real as
Each higher weight class will usually override ordering based on weights from
Weight sources and total weight calculation
Sources:
- frequency corpus + default weight for unseen word forms
- tags
- morphological structure (compounding & derivation)
- error model edits
The actual weight for any given suggestion is the sum of all the weights.
Korleis vi lagar forslag i hfst
- feilskrive ord inn
- vi bruker ein feilmodell til å generera mange ulike forslag
- kvart forslag får ei vekt ut i frå kva slags endringar vi gjer i høve til
- kvart forslag får ei vekt ut i frå kva slags endringar vi gjer i høve til
- alle forslag blir sjekka mot stavekontrollen
- ikkjeeksisterande ord blir fjerna
- resten av forslaga blir sorterte etter vekt
- lista med forslag blir vist til brukaren
(I prinsipp fungerer alle stavekontrollar etter denne modellen. Det som skil dei
Døme: vi vil gå frå gøølli til gööli
I redigeringsavstand er det 3 operasjonar: ø -> ö, ø -> ö, l -> 0, dvs.
- øø -> öö, vekt 0.2
Attåt l->0 -endringa med vekt 1.0 (standardvekt for standardreglane) blir
Utrekning av straffepoeng i vektinga av rettekandidatar:
regel vekt ------------- øø -> öö 0.2 + l -> 0 1.0 ----------------- Samla vekt = 1.2 =================
Vi kan testa feilmodellen med denne kommandoen (errmodel.default.hfst er
hfst-lookup errmodel.default.hfst eller - for å sjekka genererte forslag for eitt ord: echo "gøølli" | hfst-lookup errmodel.default.hfst | less
Då får vi slike forslag:
gøølli göölli 0.200195 gøølli göølli 0.500000 gøølli gøölli 0.500000 gøølli gøøllï 0.500000 gøølli gööllï 0.700195 gøølli gööllï 0.700195 gøølli gööllï 0.700195 gøølli øølli 1.000000 ... gøølli gööli 1.200195 # forslag nr 989 av i alt 873 169 forslag.
eksempler dublering: luhte -> luhtte eksempler forenkling: buohkkat -> buohkat eksempler substitusjon: mañis -> maŋis eksempler omkast: geakti -> geatki
Stavekontroll i nye infra
I mappa
er det no to nye filer:
-
strings.default.txt
- words.default.txt
I tillegg til:
- editdist.default.txt
words.default.txt
Namnet på fila har tre delar, vi kan ha ei anna
Denne fila inneheld heile ord (døme: jih)
jih:jïh 0.0
Formatet er:
ordinn:ordut<tab>vekt
Mellomrom i staden for tabulator gjev syntaksfeil.
Vekting: Talverdiar frå 0.0 og oppover.
strings.default.txt
øø:öö 0.2 ää:ææ 0.2
Syntaksen er den same som for words.default.txt.
editdist.default.txt
Denne fila inneheld ei liste over teikn og bokstavar som ein ikkje vil ha
I lag med stavekontrolltransduceren blir denne fila brukt for å laga ein feilmodell for å retta alle feil med redigeringsavstand 1 og 2. Feilmodellen
- hent ut alle symbol frå stavekontroll-fst-en
- fjern alle symbol som er på meir enn eitt teikn
- fjern alle enkeltteikn som er lista opp i fila editdist.default.txt
- lag ein modell med redigeringsavstand 1 for symbola som vi no står att med
- for symbolpar/bokstavpar som er lista opp i editdist.default.txt med anna
- for symbolpar/bokstavpar som er lista opp i editdist.default.txt med anna
errmodel.default.hfst
Denne fila blir laga slik:
- lag ein enkel feilmodell frå editdist.default.txt
- slå i hop (union) med feilmodellen frå strings.default.txt
- repeter fst-en frå førre punkt for å dekkja redigeringsavstand 2, med fri
- slå i hop (union) med feilmodellen frå words.default.txt
Ein kan testa feilmodellen slik det er skildra ovanfor.
Kommandoer
Om ein står i katalogen $GTLANG/tools/spellcheckers/fstbased/hfst/ og vil
voikkospell -p . -d sma-x-standard -s
Dersom ein har installert stavekontrollen med sudo make install er det nok
voikkospell -d sma-x-standard -s
Det er lett å køyra ein heil tekst gjennom stavekontrollen:
$ echo "Gueli lij bueries" | preprocess | voikkospell -p . \ -d sma-x-standard -s W: Gueli S: Gurli S: Garli S: Gulen S: Vulli S: Vuelie C: lij W: bueries S: buerie S: Dåeries S: fuerie S: tjueries S: suepies
For meir informasjon om korleis ein bruker voikkospell, bruk kommandoen
man voikkospell