構造を知らなくても、1 つまたは複数の 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>
私たち (人間) は、2 つの異なるタイプのパターンがあることがわかります。最初のもの (表を含む) は 4 回発生します。もう1つはイメージタグ付きで、3回あります。それは簡単です(人間にとって)。
私が書きたい完璧なモジュールは、次のような結果セットを返します。
$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 の方向から開始する必要がありますか?
あなたの答えとコメントをありがとう!