Traducción de: http://sourceforge.net/docman/display_doc.php?docid=29374&group_id=143754
por Amos Batto, <amosbatto EN yahoo.com>, www.runasimipi.org

hunspell

NOMBRE
DESCRIPCIÓN
OPCIONES GENERALES
OPCIONES PARA SUGERENCIAS
OPCIONES PARA PALABRAS COMPUESTAS
OPCIONES PARA CREACIÓN DE AFIJOSOPCIONES PARA CREACIÓN DE AFIJOS
OTRAS OPCIONES
Análisis morfológica
Quitando sufijos dobles
Clases de afijos extendidos
Homónimos
Prefijo—dependencias de sufijo
Circumfijos
Compuestas
Codificación de caracteres
VEA TAMBIÉN


NOMBRE


hunspell − formato de diccionarios Hunspell y archivos de afijos

DESCRIPCIÓN


Hunspell(1) requiere dos archivos para definir la lengua en que esté corrigendo la ortografía. El primer archivo es un diccionario conteniendo palabras de la lengua, y el segundo archivo es un archivo de afijos que define lo que significa las flags (banderas) en el diccionario.

Un archivo diccionario (*.dic) contiene una lista de palabras, uno por cada línea. La primera línea de diccionarios (excepto de diccionarios personales) contiene el conteo aproximado de palabras (para el tamaño de la tabla hash con memoria optimizada). Cada palabra puede ser seguido por una barra oblicua ("/") y uno o más flags (banderas), que representan afijos o atributos especiales. Palabras en el diccionario pueden contener barras oblicuas con la sintaxis "". Por ejemplo:

2
gato/P
"GNU/Linux"/P

Por defecto el formato de la flag es un carácter solo (normalmente alfabético). En un archivo diccionario Hunspell hay también un campo opcional de la morfología separado por un tabulador.

Descripciones de morfología tiene un formato personalizado.

Un archivo de ajifos (*.aff) puede contener muchos atributos opcionales. Por ejemplo, SET es usado para definir la codificación de caracteres usados en los archivos de diccionario y afijos. TRY define los caracteres que cambian en las sugerencias. REP define una tabla de reemplazos para correcciones de caracteres en el modo de sugerencias. PFX y SFX definen clases de prefijos y sufijos nombrados con las banderas de afijos.

El ejemplo siguiente de un archivo de afjijos define la codificación UTF-8. Sugerencias de "TRY" difiere de la palabra mal-deletreada con una letra o un apóstrofo. Con estas definiciones de REP, Hunspell puede sugerir la forma correcta de la palabra cuando la palabra mal-deletreado contenga f en lugar de ph y viceversa.


SET UTF-8
TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ’
REP 2
REP f ph
REP ph f
PFX A Y 1
PFX A 0 re .
SFX B Y 2
SFX B 0 ed [^y]
SFX B y ied y


Hay dos clases de afijos en este diccionario. Clase A define un prefijo ‘re-’. Clase B define dos sufijos ‘-ed’. El primer sufijo puede ser añadido a una palabra si el ultimo carácter de la palabra no es 'y'. El segundo prefijo puede ser añadido a palabras terminadas con 'y'. (Vea detalles después.) El archivo diccionario siguiente usa estas clases de afijos.


3
hello
try/B
work/AB


En este ejemplo, todas estas palabras sera aceptado: hello, try, tried, work, worked, rework, reworked.

OPCIONES GENERALES


SET codificación


Define la codificación de palabras y morfemas en los archivos de afijos y diccionario. Valores posibles son:
UTF-8, ISO8859−1 − ISO8859−10, ISO8859−13 − ISO8859−15, KOI8-R, KOI8-U, microsoft-cp1251, ISCII-DEVANAGARI.


FLAG valor


Define el tipo de flag (bandera). Por defecto el tipo es un carácter de ASCII extendido (8-bit). Parámetro ‘UTF-8’ define flags de caracteres de codificación Unicode UTF-8. El valor ‘long’ define flags de caracteres ASCII extendido. El valor ‘num’ define flags de números decimales. Flags de este tipo numeran de 1 a 65535, y las flags son separado por comas. BUG: la flag UTF-8 no sirve en la plataforma ARM.


