- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在一个或多个中找到相似之处(确切地说是它的模式)不知道其结构的 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 的方向开始?
感谢您的回答和评论!
最佳答案
我也在努力完全理解你的问题,但是要研究的一种算法可能是 Support Vector Machines如果您希望将页面分为两种不同的类型。如果您能够生成预先分类的数据集,那么 Hidden Markov Models可能是要走的路。正如 xhudik 所建议的,甚至可以使用决策树。
很抱歉,如果您正在寻找具体的答案,但我认为需要更多信息(例如 2-3 个 html 示例以及如何对这些示例进行分类)来确定您想要实现的目标。
编辑:此外,您是否调查过clustering ? Weka等产品和 Orange如果您想要的是智能统计分组,可以为您提供帮助。
关于html - 识别 html 中显着相似性的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941408/
我是一名优秀的程序员,十分优秀!