【问题标题】:Algorithm to analyze a list of URLs and black list URLs with blacklisted words用于分析 URL 列表和带有黑名单字词的黑名单 URL 的算法
【发布时间】:2012-12-14 16:50:25
【问题描述】:

假设文本文件中有一个 URL 列表(以百万为单位),而文本文件中有另一个列表包含列入黑名单的单词。

我愿意对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.

最后我应该有一个列入白名单的 URL 列表

有什么建议可以用来实现最有效的时间和空间复杂度解决方案的最佳算法和 DS 吗?

【问题讨论】:

  • 我强烈反对If there exists a URL containing 50% or more blacklisted words, add the other words of that URL in the list of blacklisted words.。您很可能最终会禁止诸如athatthe 之类的字词,最后以空集作为“白名单”网址
  • 小心这种方法。假设您有一个网站“theblacklistedwordblog.com”。运行此之后,单词 blog 和 the 也将被列入黑名单。我希望你不要限制。
  • 如何定义 URL 的字词?
  • 此外 - 请注意,此方法不是确定性的,并且取决于您扫描文档的顺序。 (因为经过几次算法迭代,获得 50% 列入黑名单的单词会更难),因此早期处理的文档更有可能将其单词“贡献”到黑名单中(与稍后处理的文档相比)
  • 您可能应该阅读一些有关解决类似问题的现有方法的信息。你知道的,贝叶斯过滤、加权、文本处理、马尔可夫模型、机器学习等等。

标签: string algorithm machine-learning spam


【解决方案1】:

使用矩阵来存储 URL。

  1. 首先,用Porter Stemmer将每个URL分解成单词,并放入矩阵中(一个URL一行,一个单词一个项目)。

  2. 然后使用TFIDF对矩阵中的每个单词进行评分,并删除低分词(它们将是'a','the'等流行词,对于判断垃圾邮件没有信息) .

  3. 手动初始化黑名单(放入一些常用的黑字)。

  4. 按照您的要求运行流程即可。

【讨论】:

    【解决方案2】:

    我将只回答这个问题的机器学习部分,并让数据结构/高效文本匹配的东西保持开放。

    首先,如果不确定性是一个问题,您可以在更新之前使用给定版本的黑名单/分类器对数据进行完整传递。这样,无论输入的顺序如何,您都会得到相同的答案。另一方面,我认为决定论不应该被看重。在机器学习中,随机梯度下降不是顺序不变的,但在实践中表现良好,尤其是在大型数据集上。

    其次,您可能需要小心使用直接的黑名单,除非您愿意手动过滤提议的候选术语(甚至可能仍然如此),并且可能希望使用更柔和的概率方法。朴素贝叶斯是可以合理工作的最简单的方法。例如,这可能会让您将有关伟哥的医学文章标记为非垃圾邮件,即使它包含垃圾邮件词,因为它来自非常受信任的主机(如 webmd)。

    您可以使用您手动选择的黑名单术语来生成一组初始的带有负面标签的网址。然后你可以想出另一组正标签(甚至可能从你的语料库中随机挑选,假设它大多是好的),并用它来训练一个初始的朴素贝叶斯分类器。然后,您可以通过执行semi supervised learning 来利用您的想法,即根据特定语料库上的分类器自己的输出来更改分类器。这将从一小部分初始标记文档中为您提供良好的学习/雪崩效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2020-11-08
      • 2017-09-24
      相关资源
      最近更新 更多