2012-01-11 4 views
2

이것은 아직 프로그래밍 문제가 아닙니다!웹 페이지 비교 - simhash 및 DOM 에지 노드 처리

하지만 웹 페이지를 비교하여 페이지가 동일하거나 유사한 지 확인하고 있습니다. 이것은 개인적인 프로젝트가 아니라 직장/학교 ... (단지 선생님!)

나는 약간의 기본적인 심 보트 구현을 발견했으며, 누군가가 나를 정말 훌륭한 강력한 py/php 심하를 가리킬 수 있는지 궁금해하고 있었다. 이행. 차라리 이것에 바퀴를 재발 명하고 싶지 않아.

또한 잠재적으로 주어진 페이지에 대한 DOM 구조를 계산/생성 한 다음 트리/구조의 "끝/가장자리"노드를 계산하여 이것이 접근 방법이 될지 판단 할 수 있습니다. 페이지의 유사성을 결정합니다.

그래서 주어진 페이지에 대한 DOM 구조 목록을 생성하는 데 사용할 수있는 모든 도구/앱에도 관심이 있습니다. 나는 'net 검색은 py/php/apps에서 여러 종류의 그래프 /리스트를 생성하여 테스트 할 수 있다고 생각했을 것이다.

나는 내 검색에서 잘못된 용어를 사용하고있을 수도 있음을 알 수 있습니다.

그래서 어디를보아야하는지 생각하고 의견을 보내 주시면 감사하겠습니다.

감사

+0

DOM의 변경 사항은 javascript에서 처리 하시겠습니까? 아니면 처음에는 html로 보내시겠습니까? –

+0

내 테스트를 위해, 나는 html/데이터를 가져 왔으며 반환 된 html 문서에서 작업하고 있습니다. 이것은 내가 비교 연구를하는데 관심이있는 부분입니다. 나는 ~ 1000 페이지를 비교할 것이고,이 코퍼스/도메인에서 프로세스는 알고리즘 적으로 고유 한 페이지를 결정해야합니다. 그래서 개발하고자하는 솔루션에는 jscript가 없습니다. 나는 어느 php/python에있을 soln 찾고 있어요. 덕분에 –

+0

흠, 내 질문에 대한 답변 :) 그냥 DOM을 추출하기 전에 브라우저처럼 HTML을 치료할 필요가 없었는지 확인하십시오 같아요. –

답변

0

좋아, 당신은 구문 분석 할 필요가 당신이 사이트에서 JS 그래서 질문의 첫 부분에 대답하기 위해 DOM-에 할 수있는 일에 대해 신경 쓰지 않는다고 말했다 위의 의견에 있도록 lxml, BeautifulSoup 또는 다른 DOM을 생성하는 Python HTML 파서 중 하나를 사용하는 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 
'...' 

에 좋은 해결책처럼 보인다 "파이썬 simhash"python-hashes를 포함한 가능한 구현의 제공을 많이하는 빠른 구글, 나를. 그러나 이것은 C 수준 성능의 이점을 얻을 수있는 일종의 작업이므로 프로덕션 환경에서이 방법을 사용할 계획이라면 Python 바인딩을 사용하여 널리 사용되는 C 구현을 찾을 수 있습니다.

HTH :)

+0

Matt. 나는 이미 simhash 접근법의 테스트 구현뿐만 아니라 여러 페이지가 '유사'한지 결정하기 위해 edgenode/leaves를 보는 데 중점을 둔 몇 가지 구현을 작성했습니다. 저는 실제로 실행 가능성에 대한 의견으로 구현 경험이있는 사람들과 이야기하기를 희망했습니다. 덕분에 –

+1

어쩌면 당신은 조금 질문을 편집 할 수 있을까요? 정확하게 당신이 찾고있는 것을 이해하는 것은 어렵습니다 ... 또한 "용어"에 대한 참고 사항은 일반적으로 트리에서 * 잎 *이라고 부르며 유향 그래프에서 * 싱크 *합니다. "가장자리"라는 용어는 데이터 구조에서 매우 특별한 의미를 지니기 때문에 언급합니다. –