문제

이것은 실제로 프로그래밍 질문이 아니라 더 많은 알고리즘 문제입니다.

문제 : HTML 페이지의 "콘텐츠"섹션 찾기.

"내용"이라는 의미는 인간이 보이는 페이지 내용을 포함하는 DOM을 의미합니다. 나는 문제가 잘 정의되지 않았다는 것을 알고 있지만 계속하자 ... 블로그 사이트에서는 일반적으로 특정 게시물을 탐색 할 때 일반적으로 페이지 상단에 일부 툴바가 있는데, 아마도 일부 탐색 요소가 LHS와 컨텐츠가 포함 된 DIV가 있습니다. HTML에서 이것을 알아내는 것은 까다로울 수 있습니다. 그러나 운 좋게도 대부분의 블로그에는 RSS 피드가 있으며이 특정 게시물의 피드에는u003Cdescription> 섹션 (또는u003Ccontent:encoded> ) 그리고 이것이 바로 당신이 원하는 것입니다. 따라서 컨텐츠의 정의를 개선하기 위해 이것은 흥미로운 부분이 포함되어있는 실제 광고, 내비게이션 요소 등을 제거하는 실제입니다. 따라서 블로그에서 컨텐츠를 찾는 것은 RSS가 있다고 가정 할 때 비교적 쉽습니다. 다른 RSS 지원 사이트에서도 마찬가지입니다.

뉴스 사이트는 어떻습니까? 많은 경우 뉴스 사이트에는 RS가 있지만 항상 그런 것은 아닙니다. 그러면 뉴스 사이트에서 콘텐츠를 어떻게 찾습니까? 더 일반적인 사이트는 어떻습니까? 많은 웹 페이지 (물론 모든 것이 아닙니다)에는 컨텐츠 섹션 및 기타 섹션이 있습니다. "흥미로운"섹션을 찾기위한 좋은 알고리즘을 생각할 수 있습니까? 아마도 변하지 않는 부분에서 바뀌는 섹션은 아마도?

내가 분명하게 만들었 으면 좋겠어 ... 감사합니다!

도움이 되었습니까?

해결책

나는 이것을하지 않았지만 이것은 나의 일반적인 접근법 일 것이다.

당신이 알 수 있듯이, 가시 컨텐츠 부분의 구조 부족 (즉, 예 : 태그가 없습니다. header, navigation, ads)의 HTML은 페이지의 핵심 부분에서 집에 가기가 더 어렵다는 것을 의미합니다. 나의 접근 방식은 먼저 당신이 결정한 독특한 요소를 먼저 제거하는 것이 흥미롭지 않다는 것입니다. 가능한 제외 목록은 다음과 같습니다.

  • 다음과 같은 메타 요소 !doctype, head (가져 가라 title 별도의 데이터로)
  • 다음과 같은 동적 요소 object, embed, applet, script
  • 이미지 (유지하고 싶은지 아닌지에 따라) img
  • 형태 요소, 즉 form, input, textarea, label, legend, select, option

그런 다음 두 번째 패스는 일반적으로 발생하는 것을 배제하기 시작할 수 있습니다. div 또는 ul ID/클래스 이름 및 다음과 같은 모든 태그

  • header, footer, meta
  • nav, navigation, topnav, sidebar
  • ad, ads, adu (및 광고에 일반적으로 사용되는 기타 이름)

이것은 페이지에서 상당한 양의 장식을 희망적으로 제거 할 것입니다. 다음 과제는 남은 내용에서 주요 내용을 식별하는 것입니다. 처음에는 사이트 저자가 Semantic HTML을 올바르게 사용하고 있다고 가정하고 주로 사용하고 있다고 가정합니다. h1, h2 헤드 태그와 p 단락 태그.

내용을 식별하기 위해 헤더 태그를 찾은 다음 단락 태그가 이어집니다. (이건 될 수 있습니다 h2 주요 콘텐츠를 위해; 그만큼 h1 태그는 종종 사이트 이름이나 로고를 표시하는 데 사용되는 경우가 많지만 페이지의 헤더 부분을 제외하여 제거되었습니다.) 각 후속 단락은 휴식에 도달 할 때까지 현재 컨텐츠에 추가되어야합니다. 그것은 끝일 수 있습니다 div 또는 td 요소 또는 시작한 동일한 레벨의 헤더 요소 일 수도 있습니다.

페이지에서 수집 한 여러 컨텐츠 세트가있을 수 있으므로 (메인 컨텐츠와 저자에 대한 블러 브)가있을 수 있으므로, 가장 가능성이 높은 후보자를 선택하는 의사 결정 단계를 테스트하고 개선해야합니다. 이것은 종종 사용 된 단락 요소의 길이와 수의 측면에서 단순히 가장 큰 것입니다.

콘텐츠의 더 많은 예를 수집하면 알고리즘에 지원 조치를 추가 할 수 있습니다. 많은 페이지가 사용되는 것을 알 수 있습니다. div id="content" 또는 id="maincontent". 감지 한 2 차 콘텐츠 항목을 유지하는 것이 유용 할 수도 있으므로 특정 사이트가 콘텐츠를 구성하는 호기심 많은 방법이 있으면 알고리즘에 포수를 추가하면 이에 대해 다시 실행할 수 있습니다. 사이트의 내용.

다른 팁

잘 구조화 된 사이트는 공통 영역 (예 : 탐색, 헤더 등)을 재사용 할 수 있습니다.

분석하려는 대상 페이지가 있으면 동일한 도메인/하위 도메인 아래 몇 가지 다른 페이지를 탐색하고 모든 페이지에 공통적 인 요소를 찾으십시오. 그것들은 당신이 제거하고 싶은 소음입니다.

그런 다음 남아있는 내용을 살펴보고 일부 소음이 빠졌는지 확인할 수 있습니다. 합리적인 양의 데이터를 수집했을 때 그 데이터를 찾아보십시오. 논리를 개선하고 반복하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top