2010-02-18 22 views

Respuesta

8

Ver Kevin's word lists. Particularmente la "Base de datos de parte de la voz". Tendrá que hacer un mínimo de procesamiento de texto por su cuenta, para que la base de datos se convierta en varios archivos, pero eso se puede hacer muy fácilmente con unos pocos comandos grep.

Los términos de la licencia están disponibles en la página "readme".

30

Este es un resultado de Google altamente calificado, por lo que estoy desenterrando esta pregunta de hace 2 años para proporcionar una respuesta mucho mejor que la existente.

La página "Listas de palabras de Kevin" proporciona listas antiguas del año 2000, basadas en WordNet 1.6.

Está mucho mejor yendo a http://wordnet.princeton.edu/wordnet/download/current-version/ y descargando WordNet 3.0 (la versión de solo base de datos) o cualquiera que sea la última versión cuando está leyendo esto.

Parsing es muy simple; solo aplique una expresión regular de "/^(\S+?)[\s%]/" para captar cada palabra, y luego reemplace todos los "_" (guiones bajos) en los resultados con espacios. Finalmente, descargue sus resultados al formato de almacenamiento que desee. Se te darán listas separadas de adjetivos, adverbios, sustantivos, verbos e incluso una lista especial (muy inútil/útil según lo que estés haciendo) llamada "sentidos" que se relaciona con nuestros sentidos del olfato, vista, oído, etc. , es decir, palabras como "camisa" o "picante".

¡Disfrútalo! Recuerde incluir su aviso de derechos de autor si lo está usando en un proyecto.

+1

¿Qué archivos usas? – Lucidnonsense

+0

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

25

Si descarga sólo los archivos de base de http://wordnet.princeton.edu/wordnet/download/current-version/ se puede extraer de las palabras mediante la ejecución de estos comandos:

egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z_]*\s" data.adj | cut -d ' ' -f 5 > conv.data.adj 
egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z_]*\s" data.adv | cut -d ' ' -f 5 > conv.data.adv 
egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z_]*\s" data.noun | cut -d ' ' -f 5 > conv.data.noun 
egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z_]*\s" data.verb | cut -d ' ' -f 5 > conv.data.verb 

O si solo deseas palabras sueltas (no subrayados)

egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z]*\s" data.adj | cut -d ' ' -f 5 > conv.data.adj 
egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z]*\s" data.adv | cut -d ' ' -f 5 > conv.data.adv 
egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z]*\s" data.noun | cut -d ' ' -f 5 > conv.data.noun 
egrep -o "^[0-9]{8}\s[0-9]{2}\s[a-z]\s[0-9]{2}\s[a-zA-Z]*\s" data.verb | cut -d ' ' -f 5 > conv.data.verb 
+0

Esto no parece agregar mucho a lo que se dijo hace 4 años. – Mephy

+15

Hable por usted mismo, esto es exactamente lo que necesitaba. Gracias Chilly! –

4

http://icon.shef.ac.uk/Moby/mpos.html

Cada entrada de vocabulario parte-de-voz consta de un campo de palabra o frase seguido de un delimitador de campo de (ASCII 215) y la parte de sp campo EECH que se codifica usando los siguientes símbolos ASCII (caso es significativo):

Noun       N 
Plural       p 
Noun Phrase      h 
Verb (usu participle)   V 
Verb (transitive)    t 
Verb (intransitive)    i 
Adjective      A 
Adverb       v 
Conjunction      C 
Preposition      P 
Interjection     ! 
Pronoun       r 
Definite Article    D 
Indefinite Article    I 
Nominative      o 
9

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.

+0

Muchas gracias por agregar esta útil respuesta a esta pregunta anterior. Definitivamente has hecho mi vida mucho más fácil. Yo habría votado 99 veces más si hubiera podido. –

Cuestiones relacionadas