La extracción de todas las palabras que comienzan con una letra particular del wordnet
Pregunta
¿cómo se puede extraer todas las palabras que comienzan con una letra particular del wordnet. Ejemplo si i tipo A, el wordnet debe devolver todas las palabras que comienzan con la letra A.
Solución
La manera más fácil que puedo ver es a descargar su base de datos desde aquí y a continuación, analizar el espacio separado archivos de datos (data.adj, data.adv, data.noun, data.verb) para el elemento de quinta en cada línea y colocarlos en una estructura de datos correspondiente.
Posiblemente una tabla hash con la letra inicial como la clave y cada elemento como una serie de palabras que comienzan con esa letra.
Si usted utiliza matrices dinámicas o matrices regulares y, a continuación, primero de análisis del archivo para obtener el número de palabras de cada letra (tamaño de la matriz) es de usted.
El siguiente ejemplo de código está escrito en C, y lee a través de un fichero de datos wordnet e imprime la palabra en cuestión. Es de ninguna manera pulen y se hizo rápidamente.
#include <stdio.h>
#include <string.h>
int main(int argc,char**argv)
{
FILE *fp;
fp=fopen("data.noun", "r");
char line [ 3000 ];
while ( fgets ( line, sizeof line, fp ) != NULL )
{
char *result = NULL;
int count =0;
result = (char*)strtok( line, " ");
count++;
while( result != NULL )
{
if (count == 5)
{
printf( "result is \"%s\"\n", result );
}
result = (char*)strtok( NULL, " ");
count++;
}
}
return 0;
}
Para más documentación sobre el formato de la base de datos WordNet ver aquí
Si desea utilizar la API de C WordNet entonces ver la función findtheinfo
documentado aquí , aunque no creo que está diseñado para devolver el tipo de información que desea usar esa llamada a la API.
Otros consejos
En Python, después de que haya descargado el archivo de .tab Open Multilingual Wordnet
, se puede probar esta receta:
# Read Open Multi WN's .tab file
def readWNfile(wnfile, option="ss"):
reader = codecs.open(wnfile, "r", "utf8").readlines()
wn = {}
for l in reader:
if l[0] == "#": continue
if option=="ss":
k = l.split("\t")[0] #ss as key
v = l.split("\t")[2][:-1] #word
else:
v = l.split("\t")[0] #ss as value
k = l.split("\t")[2][:-1] #word as key
try:
temp = wn[k]
wn[k] = temp + ";" + v
except KeyError:
wn[k] = v
return wn
princetonWN = readWNfile('wn-data-eng.tab', 'word')
for i in princetonWN:
if i[0] == "a":
print i, princetonWN[i].split(";")