realizar page net how from do_postback aspx asp javascript asp.net extraction

javascript - page - ¿Qué algoritmo usa la legibilidad para extraer texto de las URL?



realizar postback javascript (4)

Durante un tiempo, he estado tratando de encontrar una forma de extraer de forma inteligente el texto "relevante" de una URL eliminando el texto relacionado con los anuncios y todo el desorden. Después de varios meses de investigación, lo dejé como un problema eso no puede ser determinado con precisión. (He intentado de diferentes maneras, pero ninguna fue confiable)

Hace una semana, tropecé con la Readability , un complemento que convierte cualquier URL en texto legible. Me parece bastante preciso. Supongo que de alguna manera tienen un algoritmo lo suficientemente inteligente como para extraer el texto relevante.

¿Alguien sabe cómo lo hacen? ¿O cómo podría hacerlo de manera confiable?


Interesante. Desarrollé un script PHP similar. Básicamente escanea artículos y adjunta partes del discurso a todo el texto (Brill Tagger). Entonces, las oraciones gramaticalmente inválidas se eliminan instantáneamente. Entonces, los cambios repentinos en los pronombres o el tiempo pasado indican que el artículo ha terminado o aún no ha comenzado. Las frases repetidas se buscan y se eliminan, como "Yahoo News Sports Finance" aparece diez veces en la página. También puede obtener estadísticas sobre el tono con una gran cantidad de bancos de palabras relacionadas con diversas emociones. Los cambios repentinos en el tono, desde activo / negativo / financiero, a pasivo / positivo / político indican un límite. En realidad es interminable, sin embargo, desea profundizar.

Los principales problemas son enlaces, anomalías integradas, estilos de scripting y actualizaciones.


La legibilidad consiste principalmente en heurísticas que "de alguna manera funcionan bien" en muchos casos.

He escrito algunos artículos de investigación sobre este tema y me gustaría explicar los antecedentes de por qué es fácil encontrar una solución que funcione bien y cuando sea difícil lograr una precisión cercana al 100%.

Parece haber una ley lingüística subyacente en el lenguaje humano que también (pero no exclusivamente) se manifiesta en el contenido de la página web, que ya separa bastante claramente dos tipos de texto (texto completo vs. no completo o, aproximadamente, " contenido principal "vs." repetitivo ").

Para obtener el contenido principal de HTML, en muchos casos es suficiente mantener solo los elementos de texto HTML (es decir, bloques de texto que no están interrumpidos por el marcado) que tienen más de 10 palabras. Parece que los humanos eligen entre dos tipos de texto ("corto" y "largo", medido por el número de palabras que emiten) dos motivaciones diferentes para escribir un texto. Los llamaría motivaciones de "navegación" e "información".

Si un autor quiere que obtenga rápidamente lo que está escrito, usa texto de "navegación", es decir, pocas palabras (como "DETENER", "Leer esto", "Haga clic aquí"). Este es el tipo de texto predominante en los elementos de navegación (menús, etc.)

Si un autor quiere que entiendas profundamente lo que quiere decir, él / ella usa muchas palabras. De esta forma, la ambigüedad se elimina a costa de un aumento en la redundancia. El contenido similar a un artículo generalmente se incluye en esta clase, ya que tiene más que unas pocas palabras.

Si bien esta separación parece funcionar en una gran cantidad de casos, se está poniendo complicado con titulares, oraciones cortas, renuncias, pie de página de derechos de autor, etc.

Existen estrategias y funciones más sofisticadas que ayudan a separar el contenido principal del texto repetitivo. Por ejemplo, la densidad del enlace (número de palabras en un bloque que están vinculadas versus el número total de palabras en el bloque), las características de los bloques previos / siguientes, la frecuencia de un texto de bloque en particular en la Web "completa", el Estructura DOM del documento HTML, la imagen visual de la página, etc.

Puede leer mi último artículo " Detección repetitiva usando características de texto superficial " para obtener una idea desde una perspectiva teórica. También puede ver el video de mi presentación en papel en VideoLectures.net.

"Legibilidad" utiliza algunas de estas características. Si observa cuidadosamente el registro de cambios de SVN, verá que el número de estrategias varió con el tiempo, al igual que la calidad de extracción de la legibilidad. Por ejemplo, la introducción de la densidad de enlaces en diciembre de 2009 ayudó mucho a mejorar.

En mi opinión, por lo tanto, no tiene sentido decir "La legibilidad lo hace así", sin mencionar el número de versión exacto.

He publicado una biblioteca de extracción de contenido HTML de código abierto llamada boilerpipe , que proporciona varias estrategias de extracción diferentes. Dependiendo del caso de uso, uno u otro extractor funciona mejor. Puede probar estos extractores en las páginas que elija con la aplicación complementaria boilerpipe-web en Google App Engine.

Para que los números hablen, consulte la página " Benchmarks " en la wiki de boilerpipe que compara algunas estrategias de extracción, como boilerpipe, legibilidad y Apple Safari.

Debo mencionar que estos algoritmos suponen que el contenido principal es en realidad texto completo. Hay casos en los que el "contenido principal" es otra cosa, por ejemplo, una imagen, una tabla, un video, etc. Los algoritmos no funcionarán bien en tales casos.

Aclamaciones,

cristiano


No hay una manera 100% confiable de hacer esto, por supuesto. Puedes echar un vistazo al código fuente de legibilidad http://lab.arc90.com/experiments/readability/js/readability.js

Básicamente, lo que están haciendo es tratar de identificar bloques de texto positivos y negativos . Los identificadores positivos (es decir, ID de div) serían algo así como:

  • artículo
  • cuerpo
  • contenido
  • Blog
  • historia

Los identificadores negativos serían:

  • comentario
  • discutir

Y luego tienen candidatos poco probables y tal vez . Lo que harían es determinar cuál es más probable que sea el contenido principal del sitio; consulte la línea 678 en la fuente de legibilidad. Esto se hace analizando principalmente la longitud de los párrafos, sus identificadores (ver arriba), el árbol DOM (es decir, si el párrafo es un último nodo hijo), elimina todo lo innecesario, elimina el formato, etc.

El código tiene 1792 líneas. Parece un problema no trivial, así que tal vez puedas obtener tus inspiraciones de allí.


la legibilidad es un bookmarklet de JavaScript. es decir, su código del lado del cliente que manipula el DOM. Mira el javascript y deberías poder ver qué está pasando.

Flujo de trabajo y código de legibilidad:

/* * 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); })();

Y si sigue los archivos JS y CSS que obtiene el código anterior, obtendrá una imagen completa:

http://lab.arc90.com/experiments/readability/js/readability.js (esta es una lectura muy bien comentada, interesante)

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