Tous les mots extraire commençant par une lettre particulière de WordNet
Question
Comment extraire tous les mots qui commencent par une lettre particulière de WordNet. Exemple si i type A WordNet doit retourner tous les mots qui commencent par la lettre A.
La solution
Je manière la plus simple est de télécharger voir leur base de données et puis analyser l'espace séparé des fichiers de données (data.adj, data.adv, data.noun, data.verb) pour le cinquième élément dans chaque ligne et de les placer dans une structure de données pertinente.
Peut-être une table de hachage avec lettre de départ comme clé et chaque élément comme un tableau de mots qui commencent par cette lettre.
Si vous utilisez des tableaux dynamiques ou des tableaux réguliers et vous ensuite d'abord parse du fichier pour obtenir le nombre de mots de chaque lettre (taille du tableau) est à vous.
L'exemple de code suivant est écrit en C, et se lit à travers un wordnet datafile et imprime le mot en question. Il est nullement poli et a été vite fait.
#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;
}
Pour plus de documentation sur le format de base de données WordNet voir
Si vous voulez utiliser l'API C WordNet plutôt, voir la fonction findtheinfo
documentée ici , bien que je ne pense pas qu'il est conçu pour retourner le genre d'information que vous voulez utiliser cette appel API.
Autres conseils
En python, une fois que vous avez téléchargé le fichier .tab de Open Multilingual Wordnet
, vous pouvez essayer cette recette:
# 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(";")