Как найти частоту слова в английском с помощью WordNet? - PullRequest
13 голосов
/ 08 мая 2011

Есть ли способ найти частоту использования слова в английском языке, используя WordNet или NLTK, используя Python?

ПРИМЕЧАНИЕ: я не хочу подсчет частоты слова в заданном входефайл.Я хочу, чтобы подсчет частоты слова в целом основывался на использовании в настоящее время.

Ответы [ 6 ]

15 голосов
/ 11 сентября 2012

В WordNet каждая лемма имеет счетчик частот, который возвращается методом lemma.count() и который сохраняется в файле nltk_data/corpora/wordnet/cntlist.rev.

Пример кода:

from nltk.corpus import wordnet
syns = wordnet.synsets('stack')
for s in syns:
    for l in s.lemmas():
        print l.name + " " + str(l.count())

Результат:

stack 2
batch 0
deal 1
flock 1
good_deal 13
great_deal 10
hatful 0
heap 2
lot 13
mass 14
mess 0
...

Однако многие отсчеты равны нулю, и в исходном файле или в документации отсутствует информация о том, какой корпус использовался для создания этих данных.Согласно книге Обработка речи и языка от Даниэля Джурафски и Джеймса Х. Мартина, чувственные частоты поступают из корпуса SemCor , который является подмножеством ужемаленький и устаревший Brown Corpus.

Так что, вероятно, лучше выбрать корпус, который лучше всего подходит для вашего приложения, и создать данные самостоятельно, как предложил Кристофер.

Чтобы сделать этот Python3.x совместимым простоdo:

Пример кода:

from nltk.corpus import wordnet
syns = wordnet.synsets('stack')
for s in syns:
    for l in s.lemmas():
        print( l.name() + " " + str(l.count()))
8 голосов
/ 11 мая 2011

Вы можете сделать это, используя коричневый корпус, хотя он устарел (последний раз пересмотрен в 1979 году), поэтому в нем пропущено множество текущих слов.

import nltk
from nltk.corpus import brown
from nltk.probability import *

words = FreqDist()

for sentence in brown.sents():
    for word in sentence:
        words.inc(word.lower())

print words["and"]
print words.freq("and")

Затем вы можете cpickle FreqDist в файл для быстрой загрузки позже.

Корпус - это, по сути, просто файл, полный предложений, по одному на строку, и существует множество других корпусов, так что вы, вероятно, можете найти тот, который соответствует вашим целям. Несколько других источников более современных корпораций: Google , American National Corpus .

Вы также можете получить текущий список из 60 000 лучших слов и их частот от Корпус современного американского английского

2 голосов
/ 20 ноября 2013

Проверьте этот сайт на частоты слов: http://corpus.byu.edu/coca/

Кто-то составил список слов, взятых с opensubtitles.org (сценарии фильма). Есть бесплатный простой текстовый файл, отформатированный как этот, доступный для загрузки. На разных языках.

you 6281002
i 5685306
the 4768490
to 3453407
a 3048287
it 2879962

http://invokeit.wordpress.com/frequency-word-lists/

2 голосов
/ 23 мая 2011

Взгляните на раздел «Информационное содержимое» проекта Wordnet Similarity по адресу http://wn -sdentifity.sourceforge.net / .Там вы найдете базы данных частот слов (или, скорее, информационный контент, который получается из частоты слов) лемм Wordnet, рассчитанных по нескольким различным корпусам.Исходные коды написаны на Perl, но базы данных предоставляются независимо и могут быть легко использованы с NLTK.

1 голос
/ 07 августа 2013

Проект Wiktionary имеет несколько частотных списков на основе телевизионных сценариев и Project Gutenberg, но их формат не особенно удобен для анализа.

1 голос
/ 08 мая 2011

Вы не можете этого сделать, потому что это сильно зависит от контекста.Мало того, что для менее частых слов частота будет сильно зависеть от выборки.

Лучше всего вам, вероятно, найти большой корпус текста данного жанра (например, скачать сто книг из Спроектируй Гутенберга ) и посчитай слова сам.

...