Skip to main content
 首页 » 编程设计

Python NLTK之根据标签返回的最高结果计算棕色语料库中单词的出现次数

2025年05月04日13lautakyan007

我正在尝试从特定标签的语料库中返回出现次数最多的值。我可以让标签和单词本身返回正常,但是我无法在输出中返回计数。

import itertools 
import collections 
import nltk  
from nltk.corpus import brown 
 
words = brown.words() 
 
def findtags(tag_prefix, tagged_text): 
cfd = nltk.ConditionalFreqDist((tag, word) for (word, tag) in tagged_text 
                              if tag.startswith(tag_prefix)) 
return dict((tag, cfd[tag].keys()[:5]) for tag in cfd.conditions()) 
 
tagdictNNS = findtags('NNS', nltk.corpus.brown.tagged_words()) 

这将返回以下罚款

for tag in sorted(tagdictNNS): 
    print tag, tagdictNNS[tag] 

我已经设法返回每个基于 NN 的单词的计数:

pluralLists = tagdictNNS.values() 
pluralList = list(itertools.chain(*pluralLists))  
for s in pluralList: 
    sincident = words.count(s) 
    print s 
    print sincident 

这会返回所有内容。

是否有更好的方法将事件插入字典 tagdictNN[tag]?

编辑 1:

pluralLists = tagdictNNS.values()[:5] 
pluralList = list(itertools.chain(*pluralLists)) 

从 for s 循环中按大小顺序返回它们。但这仍然不是正确的方法。

编辑 2:更新词典,以便他们实际搜索 NNS 复数形式。

请您参考如下方法:

我可能不明白,但考虑到你的 tagdictNNS:

>>> new = {} 
>>> for k,v in tagdictNNS.items(): 
        new[k] = len(tagdictNNS[k]) 
>>> new 
{'NNS$-TL-HL': 1, 'NNS-HL': 5, 'NNS$-HL': 4, 'NNS-TL': 5, 'NNS-TL-HL': 5, 'NNS+MD': 2,      'NNS$-NC': 1, 'NNS-TL-NC': 1, 'NNS$-TL': 5, 'NNS': 5, 'NNS$': 5, 'NNS-NC': 5} 

然后你可以这样做:

>>> sorted(new.items(), key=itemgetter(1), reverse=True)[:2] 
[('NNS-HL', 5), ('NNS-TL', 5)]