【问题标题】:Algorithm to identify marked similarities in html识别html中标记相似性的算法
【发布时间】:2013-02-18 16:58:22
【问题描述】:

我想在一个或多个中找到相似之处(确切地说是它的模式) 不知道其结构的 HTML 页面。

让我们谈谈一个真正简化的示例,其中内容和所有属性都是 删除。

01 <div>
02  <div><table>.*</table></div>
03  <div><table>.*</table></div>
04
05  <div><p></p><img/></div>
06  <div><p></p><img/></div>
07  <div><p></p><img/></div>    
08
09  <div><table>.*</table></div>
10  <div><table>.*</table></div>
11 </div>

我们(人类)可以看到有两种不同类型的模式。这 第一个(与表格一起)出现四次。并且有一个 另一个带有图像标签的,三遍。这很容易(对人类来说)。

我想写的完美模块会返回如下结果集:

$VAR = [ { reduced_pattern => '<div><table>.*</table>div>',
           real_pattern => '<!-- the real pattern -->',
           hits => [{ line => 02,
                      content => "<div><table>foo 1</table></div>",
                      relevance => 0,9,
                    },
                    { line => 03,
                      content => "<div><table>foo 2</table></div>",
                      relevance => 0,95,
                    },   
                    { line => 09,
                      content => "<div><table>foo 3</table></div>",
                      relevance => 0,87
                    },
                    { line => 10,
                      content => "<div><table>foo 4</table></div>",
                      relevance => 0,80
                    }
                   ]
         }, 
         { real_pattern => '<!-- the real pattern -->',
                 hits => [{ line => 05,
                      content => "<div><p>bar 1</p><img/></div>",
                      relevance => 0,79,
                    },
                    { line => 06,
                      content => "<div><p>bar 2</p><img/></div>",
                      relevance => 0,95,
                    },   
                    { line => 07,
                      content => "<div><p>bar 3</p><img/></div>",
                      relevance => 0,80
                    }
                   ],
         }
        ];  

类似的东西。

问题是关于算法的。我搜索了“识别标记相似性的算法”。和网络上的类似句子,在 SO 和 CPAN 上,但没有找到匹配好的东西。 (我知道有很多,我读了很多。)

RegExp 不考虑在内,因为您必须知道要搜索的内容。 我假设它可以用神经网络来完成,但学习可能很困难。 Fuzzy Hashes(如 sssdeep 中)也可能是一个解决方案。还是我应该更好地从 k-means 或 mahout 的方向开始?

感谢您的回答和cmets!

【问题讨论】:

  • 仍然不确定你想要实现什么,无论如何我会选择一些简单的 ml 算法,例如决策树,您可以在其中查看决策是如何做出的......
  • 是的,这里也一样,不是很明白这个问题..
  • 如果您希望根据 HTML 结构实现相似性,您可能需要考虑 树挖掘(在 Academic.google.com 上搜索)。要利用实际内容,请将其与词袋方法与您选择的机器学习方法相结合。这里只是一些通用的想法。
  • @Timo:我将仔细研究树挖掘。谢谢。
  • 也许你可以使用最长公共子序列算法

标签: html algorithm machine-learning similarity


【解决方案1】:

我也有点难以完全理解您的问题,但是如果您希望将页面分类为两种不同的类型,那么要研究的一种算法可能是 Support Vector Machines。如果您能够生成预先分类的数据集,那么Hidden Markov Models 可能是要走的路。正如 xhudik 建议的那样,甚至可以使用决策树。

如果您正在寻找具体的答案,我们深表歉意,但我认为需要更多信息(例如 2-3 个 html 示例以及如何对这些示例进行分类)来确定您想要实现的目标。

编辑:另外,你看过clustering吗?如果您需要智能统计分组,WekaOrange 等产品可以为您提供帮助。

【讨论】:

  • SVM 听起来很有趣,但我不想预测什么。结果应根据现有值计算。我不确定 HMM,但 ML 和听起来不错。那将是在树中搜索 LCS。但应避免序列重叠。
  • 在阅读了 cmets 和相关文章后,我(返回)到了一个图表。我认为对我想要做的最好的描述是:在有向图中找到公共子树,其中路径不重叠。
  • 不幸的是,我对机器学习中的图的方式了解不多。我想说 Timo 的上述建议似乎是我能说的最合适的。
猜你喜欢
  • 1970-01-01
  • 2020-08-09
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 2011-12-11
相关资源
最近更新 更多