COMPLEXPREFIXES


Quita prefijos dobles (pero sólo quitar sufijos simples) para lenguas aglutinativas con un sistema de escritura de derecha a izquierda.


LANG código_de_lengua


Define el código de lengua. En Hunspell puede ser códigos específicos activados por el código LANG. Actualmente hay códigos específicos az_AZ, hu_HU, y TR_tr en Hunspell (vea el código fuente).


AF número_de_alias_de_vectores_flag


AF vector_flag


Hunspell puede substituir conjuntos de flags por un número natural en las reglas de afijos (compresión de alias). Esto es un ejemplo de compresión de alias:


3
hello
try/1
work/2


Definiciones de AF en el archivo de afijos:


SET UTF-8
TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ’
AF 2
AF A
AF AB


También vea ejemplos de pueblas/alias.*

Nota: Defina las FLAG antes de los definiciones AF.

Nota II: Use la herramienta makealias en la distribución Hunspell para comprimir los archivos aff y dic.


AM número_de_alias_de_descripción_morfológica


AM descripción_morfológica


También Hunspell puede substituir descripciones morfológicas por un número natural en las reglas de afijos (compresión de alias). Vea ejemplos de pruebas/alias.*

OPCIONES PARA SUGERENCIAS


TRY caracteres


Hunspell puede sugerir la forma correcta de la palabra cuando estos difiere de la forma mal-deletreada por un carácter de TRY. El parámetro de TRY difiere mayúsculas de minúsculas.


NOSUGGEST flag


Palabras marcadas con flag NOSUGGEST no sera sugerido. Flag propuesta para palabras de groserías y maldiciones


MAXNGRAMSUGS número


Define el número de sugerencias de guion-n ('--'). Un valor de 0 apaga sugerencias de guion-n.


NOSPLITSUGS


Apaga sugerencias de palabras divididas por guion-n ('--').


SUGSWITHDOTS


Añade punto(s) a sugerencias si la palabra termina en punto(s). (No use con diccionarios de OpenOffice.org, porque OpenOffice.org tiene un mecanismo automático de expansión de puntos.)


REP número_de_definiciones_de_reemplazos


REP búsqueda reemplazo

De

Define información especifica de la lengua en el archivo de afijos (.aff) con una tabla de reemplazos. El primer REP es la cabecera de esta tabla que define el número de definiciones de REP en las líneas siguientes. Con esta tabla, Hunspell puede sugerir las formas correctas por los fallos típicos cuando la forma incorrecta difiere por más que una letra de la forma correcta. Por ejemplo, esto es una tabla de reemplazos posibles en inglés para corregir consonantes mal-deletreados:


REP 8
REP f ph
REP ph f
REP f gh
REP gh f
REP j dg
REP dg j
REP k ch
REP ch k


Nota: Es muy útil definir los reemplazos por los fallos más comunes. Con REP puede poner una prioridad más alta a un subconjunto de sugerencias de TRY (la lista de sugerencias empieza con sugerencias de REP).

Nota II: Tabla de reemplazos puede ser usado para verificación más estricta de palabras compuestas (Si la generación de palabras compuestas no es permitido, o si ellos son también palabras sencillas con un fallo típico, vea CHECKCOMPOUNDREP).


MAP número_de_definiciones_de_mapa


MAP cadena_de_caracteres_relacionados


Define información especifica de la lengua para caracteres que sea relacionados (i.e., más cerca de otros caracteres que no estén en el conjunto) en una tabla de MAP en un archivo de afijos (.aff). Con esta tabla, Hunspell puede sugerir las formas correctas de palabras que escoja la letra incorrecta de un conjunto relacionado más que una vez en una palabra.

Por ejemplo, puede crear una mapa para relacionar "ü" (umlaut alemán) con "u" regular. En este caso, Hunspell puede corregir la palabra alemán "Fruhstuck" como "Frühstück".


MAP 1
MAP uü

OPCIONES PARA PALABRAS COMPUESTAS


BREAK número_ de_ definiciones_break


