从WordNet中提取以特定字母开头的所有单词
我想知道怎么从WordNet中提取所有以特定字母开头的单词。比如,如果我输入字母A,WordNet应该返回所有以字母A开头的单词。
2 个回答
1
在Python中,下载了来自Open Multilingual Wordnet
的.tab文件后,你可以试试这个方法:
# 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(";")
3
我看到最简单的方法就是从这里下载他们的数据库,然后解析那些用空格分开的数据文件(data.adj、data.adv、data.noun、data.verb),提取每行的第5个元素,并把它们放到一个合适的数据结构里。
你可以考虑用哈希表,使用字母的首字母作为键,每个键对应一个以该字母开头的单词数组。
至于你是用动态数组还是普通数组,以及是否先解析文件以获取每个字母的单词数量(数组大小),这就看你自己的选择了。
下面的代码示例是用C语言写的,它会读取一个wordnet数据文件并打印出相关的单词。这个代码并不是很完美,写得也比较快。
#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;
}
想了解更多关于WordNet数据库格式的文档,可以查看这里
如果你想使用WordNet的C API,可以查看这里的findtheinfo
函数文档,不过我觉得这个API调用可能不适合返回你想要的信息。