我试图遍历两个列表的串联列表,这些列表本质上是一袋单词-示例输出yields [['brexit',11),('say',11),('uk',7 ),('eu',6),('deal',5),('may',5),...,('brexit',35),('say',28),,('may ',5),('uk',1),...]
从.txt文件中收集了所有文本输入后,我已经删除了停用词,并使用词干删除了时态中的重复项。
我要采取的下一步是遍历列表,查找给定单词的出现次数差异-我希望将'brexit','say'和'uk'标记为重要单词,要么是两个出现次数,要么就是差异。我的代码开头(部分为python,部分为伪代码)如下。
def findSimilarities (word, count):
for (word, count) in biasDict:
if word == word and count != count:
print (word, count - count)
elif word ==word and count == count:
del (word, count)
(word, count)++
关于如何处理此问题以及如何编辑代码的任何建议?如果更好,我可以让这些单词来自两个单独的列表(这是它们的创建方式;创建它们后将它们串联在一起)。
非常感谢。
答案 0 :(得分:0)
这是一个选择。效率不高,但是输出是所需的。也就是说,如果您要删除具有相同计数的单词(如代码中所示)。如果要保留条目,只需跳过biasDict.remove()部分。 如果您只是对重复出现两次且具有不同计数的单词感兴趣,则可以将元组附加到新列表中,而不必打印差异。然后返回新列表。
import numpy as np
def findSimilarities (biasDict):
similarities = {}
#remove_later = []
for i in range(0, len(biasDict)):
word, count = biasDict[i][0], biasDict[i][1]
for c in range(0, len(biasDict)):
word_compare, count_compare = biasDict[c][0], biasDict[c][1]
if c==i:
pass #Same entry
elif word == word_compare and count != count_compare:
delta = count - count_compare
if word not in similarities and delta != 0:
similarities[word] = np.abs(delta)
#elif word == word_compare and count == count_compare and (word, count) not in remove_later:
# remove_later.append((word, count))
#for entry in remove_later:
# biasDict.remove(entry)
return similarities
biasDict = [('brexit', 11), ('say', 11), ('uk', 7), ('eu', 6), ('deal', 5), ('may', 5), ('brexit', 35), ('say', 28), ('may', 5), ('uk', 1)]
print(findSimilarities(biasDict))
输出:
{'brexit': 24, 'say': 17, 'uk': 6}
答案 1 :(得分:0)
合并事件的想法对我来说似乎不错。这是我的实现。任何评论或优化都表示赞赏。
def merge_list(words_count_list):
updated_list = list()
words_list = list()
for i in range(len(words_count_list)):
word = words_count_list[i][0]
count = words_count_list[i][1]
if word not in words_list:
words_list.append(word)
for j in range(i+1,len(words_count_list),1):
if word == words_count_list[j][0]:
count += words_count_list[j][1]
updated_list.append((word,count))
return updated_list
print(merge_list([('brexit', 11), ('say', 11), ('uk', 7), ('eu', 6), ('deal', 5), ('may', 5),
('brexit', 35), ('say', 28),('may', 5), ('uk', 1)]))
输出:
[('brexit', 46), ('say', 39), ('uk', 8), ('eu', 6), ('deal', 5), ('may', 10)]
现在,您可以指定单词数的阈值,按数量排序,然后删除最重要的单词。
答案 2 :(得分:0)
假设您有两个单词列表,则可以这样做
x
示例输出
i in eachindex(y)