BREAK caracter(es)


Define puntos donde dividan palabras y verifiquen la ortografía de partes de palabras. Esto es útil para crear palabras compuestas separadas por un carácter o un cadena de caracteres (por ejemplo, guion en inglés y alemán o guion y guion-n en húngaro). Muchas veces guiones son puntos malos de divisiones porque palabras compuestas con guiones puede contener partes que no sean validos. Con BREAK, Hunspell puede verificar la ortografía de ambos lados de palabras compuestas, dividiendo la palabra en guiones y guiones-n:


BREAK 2
BREAK -
BREAK -- # guion-n


La divisiones son recursivas, tal que "foo-bar", "bar-foo" y "foo-foo--bar-bar" serían partes validos.

Nota: COMPOUNDRULE es mejor (o será mejor) para manejar guiones y otros caracteres o cadenas de caracteres que juntan palabras compuestas. Usa BREAK, si quiere chequear palabras con guiones o otros caracteres para juntar palabras y no hay tiempo o posibilidad para describe regalas precisas de palabras compuestas con COMPOUNDRULE. (COMPOUNDRULE todavía sólo ha manejado la última sufija de la palabra compuesta.)

Nota II: Para verificación de la ortografía de la línea de comando, define parámetros de WORDCHARS:
WORDCHARS -- (Vea ejemplos pruebas/break.*)


COMPOUNDRULE número_de_definiciones_de_compuestas


COMPOUNDRULE patrón_de_compuesta


Define patrones de palabras compuestas especiales con un sintaxis como regex. El primer COMPOUNDRULE es un cabecera con el número de definiciones de COMPOUNDRULE en las líneas siguientes. Patrones de palabras compuestas consisten de flags de compuestas y los meta-caracteres de asterisco y signos de interrogación. Una flag seguida por un ‘*’ coincide con 0 o más palabras marcadas con esta flag de compuesta. Una flag seguida por un ‘?’ coincide con 0 o 1 palabras marcadas con esta bandera compuesta. Vea ejemplos de pruebas/compuestas*.*

Nota: Meta-caracteres ‘*’ y ‘?’ sólo sirve con las flags por defecto de tipo 8-bit y UTF-8.

Nota II: Flags de COMPOUNDRULE todavía no son compatibles con COMPOUNDFLAG, COMPOUNDBEGIN, ...etc. (Use estas flags en palabras diferentes).


COMPOUNDMIN número


El tamaño mínimo de palabras en palabras compuestas. El valor por defecto es 3 letras.


COMPOUNDFLAG flag


Palabras marcadas con COMPOUNDFLAG puede ser en palabras compuestas (excepto de caso que la palabra es más corta que COMPOUNDMIN). Afijos con COMPOUNDFLAG también permiten compuestos de palabras afijadas.


COMPOUNDBEGIN flag


Palabras marcadas con COMPOUNDBEGIN (o con un afijo señalado) puede ser el primer elemento en palabras compuestas.


COMPOUNDLAST flag


Palabras marcadas con COMPOUNDLAST (o con un afijo señalado) puede ser el último elemento en palabras compuestas.


COMPOUNDMIDDLE flag


Palabras marcadas con COMPOUNDMIDDLE (o con un afijo señalado) puede ser elementos medios en palabras compuestas.


ONLYINCOMPOUND flag


Sufijos marcados con ONLYINCOMPOUND solamente puede ser en palabras compuestas (elementos-fuge en alemán, German, fogemorfemas en sueco). Flag ONLYINCOMPOUND también sirve con palabras (vea tests/onlyincompound.*).


COMPOUNDPERMITFLAG flag


Prefijos son permitido en el comienzo de palabras compuestas, sufijos son permitido en el fin de palabras compuestas por defecto. Afijos con COMPOUNDPERMITFLAG puede ser adentro de palabras compuestas.


COMPOUNDFORBIDFLAG flag


Sufijos con esta flag no permite que la palabra afijada sea compuesto.


COMPOUNDROOT flag


COMPOUNDROOT marca las raíces de palabras compuestas en el diccionario. (Actualmente es sólo usado en el código especifico de húngaro.)


