我是python中的新手,并且一直在尝试不同的问题,这些问题向我介绍了不同的模块和功能(我发现它是一种很好的学习方式)。
我已经搜索了很多,但没有发现任何接近解决问题的方法。
我在脸书上有各种各样的Facebook帖子的大量数据集,用它作为媒介传播知识。
我想从这些内容相同的帖子中创建群组。
例如,其中一个帖子是“xyz.com正在销售免费域名。请在xyz.com注册” 另一个是“每个人都需要在xyz.com再次注册。由于服务器故障,所有数据都已丢失。”
这些都是相似的,因为他们都要求进入该组织的网站并注册。
P.S:只是澄清一下,如果任何一个链接都是abc.com,它们就不会相似。优先级是源,然后是操作(此处正在注册的操作)。
在python中有一种简单的方法吗? (可能是一个模块?)
我知道它需要某种聚类算法(如果我错了,请纠正我),我的问题是python能让我的工作变得更容易吗?一些模块或什么?
非常感谢任何帮助!
答案 0 :(得分:0)
假设你有一个名为geturls
的函数,它接受一个字符串并返回其中包含的url列表,我会这样做:
from collections import defaultdict
groups = defaultdict(list):
for post in facebook_posts:
for url in geturls(post):
groups[url].append(post)
答案 1 :(得分:0)
这在很大程度上取决于您对“内容相同”的定义。一种直接的方法是使用所谓的术语频率 - 反向文档频率(TFIDF)模型。
简单地说,在所有帖子中列出所有单词的长列表,过滤掉停用词(文章,决定者等),并为每个文档(=帖子)计算每个术语出现的频率,并将其乘以团队的重要性(这是反向文档频率,通过记录该术语发生的文档的比率来计算)。这样,非常罕见的词比普通词更重要。
你最终会得到一张巨大的表格,其中每个文档(我们在这里谈论的是组帖子)都由一个(非常稀疏的)术语向量表示。现在您有一个比较文档的指标。由于您的文档非常短,只有少数术语会非常高,因此类似文档可能是同一术语达到最高分的文档(即文档向量的最高组成部分相同),或者可能是欧几里德三个最高值之间的距离低于某个参数。这听起来很复杂,但(当然)有a module for that。