OpenTaal / opentaal-hunspell

πŸ‡³πŸ‡±πŸ‡§πŸ‡ͺπŸ‡ΈπŸ‡· Dutch dictionary for spelling checker Hunspell and Nuspell
https://opentaal.org
Other
30 stars 5 forks source link

Gebruik in Postgres FTS: invalid affix flag "O"/"s"/... with "long" flag value #19

Closed hanszoons closed 2 months ago

hanszoons commented 2 months ago

Ik probeer jullie hunspell-bibliotheek te implementeren als een PostgreSQL full text search dictionary. De ingebouwde dictionary voor nederlands is heel rudimentair qua stemming (snowball). Postgres ondersteunt evenwel ook Ispell en varianten:

Dictionaries for a large number of languages are available from Ispell. Also, some more modern dictionary file formats are supported β€” MySpell (OO < 2.0.1) and Hunspell (OO >= 2.0.2).

De klassieke Nederlandstalige Ispell dictionary waar ze naar verwijzen werkt prima in Postgres, maar is best oud (spelling β€˜96). De recentste die ik werkend krijg, vond ik op Postgres Pro, dat is version 2.00b2 van OpenTaal.

Ik probeer nu al enige tijd de nieuwste versie van OpenTaal werkend te krijgen, maar Postgres klaagt bij het aanmaken van de dictionary over foutieve affix flags.

Bijvoorbeeld:

ERROR: invalid affix flag "O" with "long" flag value

Postgres geeft niet aan waar in het .dict-bestand hij die fout vond. Maar met een handmatig zoeken, vind ik op regel 72151 van nl.dic I\/O. Haal ik die regel bij wijze van test weg, dan verdwijnt ook de foutmelding.

Er volgt echter meteen de volgende als ik de dictionary opnieuw probeer toe te voegen:

ERROR: invalid affix flag "s" with "long" flag value

Die krijg ik niet zelf weggewerkt. Kunnen jullie misschien verklaren waar deze foutmeldingen over gaan? Zijn dit fouten die oplosbaar zijn, of is dit een beperking in de implementatie van Postgres?

(Ter info: Het eigenlijke .affix-bestand wordt wel geaccepteerd in combinatie met een oudere .dict, maar geeft vreemde resultaten in de uitvoering. Alle anderen die ik nog kan vinden zijn herverpakte versies van jullie (bv uit de 2.10-versies), die dezelfde fouten geven.)

hanszoons commented 2 months ago

Het probleem blijkt dat Postgres de \/ (escaped slash?) niet herkend als escaped maar dit interpreteert als een flag. Door alle regels die \/ bevatten te wissen uit de dict (een vijftiental) accepteert Postgres de bijgewerkte dictionary.

Dat is dus geen probleem van/voor jullie maar van Postgres.