COMPOUNDWORDMAX número


Define el conteo máximo de palabras en una palabra compuesta. (Por defecto es infinito.)


CHECKCOMPOUNDDUP


No permite duplicación adentro de palabras compuestas (e.g., foofoo).


CHECKCOMPOUNDREP


No permite que la palabra sea compuesto, si (generalmente mal-deletreada) palabra compuesta puede ser un palabra no-compuesta con un fallo de REP. Útil en lenguas con ortografía que sea compuesto fácilmente.


CHECKCOMPOUNDCASE


No permite caracteres mayúsculas en una palabra en una palabra compuesta.


CHECKCOMPOUNDTRIPLE


No permite que la palabra sea compuesto si la palabra compuesta contiene letras triples (e.g., foo|ox o xo|oof). BUG: No funciona con bytes-múltiples en codificación UTF-8 (sólo funciona con caracteres ASCII de 7-bit).


CHECKCOMPOUNDPATTERN número_de_definiciones_de_checkcompoundpattern


CHECKCOMPOUNDPATTERN caracteres_comienzo caracteres_fin


No permite que la palabra sea compuesto, si el primer palabra en la palabra compuesta termina con caracteres_fin, y la próxima palabra comienza con caracteres_comienzo.


COMPOUNDSYLLABLE silabas_máximas vocales


Necesita para reglas especiales de palabras compuestas en húngaro. El primer parámetro es el número máximo de sílabas que puede ser en un compuestos, si palabras en compuestos son mas que COMPOUNDWORDMAX. El segundo parámetro es la lista de vocales (para calcular silabas).


SYLLABLENUM flags


Necesita para reglas especiales de palabras compuestas en húngaro.

OPCIONES PARA LA CREACIÓN DE AFIJOS


PFX flag producto número


PFX flag quitando prefijo condición descripción_morfológica


SFX flag producto número


SFX flag quitando sufijo condición descripción_morfológica


Un afijo es un prefijo o un sufijo pegado a las palabras-raíces para construir otras palabras. Puede definir clases de afijos con un número arbitrario de reglas. Clases de afijos son marcado con flags de afijos. La primera línea de la definición de una clase de afijos es la cabecera. Los campos de una cabecera de una clase de afijos:

(0) Nombre de opción (PFX o SFX)

(1) Flag (nombre de la clase de afijos)

(2) Producto (permiso para combinar prefijos y sufijos). Valores posibles: Y (sí) o N (no)

(3) Conteo de líneas siguientes con definiciones de reglas.


Campos en las reglas de afijos:

(0) Nombre de opción

(1) Flag

(2) Caracteres quitados del comienzo (en reglas de prefijos) o del fin (en reglas de sufijos) de la palabra

(3) afijo (opcionalmente con flags de clases continuadas, separado por una barra oblicua "/")

(4) condición

Condición es un expresión regular simplificada que debe ser cumplido antes que el afijo pueda ser añadido. Si la condición es un punto solo, no hay una condición para chequear. Si usa un punto en una cadena de caracteres, el punto indica cualquier carácter. Caracteres adentro corchetes indica que el carácter pueda ser cualquier de los caracteres listados. (Un guion adentro corchetes sólo indica el carácter de un guion; no indica un ámbito de caracteres como en expresiones regulares). Un circunflejo (^) indica que el carácter no pueda ser cualquier de los caracteres listados.

(5) Descripción morfológica especializada

OTRAS OPCIONES


CIRCUMFIX flag


Use esta flag cuando el palabra no puede tener un prefijo sin un sufijo o viceversa. Si es un prefijo, indica que sólo puede añadirlo si la palabra también contiene un sufijo marcado con una flag CIRCUMFIX, o viceversa si es un sufijo.


FORBIDDENWORD flag


Esta flag marca formas prohibidas de palabras. Porque formas afijadas son también prohibido, puede sustraer un subconjunto del conjunto de palabras afijadas y compuestas.


KEEPCASE flag


Prohíbe formas mayúsculas de palabras marcadas con la flag KEEPCASE. Útil para ortografías especiales (a menudo medidas y monedas son minúsculas en textos mayúsculas) y sistemas de escritura (e.g., minúsculas en caracteres IPA).

