【发布时间】: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