programing

가독성은 URL에서 텍스트를 추출하는 데 어떤 알고리즘을 사용합니까?

stoneblock 2023. 5. 24. 21:39

가독성은 URL에서 텍스트를 추출하는 데 어떤 알고리즘을 사용합니까?

한동안, 저는 광고와 다른 모든 혼란스러운 것들과 관련된 텍스트를 제거함으로써 URL에서 "관련된" 텍스트를 지능적으로 추출하는 방법을 찾으려고 노력해 왔습니다.몇 달 동안 조사한 결과, 정확하게 판단할 수 없는 문제로 포기했습니다.(여러 가지 방법을 시도해 보았지만 신뢰할 수 있는 방법은 없었습니다.

일주일 전, 저는 모든 URL을 읽을 수 있는 텍스트로 변환하는 플러그인인 Readability를 우연히 발견했습니다.제가 보기엔 꽤 정확해 보입니다.제 생각에는 그들이 어떻게든 관련 텍스트를 추출할 수 있을 정도로 똑똑한 알고리즘을 가지고 있을 것 같습니다.

그들이 어떻게 하는지 아는 사람?아니면 어떻게 하면 안정적으로 할 수 있을까요?

가독성은 대부분 "어떻게든 잘 작동하는" 휴리스틱으로 구성됩니다.

저는 이 주제에 대한 연구 논문을 몇 편 썼는데, 왜 잘 되는 해결책을 생각해내기가 쉽고, 100% 정확도에 근접하기가 어려워졌는지 그 배경을 설명하려고 합니다.

이미 두 가지 유형의 텍스트(전체 텍스트 대 비전체 텍스트 또는 대략적으로, "주요 내용" 대 "보일러판")를 상당히 명확하게 구분하는 웹 페이지 콘텐츠에서도 분명히 나타나는 인간 언어의 기본적인 언어 법칙이 있는 것 같습니다.

HTML에서 주요 내용을 가져오려면 대부분의 경우 약 10개 이상의 단어가 있는 HTML 텍스트 요소(즉, 마크업으로 인해 중단되지 않는 텍스트 블록)만 유지하면 충분합니다.인간은 텍스트를 쓰는 두 가지 다른 동기에 대해 두 가지 유형의 텍스트("짧은"과 "긴", 방출하는 단어의 수로 측정) 중에서 선택하는 것으로 보입니다.저는 그것들을 "탐색적" 동기와 "정보적" 동기라고 부를 것입니다.

작성자가 작성된 내용을 빨리 가져오려면 "탐색" 텍스트, 즉 몇 단어(예: "중지", "이것을 읽음", "여기를 클릭")를 사용합니다.탐색 요소(메뉴 등)에서 가장 두드러지는 텍스트 유형입니다.

작가가 자신의 뜻을 깊이 이해하기를 원한다면 많은 단어를 사용합니다.이러한 방식으로, 중복성의 증가로 인해 모호성이 제거됩니다.기사와 같은 내용은 보통 몇 개 이상의 단어를 포함하기 때문에 이 클래스에 속합니다.

이러한 분리는 많은 경우에 효과가 있는 것처럼 보이지만 헤드라인, 짧은 문장, 고지 사항, 저작권 바닥글 등으로 인해 까다로워지고 있습니다.

메인 콘텐츠와 상용판을 구분하는 데 도움이 되는 더 정교한 전략과 기능이 있습니다.예를 들어, 링크 밀도(블록에 있는 단어 수 대 블록의 전체 단어 수), 이전/다음 블록의 기능, "전체" 웹에서 특정 블록 텍스트의 빈도, HTML 문서의 DOM 구조, 페이지의 시각적 이미지 등입니다.

이론적인 관점에서 통찰력을 얻으려면 최근 기사 "Shallow Text Features"를 읽으십시오.VideoLectures.net 에서 제 논문 발표 영상을 보실 수도 있습니다.

"가독성"은 이러한 기능 중 일부를 사용합니다.SVN 변경 로그를 주의 깊게 살펴보면, 시간이 지남에 따라 전략의 수가 달라지고 가독성의 추출 품질도 달라졌음을 알 수 있습니다.예를 들어, 2009년 12월에 링크 밀도를 도입한 것이 개선에 큰 도움이 되었습니다.

따라서 정확한 버전 번호를 언급하지 않고 "가독성은 그렇게 하나요"라고 말하는 것은 의미가 없다고 생각합니다.

저는 몇 가지 다른 추출 전략을 제공하는 보일러 파이프라는 오픈 소스 HTML 콘텐츠 추출 라이브러리를 출판했습니다.사용 사례에 따라 하나 또는 다른 추출기가 더 잘 작동합니다.Google AppEngine의 보조 보일러 파이프 웹 앱을 사용하여 원하는 페이지에서 이러한 추출기를 사용해 볼 수 있습니다.

숫자가 말하게 하려면 보일러 파이프 위키의 "벤치마크" 페이지에서 보일러 파이프, 가독성 및 Apple Safari를 포함한 일부 추출 전략을 비교하십시오.

이러한 알고리즘은 주요 내용이 실제로 전체 텍스트라고 가정합니다.이미지, 테이블, 비디오 등과 같이 "메인 콘텐츠"가 다른 경우가 있습니다.그런 경우에는 알고리즘이 잘 작동하지 않을 것입니다.

가독성은 자바스크립트 북마크렛입니다. 즉, DOM을 조작하는 클라이언트 사이드 코드를 의미합니다.자바스크립트를 보면 무슨 일이 일어나고 있는지 알 수 있을 것입니다.

가독성 워크플로우 및 코드:

/*
     *  1. Prep the document by removing script tags, css, etc.
     *  2. Build readability's DOM tree.
     *  3. Grab the article content from the current dom tree.
     *  4. Replace the current DOM tree with the new one.
     *  5. Read peacefully.
*/

javascript: (function () {
    readConvertLinksToFootnotes = false;
    readStyle = 'style-newspaper';
    readSize = 'size-medium';
    readMargin = 'margin-wide';
    _readability_script = document.createElement('script');
    _readability_script.type = 'text/javascript';
    _readability_script.src = 'http://lab.arc90.com/experiments/readability/js/readability.js?x=' + (Math.random());
    document.documentElement.appendChild(_readability_script);
    _readability_css = document.createElement('link');
    _readability_css.rel = 'stylesheet';
    _readability_css.href = 'http://lab.arc90.com/experiments/readability/css/readability.css';
    _readability_css.type = 'text/css';
    _readability_css.media = 'all';
    document.documentElement.appendChild(_readability_css);
    _readability_print_css = document.createElement('link');
    _readability_print_css.rel = 'stylesheet';
    _readability_print_css.href = 'http://lab.arc90.com/experiments/readability/css/readability-print.css';
    _readability_print_css.media = 'print';
    _readability_print_css.type = 'text/css';
    document.getElementsByTagName('head')[0].appendChild(_readability_print_css);
})();

그리고 위의 코드가 입력하는 JS와 CSS 파일을 따라가면 전체 그림을 얻을 수 있습니다.

http://lab.arc90.com/experiments/readability/js/readability.js (이것은 꽤 잘 논평되었고, 흥미로운 읽을거리입니다)

http://lab.arc90.com/experiments/readability/css/readability.css

물론 100% 신뢰할 수 있는 방법은 없습니다.여기에서 가독성 소스 코드를 확인할 수 있습니다.

기본적으로, 그들이 하는 일은 긍정적인 텍스트와 부정적인 텍스트 블록을 식별하려고 노력하는 것입니다.양의 식별자(즉, div ID)는 다음과 같습니다.

  • 기사
  • 내용물
  • 블로그
  • 이야기

음수 식별자는 다음과 같습니다.

  • 댓글
  • 상의하다

그리고 그들은 가능성이 낮고 어쩌면 후보자들을 가지고 있습니다.그들이 하는 일은 사이트의 주요 콘텐츠가 될 가능성이 가장 높은 것을 결정하는 것입니다. 줄을 참조하십시오.678가독성 소스에 있습니다.이 작업은 주로 문단의 길이, 식별자(위 참조), DOM 트리(예: 문단이 마지막 자식 노드인 경우)를 분석하고 불필요한 모든 항목을 제거하고 형식 지정을 제거함으로써 수행됩니다.

코드는 1792줄입니다.그것은 사소한 문제처럼 보이므로, 아마도 당신은 거기에서 영감을 얻을 수 있을 것입니다.

재밌는.저는 비슷한 PHP 스크립트를 개발했습니다.기본적으로 기사를 스캔하고 모든 텍스트에 음성 일부를 첨부합니다(Brill Tagger).그리고 나서, 문법적으로 무효인 문장들은 즉시 없어집니다.그러면, 대명사나 과거형의 갑작스러운 변화는 기사가 끝났거나 아직 시작되지 않았음을 나타냅니다."야후 뉴스 스포츠 파이낸스"와 같은 반복적인 문구가 검색되고 삭제됩니다.당신은 또한 다양한 감정과 관련된 수많은 단어 은행과 함께 톤에 대한 통계를 얻을 수 있습니다.적극적인/부정적인/재정적인 것에서 수동적인/긍정적인/정치적인 것으로 톤이 갑자기 바뀌는 것은 경계를 나타냅니다.아무리 깊이 파고들어도 끝이 없습니다.

주요 문제는 링크, 내장된 이상 징후, 스크립팅 스타일 및 업데이트입니다.

언급URL : https://stackoverflow.com/questions/3652657/what-algorithm-does-readability-use-for-extracting-text-from-urls