Nota: Con la declaración CHECKSHARPS, palabras con el s sostenido y la flag KEEPCASE puede ser mayúsculas, pero formas mayúsculas de estas palabras no puede contener s sostenido, solo SS. Vea el ejemplo de germancompounding en el directorio tests de la distribución Hunspell.


LEMMA_PRESENT flag

na~~n

Por lo general hay palabras de diccionario como lemmas en la salida de la análisis morfológica. A veces palabras del diccionario no son lemmas, pero son bases afijadas (no reales) y bases virtuales. En este caso, lemmas (bases reales) necesitan indicar que son lemmas en su descripción morfológica, y necesitan prohibir lemmas no reales en la análisis morfológica.


NEEDAFFIX flag


Esta flag marca bases virtuales en el diccionario. Sólo formas afijadas de estas palabras puede ser aceptado por Hunspell, excepto que sea un homónimo o un afijo de cero. NEEDAFFIX funciona también con combinaciones de prefijos y sufijos. (Vea tests/pseudoroot5.*)


PSEUDOROOT flag


Ya no recomendado. (Nombre previo de la opción NEEDAFFIX.)


WORDCHARS caracteres


Añade caracteres validos adicionales para palabras. WORDCHARS extiende las cadenas chequeado por la interfaz de comando de línea. Por ejemplo, punto, guion, guion-n, números, y el signo por ciento son caracteres validos de palabras en húngaro.


CHECKSHARPS


La letra SS en palabras mayúsculas (en aleman) puede ser s sustenido mayúscula (ß). Hunspell puede manejar este caso especial con la declaración CHECKSHARPS en verificación de ortografía y sugerencias. (Vea también la flag KEEPCASE y el ejemplo tests/germancompounding)

Análisis morfológica


Las reglas Hunspell de afijos tiene un campo opcional de descripción morfológica. Hay un campo opcional aparecido en el archivo de diccionario, separado or un tabulador:


 palabra/flags morfología


Define un diccionario y archivo de afijos con información morfológica:

Archivo de afijo test.aff:


 SFX X Y 1
SFX X 0 able . +ABLE


Archivo de diccionario test.dic:


 drink/X [VERB]


Archivo de prueba test.txt:


 drink
drinkable


Prueba:


 $ hunmorph test.aff test.dic test.txt
drink: drink[VERB]
drinkable: drink[VERB]+ABLE


Puede ver en el ejemplo que la análisis morfológica concatena los campos en el estilo item and arrangement.

Quitando sufijos dobles


El algoritmo original de Ispell quitaba sólo un sufijo, pero Hunspell puede quitar dos sufijos.

Quitando sufijos dobles es una mejoramiento significante en el manejo de el número inmenso de sufijos en lenguas aglutinativas.

Extendiendo el ejemplo previo añadiendo un segundo sufijo (class de afijos Y será la continuación del sufijo 'able'):


 SFX Y Y 1
SFX Y 0 s . +PLUR
SFX X Y 1
SFX X 0 able/Y . +ABLE


Archivo del diccionario test.dic :


 drink/X [VERB]


Archivo de test.txt:


 drink
drinkable
drinkables


Prueba:


 $ hunmorph test.aff test.dic test.txt
drink: drink[VERB]
drinkable: drink[VERB]+ABLE
drinkables: drink[VERB]+ABLE+PLUR


Teóricamente con sufijos dobles, Hunspell puede reducir el número de reglas para sufijos a la raíz cuadrada. En nuestro practico, podemos haber elaborado la morfología de húngaro sin quitando sufijos dobles.

Nota: En la gramática del pre-procesador Hunlex, las divisiones de sufijos pueden ser no sólo dobles, pero también múltiples.

Clases extendidas de ajifos


Hunspell puede manejar más de 65000 clases de afijos. Hay dos sintaxis nuevas para flags en archivos de afijos y diccionarios.

FLAG long
Usa flags de dos caracteres:


 FLAG long
SFX Y1 Y 1
SFX Y1 0 s 1


