Todos sabemos que el castellano es un idioma muy rico tanto en vocabulario como en conjugación, pero esto, para la vida de los programadores de bibliotecas digitales, es un problema.
Por ejemplo, si tenemos una biblioteca digital legislativa, y queremos buscar las leyes que hablen sobre “multas”, deberíamos buscar los documentos que contengan los términos “multa”, “multas”, “multado”, “multados”, “multada” “multadas”, “multando”, además de todas las conjugaciones verbales en cualquier número y tiempo: “multo”, “multas”, “multa”, “multamos”, “multáis”, “multan”, “multaba”, “multé”, “multó” y así hasta que os aburráis. Como veis, de un concepto muy concreto (esas dichosas multas), surgen muchísimos términos, que aunque se refieren a la misma idea, no son exactamente iguales. Así que aunque busquemos el término “multa”, no tendremos la seguridad de haber encontrado todos los documentos que hagan referencia al concepto “multa” (ojo a la diferencia entre término y concepto).
Si hago memoria de mis tiempos de escolar, creo que había una parte de cada palabra que era la raíz, llamada “lexema”, que permanecía invariable en todas las posibles formas. Si no me equivoco, el lexema de “multa” debe ser “mult”, ya que es la parte que no varía de todas las formas que hemos visto antes.
Bien, aplicando esto, podemos indexar los textos con una pequeña variación: por cada palabra que nos encontremos, la indexaremos no como aparece en el texto, sino con su lexema. Es decir, si tenemos los siguientes textos:
- “El policía nos multó a todos.”
- “Vaya cara que pusimos todos los multados”
- “La multa fue injusta”
- “¡Abajo las multas!”
Podemos indexarlos de forma normal, y en el índice invertido habrá entrada distintas para los términos “multó”, “multados”, “multa” y “multas”, por lo que si buscamos el concepto “multa”, solo encontraremos el documento 3. Pero también podemos indexarlos utilizando su lexema:
- “El policía nos mult a todos.”
- “Vaya cara que pusimos todos los mult”
- “La mult fue injusta”
- “¡Abajo las mult!”
De este modo, el índice invertido solo tendrá una única entrada para el lexema, y no una entrada por cada variación. Cuando hagamos una consulta, sustituiremos cada término a buscar por su lexema y después haremos la búsqueda como hasta ahora. Por ejemplo, si buscamos el término “multado”, lo sustituiremos por “mult”, y si buscamos “multa”, también lo sustituiremos por su lexema. De este modo somos capaces de buscar “conceptos” y no solo “términos”.
Esta técnica, aunque muy interesante y útil, es difícil de implementar, ya que necesitamos un método para detectar los lexemas de cualquier palabra en castellano, y eso, con un algoritmo, es difícil de conseguir (pero no imposible).
Una solución más sencilla, o complementaria, es la búsqueda basada en diccionarios de sinónimos.