2012-01-11 17 views
2

これはプログラミングの問題ではありません!ウェブページの比較 - simhash、DOMエッジノード処理

しかし、ウェブページを比較してページが同じか類似しているかどうかを調べています。

私はいくつかの基本的なsimhashの実装を見つけました。誰かが私に本当に良い堅牢なpy/php simhashを指すことができるかどうか疑問に思っていました。実装。私はむしろ、これについての車輪を再発明しないだろう。

また、特定のページのDOM構造を計算/生成し、ツリー/構造の「終了/エッジ」ノードを計算して、これがアプローチの可能性があるかどうかを判断することも可能ですページの類似性を判断する。

私はまた、特定のページのDOM構造のリストを生成するために使用できる任意のツール/アプリに興味があります。私はネット検索がテスト目的のためにこの種のグラフ/リストを生成するpy/php/appsの数をもたらしたと思ったでしょう。

私の検索で間違った用語を使用している可能性があります。

だから、どこに見えるかについての考えやコメント、考慮すべき点は大歓迎です。

おかげ

+0

あなたはjavascriptからのdomへの変更、または最初に配信されたhtmlを気にしますか? –

+0

私のテストのために、私はhtml /データを取得し、返されたhtmlドキュメントで作業しています。これは私が比較研究に興味を持っていることです。私は〜1000ページを比較するつもりです。このコーパス/ドメインから、プロセスはアルゴリズム的にユニークなページを決定しなければなりません。開発する予定のソリューションにはjscriptはありません。私はいずれかのPHP/Pythonになるsolnを探しています。ありがとう –

+0

私は質問に答えてくれると思います:) DOMを抽出する前にブラウザのようにHTMLを扱う必要がないことを確認するだけです。 –

答えて

0

さて、あなた上記のコメントにあなたはサイトからJSは、質問の最初の部分に答えるためにそう、DOMに行うかもしれないものを気にしなかったことを言ったので、あなたが解析する必要がありますlxml、BeautifulSoup、または他のDOMを生成するPython HTMLパーサの1つを使用するHTML。

は例えば、lxmlのを使用して、あなたはすべての「リーフ」の要素

を得ることができます
>>> from lxml import etree 
>>> html = etree.HTML("<html><body><div class='content'>...</div><div class='advert'>....</div></body></html>") 
>>> leaves = [d for d in html.iterdescendants() if len(d.getchildren()) == 0] 
>>> leaves[0].text 
'...' 

に良い解決策のように見える「Pythonのsimhash」python-hashes含めて可能な実装の提供たくさんのクイックグーグル、私。しかし、これはCレベルのパフォーマンスの恩恵を受ける操作の一種なので、プロダクションでこれを大規模に使う予定があるなら、Pythonバインディングでよく使われるCの実装を見つけることができます。

HTH :)

+0

Matt。私はすでに、simhashアプローチのテスト実装を作成しました。また、edgenode/leavesを調べて、複数のページが「似ている」かどうかを判断するいくつかの実装も作成しました。私は、実際には、実行可能性に関する彼らの意見の観点から実装を経験したかもしれない他の人と話をすることを望んでいました。ありがとう –

+1

あなたは少し質問を編集することができますか?ちょうどあなたが探しているものを理解するのは難しいです... また、用語「エンドノード」に関する注釈は、ツリー内で* leaves *と呼ばれ、有向グラフで*シンク*します。 「エッジ」という用語はデータ構造に非常に特別な意味を持っているため、これについて言及します。 –

関連する問題