Palabra en el diccionario con las flags Y1, Z3, F?:


 foo/Y1Z3F?


FLAG num
Usa flags de números separados por comas:


 FLAG num
SFX 65000 Y 1
SFX 65000 0 s 1


Ejemplo de diccionario:


 foo/65000,12,2756

Homónimos


Un diccionario Hunspell puede contener elementos repetidos que son homónimos:


 work/A [VERBO]
work/B [SUSTANTIVO]


Un archivo de afijos:


 SFX A Y 1
SFX A 0 s . +SG3
SFX B Y 1
SFX B 0 s . +PLUR


Archivo de prueba:


 works


Prueba:


 > works
work[VERBO]+SG3
work[SUSTANTIVO]+PLUR


Esta característica también es una manera de prohibir combinaciones ilegales de afijos en casos difíciles.

Dependencias Prefijo--Sufijo

n

Un efecto secondario interesante de quitando afijos múltiples es que el tratamiento apropriado de circumfijos es ahora gratis. Por ejemplo, en húngaro superlativos son formado por el prefijo de leg- y el sufijo de -bb añadido a la base del adjetivo. Un problema con arquitectura de uno nivel que no haya una manera de hacer prefijos y sufijos interdependientes, y por eso formas incorrectas son reconocidos como validas, i.e., *legvén = leg + vén ‘old’. Hasta la introdución de grupos, un tratamiento especial del superlativo tenía que ser integrado en el código previo de Hunspell. Esto seria legitimo por un caso solo, pero dependencias prefijo—sufijo son muy comunes en patrones derivativos con cambios de categoria (cf. inglés payable, non-payable pero *non-pay o drinkable, undrinkable pero *undrink). En otras palabras, el prefijo un- es sólo legitimo si la base drink tiene el sufijo -able. Si la regla de una afijo es sólo verificado con la base, no hay una manera para expresar esta dependencia y el sistema no va a generar suficiente o va a generar demasiado.

En el próximo ejemplo, clase R de sufijos será una continuación de clase P de prefijos:


PFX P Y 1
PFX P 0 un . [prefijo_un]+
SFX S Y 1
SFX S 0 s . +PL
SFX Q Y 1
SFX Q 0 s . +3SGV
SFX R Y 1
SFX R 0 able/PS . +DER_V_ADJ_ABLE


Diccionario:


2


drink/RQ

[verbo]

drink/S

[sustantivo]


Análisis morfológica:


> drink
drink[verbo]
drink[sustantivo]
> drinks
drink[verbo]+3SGV
drink[sustantivo]+PL
> drinkable
drink[verbo]+DER_V_ADJ_ABLE
> drinkables
drink[verbo]+DER_V_ADJ_ABLE+PL
> undrinkable
[prefijo_un]+drink[verbo]+DER_V_ADJ_ABLE
> undrinkables
[prefijo_un]+drink[verbo]+DER_V_ADJ_ABLE+PL
> undrink
Unknown word. (palabra desconocida)
> undrinks
Unknown word. (palabra desconocida)

Circumfijos


Afijos condicionales implementados por una clase de continuación no son suficiente por circumfijos, porque un circumfijo es un afijo en la morfología. Necesita también la opción CIRCUMFIX para análisis correcta de la morfología.


# circumfijos: ~ obligar combinaciones de prefijos y sufijos
# superlativo en Hungarian: leg- (prefijo) Y -bb (sufijo)
# nagy (bueno), nagyobb (mejor), legnagyobb (lo mejor), legeslegnagyobb (lo más mejor)
CIRCUMFIX X
PFX A Y 1
PFX A 0 leg/X .
PFX B Y 1
PFX B 0 legesleg/X .
SFX C Y 3
SFX C 0 obb . +COMPARATIVO
SFX C 0 obb/AX . +SUPERLATIVO
SFX C 0 obb/BX . +SUPERSUPERLATIVO


Diccionario:


1


nagy/C

[MN]


Análisis:


> nagy
nagy[MN]
> nagyobb
nagy[MN]+COMPARATIVO
> legnagyobb
nagy[MN]+SUPERLATIVO
> legeslegnagyobb
nagy[MN]+SUPERSUPERLATIVO

