从wordnet中提取以特定字母开头的所有单词

时间:2010-08-07 09:34:51

标签: python c nlp wordnet

如何从wordnet中提取以特定字母开头的所有单词。例如,如果我输入A,则wordnet应返回以字母A开头的所有单词。

2 个答案:

答案 0 :(得分:3)

我能看到的最简单的方法是从here下载他们的数据库,然后解析每个空间分隔的数据文件(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数据库格式的进一步文档,请参阅here

如果您想使用WordNet C API,请参阅findtheinfo函数记录here,但我不认为它旨在使用该API调用返回您想要的信息类型。

答案 1 :(得分: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(";")