wordnet から特定の文字で始まるすべての単語を抽出する方法を教えてください。たとえば、「A」と入力すると、wordnet は文字 A で始まるすべての単語を返す必要があります。
2 に答える
私が見ることができる最も簡単な方法は、ここからデータベースをダウンロードし、スペースで区切られたデータファイル (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 呼び出しを使用して必要な種類の情報を返すように設計されているとは思いません。
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(";")