Palabras compuestas


Componiendo palabras libremente disminuye la precisión de la reconocimiento de palabras y análisis morfológica. Aunque ispell permite que las bases pueden ser intercambiando en palabras compuestas, esto no restricta suficiente las posibilidades. Por ejemplo:


# archivo de afijos
COMPOUNDFLAG X


2
foo/X
bar/X


Con este caso, foobar y barfoo son ambas palabras aceptadas.

Hunspell ha mejorado esto con la introducción de direcciones de componer, i.e., características léxicas que especifica si una base puede ocurrir en el comienzo o fin de palabras compuestas. Esto, sin embargo, todavía no fue suficiente para manejar los patrones intricados de palabras compuestas, y no digamos ya las reglas idiosincrasicas de guiones en algunas lenguas.

Actualmente el algoritmo de Hunspell permite cualquier forma afijada de palabras que son marcado como miembros posibles de compuestos. Hunspell mejoró esto, y sus reglas de verificación recursiva posibilitan la implementación de los compuestos intricas de húngaro. Por ejemplo, usando las opciones COMPOUNDWORDMAX, COMPOUNDSYLLABLE, COMPOUNDROOT, y SYLLABLENUM, la regla húngara de ‘6--3’ puede ser implementado. En una otra ejemplo en húngaro, sufijos derivativos a menudo modifican las propriedades de compuestos. Hunspell permite las flags de compuestos en los afijos, y hay dos flags especiales (COMPOUNDPERMITFLAG y COMPOUNDFORBIDFLAG) para permitir o prohibir el compuesto de las derivaciones.

Sufijos con esta flag prohibe el compuesto de la palabra afijado.

También hay algunos características en Hunspell para manejar los compuestos alemanes.


# Compuestos alemanes

# define la lengua para manejar el s sostenido de alemán
LANG de_DE
# flags de compuestos
COMPOUNDBEGIN U
COMPOUNDMIDDLE V
COMPOUNDEND W
# Prefijos son permitido al comienzo de compuestos,
# sufijos son permitido al fin de compuestos por defecto:
# (prefijo)? + (raíz) + (afijo)?
# Afijos con COMPOUNDPERMITFLAG puede ser adentro de compuestos.
COMPOUNDPERMITFLAG P
# para foge-morfemas alemanes (elemento-fuge)
# Consejo: ONLYINCOMPOUND no es requerido en todos lugares, pero el
# procesamiento será un poco más rápido con ONLYINCOMPOUND.
ONLYINCOMPOUND X
# prohibir caracteres mayúsculas en los limites de palabras compuestas
CHECKCOMPOUNDCASE
# para manejar elementos-fuge con guiones (Arbeits-)
# guion será una palabra especial
COMPOUNDMIN 1
WORDCHARS -
# reglas y fogemorfemas para ‘Arbeit’
SFX A Y 3
SFX A 0 s/UPX .
SFX A 0 s/VPDX .
SFX A 0 0/WXD .
SFX B Y 2
SFX B 0 0/UPX .
SFX B 0 0/VWXDP .
# un sufijo para 'Computer'
SFX C Y 1
SFX C 0 n/WD .
# para prohibir excepciones (*Arbeitsnehmer)
FORBIDDENWORD Z
# prefijo de guion para compuestos con guion (Arbeits-Computer)
PFX - Y 1
PFX - 0 -/P .
# prefijo para cambiar mayúscula a minúscula
# circumfijo para la posición correcta en compuestos
PFX D Y 29
PFX D A a/PX A
PFX D Ä ä/PX Ä
.
.
PFX D Y y/PX Y
PFX D Z z/PX Z


Ejemplo de diccionario:


4
Arbeit/A-
Computer/BC-
-/W
Arbeitsnehmer/Z


Palabras compuestas aceptables con el ejemplo previo:


Computer
Computern
Arbeit
Arbeits-
Computerarbeit
Computerarbeits-
Arbeitscomputer
Arbeitscomputern
Computerarbeitscomputer
Computerarbeitscomputern
Arbeitscomputerarbeit
Computerarbeits-Computer
Computerarbeits-Computern


