gpt4 book ai didi

python - 二元组和单词排名

转载 作者:行者123 更新时间:2023-11-30 23:46:26 24 4
gpt4 key购买 nike

我使用此代码来获取二元组的频率:

text1='the cat jumped over the dog in the dog house'
text=text1.split()

counts = defaultdict(int)
for pair in nltk.bigrams(text):
counts[pair] +=1

for c, pair in ((c, pair) for pair, c in counts.iteritems()):
print pair, c

输出是:

('the', 'cat') 1
('dog', 'in') 1
('cat', 'jumped') 1
('jumped', 'over') 1
('in', 'the') 1
('over', 'the') 1
('dog', 'house') 1
('the', 'dog') 2

我需要的是列出二元组,但我需要打印单词的排名,而不是每个单词。当我的意思是“排名”时,我的意思是频率最高的单词排名为 1,第二个单词排名为 2 等...这里的排名是: 1.the 2.dog 和频率相同的单词按降序分配排名。 3.猫4.跳5.过等等..

例如

1 3 1

而不是

('the', 'cat') 1

我相信要做到这一点,我需要一本包含单词及其排名的字典,但我陷入困境,不知道如何继续。我所拥有的是:

fd=FreqDist()
ranks=[]
rank=0
for word in text:
fd.inc(word)
for rank, word in enumerate(fd):
ranks.append(rank+1)

word_rank = {}
for word in text:
word_rank[word] = ranks

print ranks

最佳答案

假设已经创建了 counts,以下内容应该会得到您想要的结果:

freq = defaultdict(int)
for word in text:
freq[word] += 1

ranks = sorted(freq.keys(), key=lambda k: (-freq[k], text.index(k)))
ranks = dict(zip(ranks, range(1, len(ranks)+1)))

for (a, b), count in counts.iteritems():
print ranks[a], ranks[b], count

输出:

1 3 1
2 6 1
3 4 1
4 5 1
6 1 1
5 1 1
2 7 1
1 2 2

以下是一些可能有助于理解其工作原理的中间值:

>>> dict(freq)
{'house': 1, 'jumped': 1, 'over': 1, 'dog': 2, 'cat': 1, 'in': 1, 'the': 3}
>>> sorted(freq.keys(), key=lambda k: (-freq[k], text.index(k)))
['the', 'dog', 'cat', 'jumped', 'over', 'in', 'house']
>>> dict(zip(ranks, range(1, len(ranks)+1)))
{'house': 7, 'jumped': 4, 'over': 5, 'dog': 2, 'cat': 3, 'in': 6, 'the': 1}

关于python - 二元组和单词排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com