我有一个有数据挖掘元素的任务。我需要找出哪些作者在几个出版物的网页上协作最多。
我已经抓取了网页,并将作者的文本编成了一个列表。
我当前的输出如下:
for author in list:
print(author)
##output :
['Author 1', 'Author 2', 'Author 3']
['Author 2', 'Author 4', 'Author 1']
['Author 1', 'Author 5', 'Author 6', 'Author 7', 'Author 4']等等~100多行。
我的想法是,在列表的每个部分,生成另一个列表,其中包含该列表中的每个唯一对。例如,第三行演示将给出“作者1+作者5”、“作者1+作者6”、“作者1+作者7”、“作者1+作者4”、“作者5+作者6”、“作者5+作者7”、“作者5+作者4”、“作者6+作者7”、“作者6+作者4”、“作者7+作者4”。然后,我将这些对列表附加到一个大列表中,并将其放在一个计数器上,以查看哪些对出现得最多。
问题是,我只是不知道如何真正实现配对匹配器,所以如果有人有任何指针,那就太棒了。我相信答案不会那么复杂,但我一直找不到答案。关于如何衡量合作的其他想法也会很好。
发布于 2022-02-14 21:44:29
似乎您希望为给定的列表生成大小为2的所有子集。itertools将这样做:
import itertools
for author in lists:
a = list(itertools.combinations(author, 2))
print(a)发布于 2022-02-14 21:36:27
您可以使用字典,其中对是键,数字发生的频率是值。您需要确保始终为(Author1,Author2)和(Author2, Author1)生成相同的键,但是可以选择字母顺序来处理。
然后,当您遇到它时,只需增加为该对存储的数量。
发布于 2022-02-14 21:43:27
您只需使用itertools从列表中生成所有对,就可以使用它自己计算列表的笛卡尔积:
import itertools
a = ['Author 1', 'Author 5', 'Author 6', 'Author 7', 'Author 4']
list(itertools.product(a, a))https://stackoverflow.com/questions/71118511
复制相似问题