在子二次时间中删除“几乎重复”的字符串

时间:2014-01-10 15:16:11

标签: algorithm data-mining

我正在尝试在现实数据集(酒店评论)上进行机器学习。不幸的是,它受到垃圾邮件的困扰,垃圾邮件的形式几乎完全相同,这对我来说非常复杂。

我想基于编辑距离或类似的东西从数据集中删除“几乎重复”,并且由于数据集大小> 100K,因此算法必须是数据集大小的次级二次。现在我只能想到标记过于频繁重复的单个句子或短语,然后删除所有带有它们的评论,但很容易看出这种策略如何适得其反。是否有更好的通用算法?

2 个答案:

答案 0 :(得分:4)

显然,整体解决这个问题可能涉及撰写一份体面的研究论文。这是我的建议。

在生物信息学中,我们一直面临着这个问题。最常用的算法是BLAST(http://en.wikipedia.org/wiki/BLAST)。请仔细阅读算法,您可能会了解所涉及的内容。

答案 1 :(得分:0)

快速而肮脏的方法是找到评论中出现的关键词并将其存储在通用词典中,然后扫描每个文档中的这些词。为每个文档创建关键字的哈希表。然后比较所有文档对然后评估每对中相似关键字的计数,然后如果它大于阈值然后将它们标记为相似,则可以使用快速联合查找数据结构来查找两个文档的联合(如果相似)。最后,您将拥有一组类似的文档。

注意:我无法想到任何使其成为次级二次方的方法,但我似乎很难,因为如果你需要查找是否有类似文件,你需要在最坏的情况下检查所有文件对。