Извлечение всех слов, начинающихся с определенной буквы из wordnet - PullRequest
3 голосов
/ 07 августа 2010

как можно извлечь все слова, которые начинаются с определенной буквы из wordnet. Пример, если я наберу A, wordnet должен вернуть все слова, начинающиеся с буквы A.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2012

Самый простой способ, который я вижу, это загрузить их базу данных из здесь и затем проанализировать разделенные пробелами файлы данных (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 см. здесь

Если вы хотите использовать вместо этого API-интерфейс WordNet C, то посмотрите документально описанную функцию findtheinfo здесь , хотя я не думаю, что она предназначена для возврата той информации, которую вы хотите, используя этот вызов API ,

1 голос
/ 02 февраля 2013

В 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(";")
...