如何从 wordnet 中提取所有以特定字母开头的单词。例如,如果我输入 A,wordnet 应该返回所有以字母 A 开头的单词。
问问题
1549 次
2 回答
3
我能看到的最简单的方法是从这里下载他们的数据库,然后为每行中的第 5 个元素解析空格分隔的数据文件(data.adj、data.adv、data.noun、data.verb)并将它们放入相关的数据结构。
可能是一个哈希表,其中起始字母作为键,每个元素作为以该字母开头的单词数组。
无论您使用动态数组还是常规数组,然后您首先解析文件以获取每个字母的单词数(数组大小)取决于您。
下面的代码示例是用 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 调用的那种信息。
于 2012-02-18T11:30:41.460 回答
1
在 python 中,从 .tab 文件下载后Open Multilingual Wordnet
,您可以尝试以下方法:
# 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(";")
于 2013-02-02T02:25:23.200 回答