2015-09-01 99 views
0

对不起,但对我来说很困难: 我有一些基本频率的代码用于某些文本,它代表“most_common”模式下的输出。但它用文字表示。Python的NLTK字词频率在分区

def sym(senten): 
    stopwords = nltk.corpus.stopwords.words("english") 
    V = [",", ".", "'", "(", ")", '"', "'", ":", "it", "may", "I", "the", "but", "two", "this", "since", "for", "whether", "and", "?", "if", "even", "Mr.", "also", "at", "p."] 
    content = [w for w in senten if w not in stopwords and w not in V] 
    fd = nltk.FreqDist(content) 
    fdc = fd.most_common(75) 
    return fdc 

为了进一步分析,我需要频率代码,它代表我在sents(句子)中的输出。所以,输出必须向我显示按位置排列的单词频率选择的sents。

我有一些想法用“制表”来实现它。有一个代码(例如):

S= ["proposition", "modus", "logic", "2"] #The most frequent words(for example) 
cfd = nltk.ConditionalFreqDist(
    (senten, S) 
    for senten in senten 
    for S in senten) 
print cfd.tabulate(conditions = senten, 
      samples=S) 

它的作品,但也有大约不常用的单词的句子太多毫无意义的数据。

我会感谢您的想法,这可以解决我的问题。

+0

你的意思是* sents *,*句子*! –

+0

原因!我很抱歉。 – mannheim

+2

你可以请示例输入句子和样品输出吗? –

回答

0

分两步做。你已经有了能找到最常用词的代码,所以这很好。现在建立一个索引(一个字典),它会告诉你每个单词,哪些句子包含它。所以这本词典中的关键词应该是单词,价值将成为整个句子的列表 - 基本上与你试图做到这一点相反。您将多次添加每个句子(不要担心它实际上不会被复制,因此效率很高)。

这本词典不需要计算任何东西 - 你只会看单词。因此,您可以使用普通的dict,或使用collections.defaultdict以方便使用。最后一步是使用当前函数获取最常见单词的列表,并且对于每个这样的单词,您可以简单地请求包含它的所有句子。够清楚了吗?

+0

谢谢!我会试试看。 – mannheim