code

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

codestyles 2020. 8. 16. 20:20
반응형

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


한동안 저는 광고와 관련된 텍스트와 기타 모든 혼란을 제거하여 URL에서 "관련성있는"텍스트를 지능적으로 추출하는 방법을 찾으려고 노력했습니다. 몇 달의 조사 끝에 문제로 포기했습니다. 정확하게 결정할 수 없습니다. (다른 방법을 시도했지만 신뢰할 수있는 방법은 없습니다)

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

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


가독성은 주로 많은 경우에 "어떻게 든 잘 작동하는"휴리스틱으로 구성됩니다.

이 주제에 대한 몇 가지 연구 논문을 작성했으며, 잘 작동하는 솔루션을 쉽게 찾을 수있는 이유와 100 % 정확도에 가까워 질 때의 배경에 대해 설명하고 싶습니다.

웹 페이지 콘텐츠에도 (배타적이지는 않지만) 명시되어있는 인간 언어의 기본 언어 법이있는 것 같습니다.이 법칙은 이미 두 가지 유형의 텍스트 (전체 텍스트와 비 전체 텍스트 또는 대략적으로 " 주요 콘텐츠 "vs."상용구 ").

HTML에서 주요 콘텐츠를 가져 오려면 약 10 개 이상의 단어가 포함 된 HTML 텍스트 요소 (즉, 마크 업에 의해 중단되지 않는 텍스트 블록) 만 유지하는 것으로 충분합니다. 인간은 텍스트를 작성하는 두 가지 다른 동기를 위해 두 가지 유형의 텍스트 (발산하는 단어 수로 측정되는 "짧은"및 "긴") 중에서 선택하는 것으로 보입니다. 나는 그들을 "항해 적"및 "정보 적"동기라고 부를 것입니다.

저자 가 작성한 내용 빨리 얻으려면 "탐색"텍스트를 사용합니다 (예 : "STOP", "Read this", "Click here"). 탐색 요소 (메뉴 등)에서 가장 눈에 잘 띄는 텍스트 유형입니다.

저자가 자신의 의미를 깊이 이해하기를 원하면 많은 단어를 사용합니다. 이렇게하면 중복성이 증가하는 대신 모호성이 제거됩니다. 기사와 유사한 콘텐츠는 일반적으로 몇 단어 이상이 포함되어 있으므로이 클래스에 속합니다.

이 분리는 수많은 경우에서 작동하는 것처럼 보이지만 헤드 라인, 짧은 문장, 면책 조항, 저작권 바닥 글 등으로 인해 까다로워지고 있습니다.

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

이론적 관점에서 통찰력을 얻으 려면 저의 최신 기사 " 얕은 텍스트 기능을 사용한 상용구 감지 "를 읽을 수 있습니다 . 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)는 다음과 같습니다.

  • content
  • blog
  • story

Negative identifiers would be:

  • comment
  • discuss

And then they have unlikely and maybe candidates. What they would do is determine what is most likely to be the main content of the site, see line 678 in the readability source. This is done by analyzing mostly the length of paragraphs, their identifiers (see above), the DOM tree (i.e. if the paragraph is a last child node), strip out everything unnecessary, remove formatting, etc.

The code has 1792 lines. It does seem like a non trivial problem, so maybe you can get your inspirations from there.


Interesting. I have developed a similar PHP script. It basically scans articles and attaches parts of speech to all text (Brill Tagger). Then, grammatically invalid sentences are instantly eliminated. Then, sudden shifts in pronouns or past tense indicate the article is over, or hasn't started yet. Repeated phrases are searched for and eliminated, like "Yahoo news sports finance" appears ten times in the page. You can also get statistics on the tone with a plethora of word banks relating to various emotions. Sudden changes in tone, from active/negative/financial, to passive/positive/political indicates a boundary. It's endless really, however dig you want to deep.

The major issues are links, embedded anomalies, scripting styles and updates.

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

반응형