Como otros han sugerido, la WordNet database files son una gran fuente de partes del discurso. Dicho esto, los ejemplos utilizados para extraer las palabras no son del todo correctos. Cada línea es en realidad un "conjunto de sinónimos" que consta de múltiples sinónimos y su definición. Alrededor del 30% de las palabras solo aparecen como sinónimos, por lo que simplemente al extraer la primera palabra falta una gran cantidad de datos.
El formato de la línea es bastante simple para analizar (search.c
, la función parse_synset
), pero si todo lo que le interesa son las palabras, la parte correspondiente de la línea tiene el formato:
NNNNNNNN NN a NN word N [word N ...]
Corresponden a: desplazamiento dentro del archivo (número entero de 8 caracteres)
- Byte
- número de archivo (2 carácter entero)
- Parte de la oración (1 carácter)
- Número de palabras (2 caracteres, hexadecimal codificado)
- N ocurrencias de ...
- Palabra con espacios reemplazados por guiones bajos, comentario opcional paréntesis
- Word ID léxica (una ID única ocurrencia)
Por ejemplo, de data.adj
:
00004614 00 s 02 cut 0 shortened 0 001 & 00004412 a 0000 | with parts removed; "the drastically cut film"
- desplazamiento dentro del archivo de byte es 4614
- número de archivos es 0
- Parte de la oración es
s
, correspondiente al adjetivo (wnutil.c
, la función getpos
)
- Número de palabras es 2
- La primera palabra es
cut
con ID léxico 0
- La segunda palabra es
shortened
con léxica ID 0
Un corto script en Perl para volcar simplemente las palabras de los archivos 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
}
}
una esencia de la secuencia de comandos anterior se puede encontrar here.
Se puede encontrar un analizador más robusto que se mantiene fiel a la fuente original here.
Ambos scripts se usan de manera similar: ./wordnet_parser.pl DATA_FILE
.
¿Qué archivos usas? – Lucidnonsense
Tenga en cuenta que WordNet 3.0 no contiene ** conjugados **, p. si busca la palabra "are" en la lista de verbos, no obtendrá nada. Por supuesto que "estar" está ahí, entonces el verbo está allí, simplemente no la conjugación. – Luc