2010-02-18 4 views
21

Обычно списки слов - это 1 файл, содержащий все, но есть ли отдельно загружаемый список существительных, список глаголов, список прилагательных и т. Д.?Отдельные списки слов для существительных, глаголов, прилагательных и т. Д.

Мне нужны они специально для английского языка.

ответ

8

См. Kevin's word lists. В частности, «Часть речевой базы данных». Вам нужно будет сделать небольшую текстовую обработку самостоятельно, чтобы получить базу данных в несколько файлов для себя, но это можно сделать очень легко с помощью нескольких команд grep.

Условия лицензии доступны на странице «readme».

30

Это результат высокого рейтинга Google, поэтому я выкапываю этот двухлетний вопрос, чтобы дать гораздо лучший ответ, чем существующий.

На странице «Списки слов Кевина» представлены старые списки с 2000 года на основе WordNet 1.6.

Вам гораздо лучше пойти в http://wordnet.princeton.edu/wordnet/download/current-version/ и загрузить WordNet 3.0 (версия только для базы данных) или любую другую последнюю версию, когда вы читаете это.

Разбор очень прост; просто примените регулярное выражение "/^(\S+?)[\s%]/", чтобы захватить каждое слово, а затем замените все "_" (подчеркивание) в результатах пробелами. Наконец, дамп ваши результаты в любой формат хранения, который вы хотите. Вам будут предоставлены отдельные списки прилагательных, наречий, существительных, глаголов и даже специальный (очень бесполезный/полезный в зависимости от того, что вы делаете) список, называемый «чувства», который относится к нашим чувствам обоняния, зрения, слуха и т. Д. , т.е. такие слова, как «рубашка» или «острая».

Наслаждайтесь! Не забудьте включить их уведомление об авторских правах, если вы используете его в проекте.

+1

Какие файлы вы используете? – Lucidnonsense

+0

Обратите внимание, что WordNet 3.0 не ** содержит ** сопряжения, например. если вы ищете слово «есть» в списке глаголов, оно ничего не придумает. Конечно, «быть» там, так что глагол есть, а не сопряжение. – Luc

25

Если вы загружаете только файлы базы данных из http://wordnet.princeton.edu/wordnet/download/current-version/ вы можете извлечь слова, выполнив следующие команды:

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 

Или, если вы хотите только отдельные слова (нет подчеркивания)

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

Это не похоже на то, что было сказано 4 года назад. – Mephy

+15

Говорите сами, это именно то, что мне нужно. Спасибо, Chilly! –

4

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

Каждая запись словарной части словаря состоит из слова или фразового поля, за которым следует разделитель полей (ASCII 215) и часть-sp eech поле, которое кодируется с использованием следующих ASCII символов (случай имеет большое значение):

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

Как уже предложили, то WordNet database files являются отличным источником для частей речи. Тем не менее, примеры, используемые для извлечения слов, не совсем корректны. Каждая строка на самом деле представляет собой «набор синонимов», состоящий из нескольких синонимов и их определения. Около 30% слов появляются только как синонимы, поэтому простое извлечение первого слова пропускает большой объем данных.

Формат строки довольно прост для синтаксического анализа (search.c, функция parse_synset), но если все, что вы заинтересованы в слова, то соответствующая часть строки в формате:

NNNNNNNN NN a NN word N [word N ...] 

Они соответствуют чтобы:

  • байтовое смещение в пределах файла (8 символов целого числа)
  • номер файла (2 символа целое число)
  • Части речи (1 символ)
  • Количества слов (2 символа, шестнадцатеричное)
  • N вхождений ...
    • Слово с пробелами заменяются символы подчеркивания, дополнительный комментарий в скобках
    • Слово лексический ID (уникальный случай ID)

Например, из data.adj:

00004614 00 s 02 cut 0 shortened 0 001 & 00004412 a 0000 | with parts removed; "the drastically cut film" 
  • Byte смещение в файле 4614
  • номер файла 0
  • Часть речи s, соответствующее прилагательное (wnutil.c, функция getpos)
  • Количество слов 2
    • Первое слово is cut с лексикой ID 0
    • Второе слово shortened с лексической ID 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 
    } 
} 

Сущностью вышеприведенного сценария можно найти here.
Более надежный парсер, который остается верным исходному источнику, можно найти here.

Оба сценария используются аналогичным образом: ./wordnet_parser.pl DATA_FILE.

+0

Благодарим вас за добавление этого полезного ответа на этот старый вопрос. Вы определенно сделали мою жизнь намного легче. Если бы я мог, я бы увеличил еще 99 раз. –