用NLTK寻找整个语料库的三角图

2024-06-26 00:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个脚本,它将浏览我的语料库,其中包含93000个txt文件,并找到所有这些图表的频率分布(因此不是单独的频率分布,而是整个语料库的一个频率分布)。我已经用它来计算语料库中单个文件的频率分布,但根本不具备进一步研究的技能。代码如下:

import nltk
import re
from nltk.corpus.reader.plaintext import PlaintextCorpusReader
from nltk import FreqDist

corpus_root = '/Users/jolijttamanaha/Python/CRspeeches'
speeches = PlaintextCorpusReader(corpus_root, '.*\.txt')

print "Finished importing corpus"

f = speeches.open('Mr. THOMPSON of Pennsylvania.2010-12-07.2014sep17_at_233337.txt')
raw = f.read()
tokens = nltk.word_tokenize(raw)
tgs = nltk.trigrams(tokens)
fdist = nltk.FreqDist(tgs)
for k,v in fdist.items():
    print k,v

提前谢谢你的帮助。在


Tags: 文件fromimporttxtrawrootcorpus频率
2条回答

一旦你用PlaintextCorpusReader定义了你的speeches语料库,你就可以很简单地得到整个语料库的三元组:

fdist = nltk.FreqDist(nltk.trigrams(speeches.words()))

但这有一个不受欢迎的问题:它形成了从一个文件末尾到下一个文件的三元组。但这样的三元组并不代表可以在文本中互相跟随的标记,它们完全是偶然的。您真正想要的是将每个单独文件中的三元数组合起来,可以这样得到:

^{pr2}$

您的fdist现在包含了累积统计信息,您可以用各种可用的方法检查这些统计信息。E、 g

fdist.tabulate(10)

对于预先编码的corporapi,您可以尝试使用corpus.raw(),而不是使用corpus.words(),例如

>>> from nltk.util import ngrams
>>> from nltk.corpus import brown
>>> brown.words()
[u'The', u'Fulton', u'County', u'Grand', u'Jury', ...]
>>> trigrams = ngrams(brown.words(), 3)
>>> for i in trigrams:
...     print i

正如@alexis所指出的,上面的代码也适用于加载了PlaintextCorpusReader的自定义语料库,请参见http://www.nltk.org/_modules/nltk/corpus/reader/plaintext.html

相关问题 更多 >