Compuestos no aceptables:


computer
arbeit
Arbeits
arbeits
ComputerArbeit
ComputerArbeits
Arbeitcomputer
ArbeitsComputer
Computerarbeitcomputer
ComputerArbeitcomputer
ComputerArbeitscomputer
Arbeitscomputerarbeits
Computerarbeits-computer
Arbeitsnehmer


Sin embargo, esta solución todavía no es perfecta, y será reemplazado por un algoritmo para chequear patrones que es integrado con el búfer de entrada. Patrones describiendo compuestos viene como un recurso separado de entrada que refiere a las propriedades de partes constituentes (e.g., el número de silabas, flags de afijos, y el manejo de guiones). Estos patrones son verificado con partes posibles de compuestos, chequeando si son bien formados.

Codificación de caracteres


Problemas con la codificación 8-bit.

Ambos Ispell y Myspell usen codificación de caracteres ASCII 8-bit que es un grande deficiencia en términos scalables. Aunque una lengua como húngaro tiene un conjunto de caracteres ASCII estandartes (ISO 8859-2), no se permite una implementación completa de convenciones de la ortografía húngara. Por ejemplo, el signo ’--’ (guion-n) no existe en este conjunto de caracteres, aunque es el símbolo oficial para delimitar cláusulas parentéticas y puede ser usado en palabras compuestas como un guion 'grande' especial.

MySpell tiene algunas tablas de codificación 8-bit, pero hay algunas lenguas sin codificación 8-bit estándar. Por ejemplo, muchas lenguas africanas tienen caracteres no latinos o latinos extendidos.

Asimismo, usando la ortografía original de algunas nombres extranjeros como Ångström o Molière es recomendado por la norma de ortografía húngara. Desde que los caracteres ’Å’ y ’è’ no son parte de ISO 8859-2, cuando ellos son combinados con caracteres solamente en ISO 8859-2 (como -bo=l elativo, -to=l alativo o -ro=l delativo con agudo doble), estos resultan en palabras (como Ångströmro=l o Molière-to=l.) que no puede ser codificado usando sólo uno conjunto ASCII de codificación.

Hace mucho tiempo estos problemas en relación de codificacion ASCII 8-bit ha sido reconocido por defensores de Unicode. Desafortunadamente, cambiando a Unicode (e.g., UTF-16) requeriría mucha optimización de código y dañaría la eficiencia del algoritmo. El algoritmo Dömölki usado para chequear condiciones de afijos utiliza un array de caracteres de 256 bytes que crecería a 64K con codificación Unicode. Desde que generando afijos para lenguas aglutinativas puede crear cientos de tales arrays (en el caso de húngaro, hay cerca de 300 o más porque almacenamiento redundante de patrones de afijos idénticos en estructura mejora eficiencia), cambiando a Unicode tiene costos muy altos de recursos. Sin embargo es claro que hay ventajas de una aplicacion verdaderamente multilingüe. Por eso, nuestro plan por mucho tiempo ha sido extender la arquitectura en esta dirección.

Una solución híbrida.

Recientemente implementamos con éxito manejo de Unicode que sea eficaz en términos de memoria y tiempo de procesamiento. En codificación de caracteres que no sea UTF-8, Hunspell funciona con los algoritmos 8-bit originales, pero con archivos de diccionario y afijos en UTF-8, hunspell manipula las cadenas y chequea las condiciones con un algoritmo híbrido que abarque Unicode:

Afijos y palabras son guardado en UTF-8. Durante el análisis ellos son manejado en UTF-8 por lo general, pero en verificación de condiciones y la generación de sugerencias ellos son convertido a UTF-16.

El algoritmo de Dömölki es usado por la almacenamiento y verificación de caracteres 7-bit ASCII (ISO 646), y ordenar listas UTF-16 para otros caracteres Unicode de patrones condicionales.

Todavía Hunspell solamente ha implementado los primeros 65536 caracteres (Plano Multilingüe Básico) del estándar de Unicode.

VEA TAMBIÉN


hunspell (1), ispell (1), ispell (4)