用于识别html中标记的相似性的算法

时间:2013-02-18 16:58:22

标签: html algorithm machine-learning similarity

我想在一个或多个中找到相似之处(确切地说是它的模式) 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的方向开始?

感谢您的回答和评论!

1 个答案:

答案 0 :(得分:0)

我也在努力完全理解你的问题,但是如果你想将页面分为两种不同的类型,那么要研究的算法可能是Support Vector Machines。如果您能够生成预先分类的数据集,那么Hidden Markov Models可能是最佳选择。正如xhudik建议的那样,甚至可以使用决策树。

如果您正在寻找特定答案,请抱歉,但我认为需要更多信息(例如,2-3个html示例以及如何对其进行分类)以确定您想要实现的目标。

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