Как считать слова в корпусном документе - PullRequest
1 голос
/ 15 ноября 2011

Я хочу знать, как лучше всего посчитать слова в документе.Если у меня есть собственная настройка corp.txt, и я хочу узнать, как часто в файле «corp.txt» встречаются «студенты, доверие, ayre».Что я мог бы использовать?

Было бы одно из следующего:

....
full=nltk.Text(mycorpus.words('FullReport.txt'))
>>> fdist= FreqDist(full)
>>> fdist
<FreqDist with 34133 outcomes>
// HOW WOULD I CALCULATE HOW FREQUENTLY THE WORDS 
"students, trust, ayre" occur in full.

Спасибо, Рэй

Ответы [ 4 ]

4 голосов
/ 06 апреля 2014

Я бы посоветовал заглянуть в коллекции. Счетчик. Это особенно важно для больших объемов текста и ограничено только доступной памятью. Он насчитывал 30 миллиардов токенов за полтора дня на компьютере с 12 ГБ оперативной памяти. Псевдокод (переменная Words на практике будет некоторой ссылкой на файл или подобный файл):

from collections import Counter
my_counter = Counter()
for word in Words:
    my_counter.update(word)

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

3 голосов
/ 15 ноября 2011

Большинство людей просто используют defaultdictionary (со значением по умолчанию 0).Каждый раз, когда вы видите слово, просто увеличивайте значение на единицу:

total = 0
count = defaultdict(lambda: 0)
for word in words:
    total += 1
    count[word] += 1

# Now you can just determine the frequency by dividing each count by total
for word, ct in count.items():
     print('Frequency of %s: %f%%' % (word, 100.0 * float(ct) / float(total)))
2 голосов
/ 11 июля 2012

Вы почти у цели!Вы можете индексировать FreqDist, используя слово, которое вас интересует. Попробуйте следующее:

print fdist['students']
print fdist['ayre']
print fdist['full']

Это даст вам количество или число вхождений каждого слова.Вы сказали «как часто» - частота отличается от количества вхождений - и это можно получить так:

print fdist.freq('students')
print fdist.freq('ayre')
print fdist.freq('full')
0 голосов
/ 07 апреля 2014

Вы можете прочитать файл, а затем токенизировать и поместить отдельные токены в FreqDist объект в NLTK, см. http://nltk.googlecode.com/svn/trunk/doc/api/nltk.probability.FreqDist-class.html

from nltk.probability import FreqDist
from nltk import word_tokenize

# Creates a test file for reading.
doc = "this is a blah blah foo bar black sheep sentence. Blah blah!"
with open('test.txt', 'w') as fout:
    fout.write(doc)

# Reads a file into FreqDist object.
fdist = FreqDist()
with open('test.txt', 'r') as fin:
    for word in word_tokenize(fin.read()):
        fdist.inc(word)

print "'blah' occurred", fdist['blah'], "times"

[вне]:

'blah' occurred 3 times

В качестве альтернативы вы можете использовать собственный Counter объект из collections и получить те же значения, см. https://docs.python.org/2/library/collections.html. Обратите внимание, что ключи в объекте FreqDist или Counter чувствительны к регистру, поэтому вы можете хочу, чтобы ваш токенизировался:

from collections import Counter
from nltk import word_tokenize

# Creates a test file for reading.
doc = "this is a blah blah foo bar black sheep sentence. Blah blah!"
with open('test.txt', 'w') as fout:
    fout.write(doc)

# Reads a file into FreqDist object.
fdist = Counter()
with open('test.txt', 'r') as fin:
    fdist.update(word_tokenize(fin.read().lower()))

print "'blah' occurred", fdist['blah'], "times"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...