Как и предполагали другие, файлы базы данных WordNet являются отличным источником для частей речи. Тем не менее, примеры, используемые для извлечения слов, не совсем верны. Каждая строка на самом деле представляет собой «набор синонимов», состоящий из нескольких синонимов и их определения. Около 30% слов отображаются только как синонимы, поэтому при простом извлечении первого слова не хватает большого количества данных.
Формат строки довольно прост для анализа (search.c
, функция parse_synset
), но если все, что вас интересует, это слова, соответствующая часть строки отформатируется как:
NNNNNNNN NN a NN word N [word N ...]
Они соответствуют:
- Смещение байта в файле (8-значное целое число)
- Номер файла (целое число из 2 символов)
- Часть речи (1 символ)
- Количество слов (2 символа в шестнадцатеричном коде)
- N случаев ...
- Слово с пробелами, замененными подчеркиванием, необязательный комментарий в скобках
- Слово лексический идентификатор (уникальный идентификатор вхождения)
Например, от data.adj
:
00004614 00 s 02 cut 0 shortened 0 001 & 00004412 a 0000 | with parts removed; "the drastically cut film"
- Смещение байта в файле 4614
- Номер файла 0
- Часть речи
s
, соответствующая прилагательному (wnutil.c
, функция getpos
)
- Количество слов 2
- Первое слово
cut
с лексическим идентификатором 0
- Второе слово
shortened
с лексическим идентификатором 0
Короткий Perl-скрипт для простого вывода слов из файлов data.*
:
#!/usr/bin/perl
while (my $line = <>) {
# If no 8-digit byte offset is present, skip this line
if ( $line !~ /^[0-9]{8}\s/ ) { next; }
chomp($line);
my @tokens = split(/ /, $line);
shift(@tokens); # Byte offset
shift(@tokens); # File number
shift(@tokens); # Part of speech
my $word_count = hex(shift(@tokens));
foreach ( 1 .. $word_count ) {
my $word = shift(@tokens);
$word =~ tr/_/ /;
$word =~ s/\(.*\)//;
print $word, "\n";
shift(@tokens); # Lexical ID
}
}
Суть вышеприведенного скрипта можно найти здесь .
Более надежный парсер, который остается верным исходному источнику, можно найти здесь .
Оба сценария используются одинаково: ./wordnet_parser.pl DATA_FILE
.