假设文本文件中有一个URL列表(以百万为单位),并且在包含列入黑名单的单词的文本文件中还有另一个列表。
我愿意在网址列表上进行以下处理。
- Parse the URLs and store them in some DS
- Process the URLs and blacklist those URLs which contain atleast one of the
blacklisted words.
- If there exists a URL containing 50% or more blacklisted words, add the other
words of that URL in the list of blacklisted words.
- Since now the blacklisted words list has been modified then it's probable
that the URLs which were not blacklisted earlier can get blacklisted now. So,
the algorithm should handle this case as well and mark the earlier whitelisted
URLs as blacklisted if they contain these newly added blacklisted words.
最后,我应该有一个列入白名单的网址列表
有什么建议可以用来实现最有效的时间和空间复杂度解决方案的最佳算法和DS?
答案 0 :(得分:1)
使用矩阵存储网址。
首先,将每个网址划分为Porter Stemmer的单词,并将它们放在矩阵中(一行为一行,一行为一个词)。
然后使用TFIDF对矩阵中的每个单词进行评分,并删除低分词(它们将是流行的单词,如'a','the'等,这些单词对判断不起作用垃圾邮件)。
手动初始化黑名单(将一些常见的黑色字放入其中)。
按照您的指示运行流程。
答案 1 :(得分:1)
我将回答有关此问题的机器学习部分,并保持数据结构/高效文本匹配的内容。
首先,如果非确定性是一个问题,您可以在更新之前使用给定版本的黑名单/分类器对数据进行整个传递。这样,无论输入顺序如何,您都将获得相同的答案。另一方面,我认为决定论不应该高于一切。在机器学习中,随机梯度下降不是阶不变的,但它在实践中表现良好,特别是在大型数据集上。
其次,你可能要小心直接黑名单,除非你愿意手动过滤提议的候选术语(甚至可能仍然如此),并且可能想要使用更软的概率方法。天真的贝叶斯是最简单的方法,可以合理地工作。例如,这可能会让您将关于伟哥的医疗文章标记为非垃圾邮件,即使它包含垃圾邮件,因为它来自非常可靠的主机(如webmd)。
您可以使用手动选择的黑名单字词来生成一组初步的负面标记的网址。然后你可以拿出另一组正面标签(甚至可能从你的语料库中随机挑选,假设它大部分都是好的),然后使用它来训练一个初始的朴素贝叶斯分类器。然后,您可以通过semi supervised learning利用您在特定语料库中根据自己的输出更改分类器的想法。这将通过一小组初始标记文档为您提供良好的学习/雪崩效果。