我想在一个或多个中找到相似之处(确切地说是它的模式) 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没有考虑在内,因为你必须知道你在搜索什么。 我认为它可以通过神经元网络完成,但学习可能很困难。 模糊哈希(如在sssdeep中)也可能是一种解决方案。或者我应该从k-means或mahout的方向开始?
感谢您的回答和评论!
答案 0 :(得分:0)
我也在努力完全理解你的问题,但是如果你想将页面分为两种不同的类型,那么要研究的算法可能是Support Vector Machines。如果您能够生成预先分类的数据集,那么Hidden Markov Models可能是最佳选择。正如xhudik建议的那样,甚至可以使用决策树。
如果您正在寻找特定答案,请抱歉,但我认为需要更多信息(例如,2-3个html示例以及如何对其进行分类)以确定您想要实现的目标。
编辑:另外,你有没有看过clustering?如果您想要的是智能统计分组,Weka和Orange等产品可以为您提供帮助。