【发布时间】:2021-02-23 15:13:58
【问题描述】:
我有一个如下所示的元组列表:
[(('review', 'shop', 'draw'), 35),
(('shop', 'drawing', 'review'), 32),
(('field', 'review', 'report'), 24),
(('review', 'shop', 'drawing'), 20),
(('shop', 'drawing', 'return'), 20),
(('shop', 'draw', 'review'), 18),
(('site', 'review', 'report'), 17),
(('respond', 'rfi', 'regard'), 15),
(('review', 'fire', 'alarm'), 11),
(('review', 'lighting', 'shop'), 10)]
我想将那些相似的元素与它们的计数一起合并:
from nltk.stem import PorterStemmer
for elm in trigram_counts:
ngrams = list(elm[0])
stemmed_ngrams = []
for gram in ngrams:
stemmed_ngrams.append(porter.stem(gram))
print(stemmed_ngrams, elm[1])
这给出了这样的东西:
['review', 'shop', 'draw'] 35
['shop', 'draw', 'review'] 32
['field', 'review', 'report'] 24
['review', 'shop', 'draw'] 20
['shop', 'draw', 'return'] 20
['shop', 'draw', 'review'] 18
['site', 'review', 'report'] 17
['respond', 'rfi', 'regard'] 15
['review', 'fire', 'alarm'] 11
['review', 'light', 'shop'] 10
我的目标是将 ['review', 'shop', 'draw'] 和 ['shop', 'draw', 'review'] 与它们对应的总和合并为 67
我认为我通过循环遍历所有元素使我的解决方案变得复杂。
【问题讨论】:
-
trigram_counts是保存您的元组列表的变量吗? -
相似的标准是什么?元组包含相同的(三个)字符串,并且顺序无关紧要?如果一个元组是
('review', 'shop', 'draw', 'fire')而另一个元组是('review', 'shop', 'draw')怎么办;这些相似吗? -
我会使用以
set(inner_tuple)为关键字的字典。 -
不是添加到
list,而是添加到set。然后将集合转换为tuple,使用tuple作为dict的键,其值是您想要该集合的总和的总和 -
您可以对元组进行排序以比较它们是否相等。