img
. . . . . . . .
Redalyc
Sistema de Información Científica
Red de Revistas Científicas de América Latina, el Caribe, España y Portugal
ZAPATA, CARLOS MARIO; MESA, JHON EDISON
UNA PROPUESTA PARA EL ANÁLISIS MORFOLÓGICO DE VERBOS DEL
ESPAÑOL
Dyna, Vol. 76, Núm. 157, marzo-sin mes, 2009, pp. 27-36
Universidad Nacional de Colombia
Colombia
Disponible en: http://redalyc.uaemex.mx/src/inicio/ArtPdfRed.jsp?iCve=49611942003
Dyna
ISSN (Versión impresa): 0012-7353
dyna@unalmed.edu.co
Universidad Nacional de Colombia
Colombia
¿Cómo citar?
Número completo
Más información del artículo
Página de la revista
www.redalyc.org
Proyecto académico sin fines de lucro, desarrollado bajo la iniciativa de acceso abierto
UNA PROPUESTA PARA EL ANÁLISIS MORFOLÓGICO DE
VERBOS DEL ESPAÑOL
A PROPOSAL FOR MORPHOLOGICAL ANALYSIS OF VERBS
IN THE SPANISH LANGUAGE
CARLOS MARIO ZAPATA
Grupo de Investigación en Lenguajes Computacionales, Universidad Nacional de Colombia, cmzapata@unal.edu.co
JHON EDISON MESA
Grupo de Investigación en Lenguajes Computacionales, Escuela de Sistemas, Universidad Nacional de Colombia
Recibido para revisar abril 27 de 2007, aceptado diciembre 14 de 2007, versión final enero 16 de 2008
RESUMEN: El análisis morfológico de verbos del español no es una tarea fácil, debido a sus peculiares
características. Una de esas características es la gran cantidad de conjugaciones que puede poseer un verbo, lo cual
dificulta la generación automática de dichas conjugaciones. Aunque, en la actualidad, existen propuestas de
analizadores de verbos que realizan la conjugación y lematización de estos, aún presentan problemas. En este
artículo se propone un analizador morfológico que utiliza plantillas para generalizar las conjugaciones de los verbos.
Con estas plantillas se pueden realizar los procesos de conjugación y lematización, sin tener que almacenar todas las
posibles conjugaciones de un verbo de manera independiente. La implementación del analizador morfológico de
verbos se hizo en el lenguaje de programación Python para aprovechar las capacidades que éste ofrece en la
manipulación de cadenas de texto.
PALABRAS CLAVE: Conjugación, Lematización, Verbos Modelo, Análisis Morfológico, Plantilla, Generación.
ABSTRACT: The morphological analysis of verbs in the Spanish language is a difficult task due to the fact that they
present special features. One of these features is related to the big amount of conjugation forms of a verb, and this
fact makes difficult the automatic generation of these conjugations. Currently, there are proposals of verb analyzers,
which make lemmatization and conjugation of verbs, but they still exhibit some problems. In this article, we propose
a template-based morphological analyzer with the purpose of generalizing verb conjugations. The templates aim to
make the conjugation and lemmatization processes without the need of independently saving all possible conjugation
forms of a verb. The morphological analyzer was implemented in the programming language Python, to take
advantage of the capabilities of this language for string manipulation.
KEY WORDS: Conjugation, Lemmatization, Model Verbs, Morphological Analysis, Templates, Generation.
1.
INTRODUCCIÓN
cualquier tiempo y conseguir lematizarlo a su
El análisis morfológico es el estudio de la
forma de infinitivo [1].
estructura  de  las  palabras  de  un  idioma
Tomando como base el español, el análisis
morfológico de verbos no es una tarea fútil debido
identificando en ellas sus respectivos morfemas [1].
a sus peculiares características, tales como: sus
Concretamente, en los verbos del español el
variados  accidentes  verbales  (gracias  a  la
análisis morfológico consiste en identificar en un
existencia de los múltiples tiempos, personas y
verbo la raíz y el prefijo flexivo que cambian la
función gramatical de la palabra raíz [2]. El
números implicados en la conjugación), los
objetivo de un análisis morfológico de verbos,
diferentes paradigmas verbales, la división de los
cuando se realiza de manera automática, es
verbos en regulares e irregulares, los verbos
encontrar la flexión de un verbo en infinitivo en
defectivos y la presencia del participio irregular [3].
Dyna, Año 76, Nro. 157, pp. 27-36. Medellín, Marzo de 2009. ISSN 0012-7353
img
Zapata y Mesa
28
En
la
actualidad,
existen
analizadores
2.1
Flaver
morfológicos que permiten conjugar y lematizar
verbos  en  español,  pero  todavía  persisten
El flexionador y lematizador automático de formas
problemas tales como los siguientes:
verbales [5, 6] permite lematizar diferentes verbos,
identificando en este proceso su infinitivo,
Conjugación incompleta de ciertos verbos, con
categoría gramatical y flexión, y generando una
varias alternativas de conjugación en un mismo
forma verbal a partir de su infinitivo. Este sistema
posee una estructura de datos conformada por
tiempo, persona y número [4].
verbos modelo, terminaciones y reglas, que le
Necesidad de grandes bases de datos para su
permiten llevar a cabo sus procesos de forma
correcto funcionamiento, para almacenar los
bidireccional sobre la misma estructura.
verbos en infinitivo con sus correspondientes
conjugaciones, lo cual genera ineficiencias en el
La ventaja de este sistema es la estructura de datos,
análisis morfológico.
que guarda la información mínima necesaria para
Fallas en la conjugación y lematización de
generar las conjugaciones, como los infinitivos,
ciertos verbos, tales como la presentación de
sus verbos modelos asociados y las reglas de
resultados erróneos o la incapacidad de encontrar
cambio de raíz. Por ello, esta estructura permite
el correspondiente verbo [5].
disminuir los tiempos de lematización que se
Soluciones teóricas que no se llegan a
requerirían con una base de datos que guarda a
implementar, e. g. Zamorano [7].
cada verbo sus flexiones según tiempo, persona y
número.
En este artículo se presenta una propuesta de
solución que permite obtener la conjugación y
La desventaja de esta solución es el manejo de
lematización de un verbo del español usando un
reglas para los cambios de raíz, el cual requiere
lexicón de verbos modelo, que agrupa las
mucho tiempo y esfuerzo para construir los
regularidades e irregularidades de un gran conjunto
algoritmos necesarios que aplican dichas reglas
de verbos. La solución propuesta conduce el
sobre un verbo [4]. Además, presenta algunas
análisis  morfológico  a  la  concatenación  o
fallas en la conjugación de verbos defectivos como
separación de una raíz y una terminación según un
el verbo "embaír", cuyo resultado se aprecia en la
tiempo, persona o número deseado. Además,
Figura 1 y que no debería presentar la tercera
permite aliviar las grandes y poco eficientes bases
persona del singular y del plural en el pretérito
de datos que requieren algunos conjugadores,
indefinido de indicativo. La flexión correcta de
tratando de solucionar algunos problemas de la
"embaír", se puede consultar en la página oficial
literatura especializada en el tema.
de la Real Academia Española RAE [8].
El artículo tiene la siguiente estructura: en la
Sección 2 se discute sobre el funcionamiento de
algunos analizadores morfológicos de verbos
destacando sus ventajas y desventajas; en la
Sección 3 se describe un marco teórico de la
propuesta de solución; la propuesta de solución
como tal se presenta en la Sección 4; finalmente,
las conclusiones y trabajo futuro se discuten en la
Figura 1. Conjugación de "embaír" en FLAVER
Sección 5.
Figure 1. "embaír" conjugation by FLAVER
2.2  Propuesta de estructura léxica para el
2.
REVISIÓN DE LA LITERATURA EN
análisis morfológico de verbos
ANALIZADORES  MORFOLÓGICOS  DE
VERBOS
Zamorano [7] define la estructura de una gramática,
que permite obtener la conjugación automática de
Algunos analizadores morfológicos de verbos se
cualquier verbo, contemplando las irregularidades
describen a continuación:
img
Dyna 157, 2009
29
que se puedan presentar en la raíz y en la
tres formas distintas para cada persona y, a su vez,
terminación, en un tiempo, persona y número
cada persona puede aparecer en singular o plural"
específico.
[7]. Además, el español posee en total 62 formas
verbales simples asociadas a cada verbo, además
La ventaja de esta propuesta, al igual que el
de las 45 formas de conjugación compuestas para
sistema de Santana et al. [5], es la reducción del
un total general de 107 formas verbales asociadas a
léxico necesario para lograr la conjugación de un
cada verbo. [10].
verbo, además de que no se requiere especificar
reglas de cambio de raíz.
La desventaja de la propuesta de Zamorano [7] es
que fue diseñada para un entorno con propósitos de
enseñanza académica. Además, la estructura léxica
definida por el autor no permite precisar de forma
intuitiva, el proceso de lematización y se limita a
un estudio teórico de la conjugación de los verbos
que no se llevó a una implementación.
2.3 AGME (Análisis y Generación morfológica
para el Español)
AGME [9] usa un diccionario de raíces que se
asocian con el verbo al que pertenecen. Este
sistema agrupa los verbos en tres conjuntos:
regulares, semirregulares e irregulares.
Una ventaja de este sistema, es el uso de raíces, lo
cual reduce el problema de la conjugación a buscar
Figura 2. Conjugación de "yacer" en AGME
la raíz apropiada y concatenarla con la terminación
Figure 2. "yacer" conjugation by AGME
respectiva. Otra ventaja que posee es la obtención,
con una misma estructura, de la conjugación y la
Aunque las anteriores características pueden ser
lematización de verbos.
computacionalmente tratables, otras características
La desventaja de este sistema, es que presenta
le dan a la morfología verbal la connotación
algunas fallas en la lematización de ciertos verbos,
compleja para el análisis automático, tales como:
que tienen la particularidad de poseer hasta tres
alternativas de conjugación en mismo  tiempo,
Existencia de tres paradigmas de conjugación
persona y número. Por ejemplo, el verbo "yacer",
(verbos terminados en -ar, -er, -ir) [10].
en el tiempo Presente Indicativo, primera persona
Existencia de verbos irregulares los cuales,
del singular, se puede conjugar como "yazco", o
cuando se conjugan, sufren cambios en la raíz [11].
"yazgo", o "yago". AGME reconoce la forma
Existencia  de  irregularidades  en  las
"yazgo", pero las otras dos no (véase la Figura 2).
terminaciones de algunos tiempos [12].
La flexión correcta de "yacer" se puede encontrar
Presencia de vacíos en algunos paradigmas de
en la página oficial de la RAE [8].
conjugación de ciertos verbos, ya que dicha
conjugación no se usa o no existe [3].
Presencia de verbos que poseen doble o triple
3.
MARCO TEÓRICO
alternativa de conjugación en un mismo tiempo
persona y número [12].
3.1
Teoría de verbos
Existencia de algunos verbos que poseen doble
o triple participio pasado [3].
Para el idioma español, el análisis morfológico de
verbos no es una tarea simple debido a sus
La conjugación verbal se suele agrupar bajo el
peculiares características: "cada tiempo contiene
contexto de los verbos modelo, según las
Zapata y Mesa
30
( LEXICAL-VERB-ITEM
irregularidades que presenten. Para los verbos
: NAME ""
regulares, se agrupan según la terminación del
: TYPE ""
infinitivo. Para los verbos irregulares, los verbos
: ROOT ""
modelo se crean según las irregularidades que
: CONJUGATION-MODEL ""
presenten [11]. Aunque la RAE [8] reconoce 62
: CONJUGATION-TERM "")
verbos  modelo,  el  Instituto  de  Verbología
La etiqueta NAME guarda el nombre del verbo
Hispánica [11], identificó 101 modelos verbales
modelo (e. g. "amar", "haber", etc.). La etiqueta
que agrupan casi todos los verbos existentes.
TYPE indica el grupo al que pertenece el verbo
modelo  (regulares  o  isoptongos,  auxiliares,
3.2
Lenguaje de programación Python
semirregulares, irregulares y tíldicos). La etiqueta
ROOT indica la raíz o raíces que posee el verbo
Python es un lenguaje de programación, con una
modelo. Si posee mas de una raíz, éstas se separan
serie de características que lo hacen ideal para
con el símbolo "" (e. g. hab
h
hay
hub
). La etiqueta
aplicaciones que requieran un alto manejo de
CONJUGATION-MODEL indica el modelo de
cadenas de caracteres, tales como:
conjugación que sigue el verbo modelo. Un vector
Expresividad: un programa Python suele ser
de 60 posiciones representa el modelo; cada
bastante más corto que su equivalente en lenguajes
posición se asocia con un tiempo, persona y
como C [13].
número en particular y el código que se almacena
Legibilidad: La sintaxis de Python permite la
en cada posición determina la raíz a usar en la
escritura de programas cuya lectura resulta más
conjugación. El código de la raíz se asigna según
fácil que en otros lenguajes de programación [13].
la posición que ocupe en ROOT. En la Tabla 1
Versatilidad: Python se puede usar como
aparecen los tiempos que se reconocen. En algunos
imperativo  procedimental  o  como  lenguaje
verbos modelo, es posible que, en un tiempo,
orientado a objetos [13].
persona y número en particular, se usen varias
Python posee dos enfoques de creación
raíces. Este caso se representa en el modelo de
aplicaciones. El primer enfoque se centra en la
conjugación con las raíces que se usan encerradas
creación de aplicaciones de escritorio y el segundo
entre "[ ]". Por ejemplo, para el verbo modelo
enfoque en la creación de aplicaciones web.
"haber" en el tiempo Presente Indicativo, primera
Gracias a las anteriores ventajas, Python permite
persona del plural se deben usar las raíces uno y
implementar aplicaciones con alto grado de
dos. Esto es correcto ya que las formas "habemos"
manipulación de strings, como la que se desarrolla
y "hemos" son válidas [11].
en esta propuesta.
Adicional a lo anterior, algunos verbos modelo no
usan una raíz en la conjugación de algunos tiempos,
4.
PROPUESTA
DE
SOLUCIÓN:
por lo que el código de la raíz es cero (0). Como en
ANALIZADOR
MORFOLÓGICO
DE
el Imperativo, la primera persona del singular, y en
VERBOS EN ESPAÑOL
las formas impersonales, la primera, segunda y
tercera del plural no existen, se debe colocar la raíz
En este artículo se propone la definición de una
cero (0) y asociarla con la terminación dummy, que
estructura léxica guiada por verbos modelo, que
se describe luego.
permite realizar los dos procesos principales:
conjugación y lematización. Esta solución se
La etiqueta CONJUGATION-TERM indica el
enfoca en el uso de un diccionario de raíces para
código del grupo de terminaciones que usa el
llevar a cabo los dos procesos, por lo que no se
verbo modelo para conjugar en un tiempo
requiere entrar a definir reglas de cambio de raíz.
particular. Cada código apunta a otro creado en la
plantilla "Asociación terminación", que se describe
4.1
Estructura léxica
luego. En total son 10 códigos para 10 tiempos y
img
cada código separado por el símbolo "::".
Para cada verbo modelo, se llena la plantilla que se
muestra a continuación, cuya sintaxis es similar a
la expuesta por Zamorano [7].
Dyna 157, 2009
31
Tabla 1. Convención para TIME, PERSON y
número en particular se usen varias terminaciones
NUMBER
según un verbo modelo. Estas terminaciones se
Table 1. Convention for TIME, PERSON, and
colocan en NAME separadas por el símbolo "
".
NUMBER tags
Las etiquetas TIME, PERSON y NUMBER,
ETIQUETA
CÓDIGO
indican el tiempo, persona y número en donde se
TIME
1: Presente indicativo
usa la terminación. Por convención, en la Tabla 1
2: Presente Subjuntivo
se  encuentra  una  codificación  para  TIME,
3: Imperativo
PERSON y NUMBER.
4: Pretérito Indefinido
5: Pretérito Imperfecto de
Por ejemplo, para "-oy", la plantilla se vería así:
Subjuntivo
( TERMINATION-ITEM
6: Futuro Imperfecto de
: CODE "T130"
Subjuntivo
: NAME "oy"
7: Futuro Imperfecto de
: TIME "1"
indicativo
: PERSON "1"
: NUMBER "1")
8: Condicional Simple
9: Pretérito Imperfecto de
Las terminaciones ingresadas con la plantilla
Indicativo
anterior se agrupan después en la plantilla
10: Formas Impersonales
"Asociación Terminación" según el tiempo al que
PERSON
1: Primera Persona
pertenezcan.
La
plantilla
"Asociación
2: Segunda Persona
Terminación" es la siguiente:
3: Tercera Persona
NUMBER
1: Singular
( TERMINATION-ASSOCIATION
2: Plural
: CODE ""
: TIME ""
Por ejemplo, para el verbo "haber", la plantilla se
: CODES-ASSOCIATION "")
vería así:
Adicional a las terminaciones listadas, se debe
ingresar una terminación dummy, que indica el no
( LEXICAL-VERB-ITEM
: NAME "haber"
uso de terminación en un tiempo, persona y
: TYPE "auxiliar"
número particular. Su plantilla es la siguiente:
: ROOT "hab
h
hay
hub"
: CONJUGATION-MODEL
( TERMINATION-ITEM
"222[12]1233333302331311111144444444444411111111111
: CODE "T26"
1111111111000"
: NAME "*"
: CONJUGATION-TERM
: TIME "*"
"A70::A12::A13::A39::A15::A16::A52::A53::A19::A20")
: PERSON "*"
: NUMBER "*")
Para  todas  las  terminaciones  (regulares  e
irregulares) que existen en la conjugación se llena
Un ejemplo de llenado de la plantilla "Asociación
la siguiente plantilla:
Terminación" es el siguiente:
( TERMINATION-ITEM
( TERMINATION-ASSOCIATION
: CODE ""
: CODE "A1"
: NAME ""
: TIME "1"
: TIME ""
: CODES-ASSOCIATION "T1::T2::T3::T4::T5::T6")
: PERSON ""
: NUMBER "")
La etiqueta CODE indica el código de la
terminación. El código empieza por la letra "A"
La etiqueta CODE indica el código de la
img
seguido por un número consecutivo. La etiqueta
terminación. El código empieza por la letra "T"
TIME indica el tiempo donde opera la asociación.
seguido por un número consecutivo. La etiqueta
Los valores de esta etiqueta se encuentran en la
NAME indica la terminación como tal (e. g. -o, -oy,
Tabla 1. La etiqueta CODES-ASSOCIATION
etc). Es posible que en un tiempo, persona y
Zapata y Mesa
32
indica el conjunto de terminaciones que se
La etiqueta NAME contiene el infinitivo al que se
relacionan con la asociación (plantilla). Es un
le llena la plantilla. La etiqueta CONJUGATION-
vector de seis posiciones en donde cada posición
MODEL contiene todas las conjugaciones del
almacena el código de la terminación, separada por
verbo en los 10 tiempos. Cada conjugación se
el símbolo "::". Cabe resaltar que el valor que
separa con el símbolo "
". Si el verbo posee varias
guarden las terminaciones en la etiqueta TIME
alternativas de conjugación en un tiempo, persona
debe coincidir con el valor guardado en la etiqueta
y número en particular, éstas se separan con el
TIME de la asociación.
símbolo "&"; y si el verbo no posee conjugación se
representa con el símbolo "*".
El diccionario de raíces es una tabla en donde cada
Por ejemplo, para el verbo atípico "ir", la plantilla
verbo del español se relaciona con su verbo
es la siguiente:
modelo y se almacenan las raíces que tiene.
( LEXICAL-VERB-ITEM
Además, se almacena el tipo de verbo defectivo y
: NAME "ir"
el tipo de irregularidad en el participio que posee.
:CONJUGATION-MODEL
Un ejemplo del diccionario de raíces se encuentra
"voy
vas
va
vamos
vais
van
vaya
vayas
vaya
vayamos
vayáis
va
en la Tabla 2. En la columna "raíces" se colocan
yan
*
ve
vaya
vayamos
id
vayan
fui
fuiste
fue
fuimos
fuisteis
fu
las raíces de la plantilla "Verbo Modelo". La
eron
fuera&fuese
fueras&fueses
fuera&fuese
fuéramos&fuése
mos
fuerais&fueseis
fueran&fuesen
fuere
fueres
fuere
fuéremo
columna "Tipo de verbo defec" almacena el tipo
s
fuereis
fueren
iré
irás
irá
iremos
iréis
irán
iría
irías
iría
iríamos
de verbo defectivo según el criterio definido por
iríais
irían
iba
ibas
iba
íbamos
ibais
iban
ir
yendo
ido
*
*
*")
Santana et al. [5]. Si el verbo no es defectivo, se
coloca "d0" o se deja el espacio en blanco (i.e.
Con los verbos modelo ingresados en la sección
"[]").  La  columna  "Tipo  de  irregularidad
4.1, en la mayoría de los casos no será necesario
participio" guarda las irregularidades que tenga el
recurrir a esta plantilla.
verbo en el participio. Si el verbo posee dicha
irregularidad, se almacenan todos sus participios
4.2 Implementación
del
Analizador
irregulares. Si el verbo posee más de un participio,
Morfológico de Verbos
estos se separan con el símbolo "
". Si el verbo no
posee irregularidad en el participio, se deja el
La implementación del analizador morfológico de
espacio en blanco (i.e. "[]"). Es pertinente aclarar
verbos se hizo en el lenguaje Python para
que, si se especifica esta irregularidad, cuando se
aprovechar las ventajas mencionadas en la sección
busque la conjugación del Participio se elijen las
3.2.  El  almacenamiento  de  la  información
ingresadas en el diccionario y no las generadas con
ingresada en las plantillas de la sección 4.1 se hizo
el verbo modelo.
usando archivos planos de texto. El nombre de
estos archivos es el mismo de las plantillas y
supone un archivo por plantilla. Además, el
Tabla 2. Diccionario de raíces
Table 2. Root dictionary
diccionario de raíces también se maneja en un
verbo
verbo
raíces
tipo
tipo de
archivo de texto con este mismo nombre.
modelo
verbo  irregularidad
Los algoritmos de flexión y lematización emplean
defec  participio
una clase llamada "gestorLexico", que permite
deber
deber
[deb]
[]
[]
manejar la información ingresada en el literal 4.1.
huir
construir  [hu
huy]
[d0]
[]
El método "buscConj" permite conjugar un verbo
nevar
acertar
[nev
niev]  [d2]
[]
en infinitivo en un tiempo, persona y número en
abrir
vivir
[abr]
[d0]
[abierto]
particular, de la manera siguiente:
Para los verbos que no es posible asociar a algún
def buscConj(self,verbInf,tmpo,pers,num):
verbo modelo, se llena la siguiente plantilla:
"""almacena los resultados de la conjugación"""
resultado={}
"""indexa  varias conjugaciones generadas"""
( LEXICAL-VERB-ITEM
index=0
: NAME ""
"""obtiene los verbos Modelo asociados al verbo
: CONJUGATION-MODEL "")
infinitivo"""
verbMods=self.gestorLexico.
obtVerbModSegInf(verbInf)
Dyna 157, 2009
33
"""si no hay verbos modelo asociados con el
Si se presenta el caso raíz cero y terminación
infinitivo..."""
dummy, entonces la conjugación no existe.
if verbMods==None:
Si se presenta el caso raíz diferente a cero y
"""...busca en los verbos atípicos"""
resultado=self.gestorLexico.
terminación dummy, la conjugación es la raíz sola
obtConjVerbAtip
sin terminación.
(verbInf,tmpo,pers,num)
"""...si el infinitivo no existe en ningún
El otro caso que se puede presentar es raíz cero
lado, retorna Null."""
y terminación diferente a la dummy. Aunque en la
if len(resultado)==0:
conjugación se puede tratar, se prohíbe este caso
return None
else: return resultado
en el léxico porque deteriora la eficiencia del
"""para cada verbo modelo retornado (Se puede
proceso de lematización y, además, impone una
dar que un verbo esté asociado con varios
verbos modelo)"""
restricción muy fuerte sobre el verbo modelo que
for i in verbMods:
la use y el conjunto de verbos que represente.
"""verifica el participio irregular. Si existe
El método "lematVerb" permite lematizar un verbo
tal participio, almacena y no se conjuga como
el verbo modelo"""
conjugado a su forma de infinitivo, así:
#si se está conjugando en participio:
if tmpo==10 and pers==3 and
def lematVerb(self,verbo):
num==1:
resultado={}
partIrr=self.gestorLexico.
for i in range(len(verbo)+1):
detPartIrr(i,verbInf)
"""obtiene la raíz del paso i actual"""
#Si existe participio irregular:
raiz=verbo[:len(verbo)-i]
if not len(partIrr)==0:
"""obtiene la terminación del paso i"""
resultado[index]=partIrr
term=verbo[len(verbo)-i:]
index=index+1
"""determina si la terminación no es vacía. Si
continue
es vacía, el tratamiento de la raíz es
"""obtiene el modelo de conjugación
diferente."""
correspondiente al tiempo, persona y número
if not term=="":
deseado"""
"""obtiene la información de la terminac"""
modConj=self.gestorLexico.
img
infoTerm=self.gestorLex
obtModConjSegVerbMod
ico.obtInfTerm(term)
(i,tmpo,pers,num)
"""Si no se encontró la terminación, retorna al
"""obtiene las raíces correspondientes del
primer for"""
verbo a conjugar"""
if infoTerm==None:continue
raices=self.gestorLexico.
"""obtiene la información de la raíz"""
obtRaizSegInf(verbInf,i)
infoRaiz=self.gestor
"""obtiene las terminaciones para el tiempo,
Lexico.obtInfRaiz(raiz)
persona y número deseado, según el verbo
"""Si no se encontró la raíz, retorna al primer
modelo"""
for"""
terms=self.gestorLexico.
if infoRaiz==None:continue
obtTermSegVerbMod
"""realiza la lematización."""
(i,tmpo,pers,num)
for j in infoTerm[term]:
"""obtiene la información de verbo defectivo
#para cada raíz obtenida
para el verbInf según el verbo modelo."""
for k in infoRaiz[raiz]:
infDef=self.gestorLexico.
"""genera una conjugación a partir de infoTerm
obtInfVerbDefSegVerbMod
e infoRaiz"""
(i,verbInf)
conjGenerada=self.
"""realiza la conjugación. Aquí, se combina la
buscConj(k[0],int(j[0]),
información de modConj con terms, que son
int(j[1]),int(j[2]))
listas que pueden tener más de un elemento.
#si no existe la conjugación generada
Además se tiene en cuenta si el verbo es
if conjGenerada==None:
defectivo."""
"""sigue con la siguiente terminación"""
resultado[index]=self.
continue
combModConjYTerms
for l ,m in conjGenerada.
(modConj,terms,raices,
iteritems():
infDef,tmpo,pers,num)
"""si el verbo ingresado es igual a algún verbo
index=index+1
generado..."""
"""finaliza la conjugación"""
if verbo in m:
return resultado
"""agrega al resultado el infinitivo que pasó
Un aspecto que se debe tener en cuenta en la
la conjugación con su información. También se
conjugación son las combinaciones entre la raíz
filtra la información para evitar resultados
cero (0) y la terminación dummy ("*"). Su
repetidos"""
if not resultado.
tratamiento es el siguiente:
has_key(k[0]):
resultado[k[0]]=
[self.generar
Etiqueta(k[0],
Zapata y Mesa
34
int(j[0]),
4.3
Construcción del Diccionario de raíces
int(j[1]),
int(j[2]))]
El diccionario de raíces se construyó usando un
else:
etiqueta=
sistema auxiliar. Este sistema, a partir de un verbo
self.generar
del español y su correspondiente verbo modelo,
Etiqueta(k[0],
int(j[0]),
genera todas las raíces correspondientes y las
int(j[1]),
ingresa al diccionario de raíces; el proceso se
int(j[2]))
puede repetir para cada verbo del español. Los
#Se filtra la información
if not etiqueta
verbos del español y su correspondiente verbo
in resultado[k[0]]:
modelo  se  obtuvieron  de  los  diccionarios
resultado[k[0]].
append(etiqueta)
existentes. Usando este sistema se procesaron
else:
aproximadamente 2300 verbos.
"""Si la terminación es vacía, la raíz se debe
buscar en los verbos atípicos y también
lematizarla como raíz sin terminación."""
Tabla 3. Etiquetas para el proceso de lematización
infAtip=self.gestorLexico.
Table 3. Tags for the Lemmatization process
busEnAtip(raiz)
Atributo
Valor
Código
infRaiz=self.gestorLexico.
busRaizSolaSinTerm(raiz)
TIPO
Principal (cualquier verbo)
M
"""agrega los resultados obtenidos de
Semiauxiliar (verbo ser)
S
busEnAtip"""
Auxiliar (verbo haber)
A
for i,j in
infAtip.iteritems():
MODO
Indicativo
I
for k in j:
Subjuntivo
S
if not resultado.
Imperativo
M
has_key(i):
resultado[i]=
Infinitivo
N
img
[self.generarEtiqueta
Gerundio
G
(i,k[0],k[1],k[2])]
Participio
P
else:
resultado[i].append
TIEMPO
Presente
P
(self.generarEtiqueta
Imperfecto
I
(i,k[0],k[1],k[2]))
Condicional
C
"""agrega los resultados obtenidos de
Futuro
F
busRaizSolaSinTerm"""
for i,j in
Pasado
S
infRaiz.iteritems():
PERSONA
Primera
1
for k in j:
Segunda
2
if not resultado.
has_key(i):
Tercera
3
resultado[i]=
NUMERO
Singular
S
[self.generarEtiqueta
Plural
P
(i,k[0],k[1],k[2])]
else:
resultado[i].append
4.4
Caso de estudio
(self.generarEtiqueta
(i,k[0],k[1],k[2]))
return resultado
En  este  caso  de  estudio  se  presenta  el
funcionamiento del Analizador Morfológico y la
En  el  método  "lematVerb",  el  método:
forma en que trabaja la conjugación y la
"generarEtiqueta (verbInf, tmpo, pers y número)"
lematización.
transforma la información de la Tabla 1 al formato
de la Tabla 3. Esto se hace porque en la
Con la definición de la raíz cero y la terminación
lematización de verbos es común mostrar los
dummy, se soluciona en parte el problema de los
resultados según esas etiquetas [14].
vacíos en la conjugación (inexistencia de una
conjugación válida). En la Figura 3 se presenta
Tanto los métodos de conjugación como de
cómo  el  verbo  "embaír"  aprovecha  esta
lematización, se agruparon en una clase llamada
característica para generar en el tiempo Pretérito
analizadorMorfologico. Además, se construyó una
Indefinido las formas correctas.
interfaz gráfica de usuario para usar estos métodos.
Dyna 157, 2009
img
35
la existencia de los verbos modelo y la
Ahora, con la introducción, en el modelo de