Durante un tiempo, he intentado encontrar una forma de extraer de forma inteligente el texto "relevante" de una URL eliminando el texto relacionado con los anuncios y todo el resto del desorden. Después de varios meses de investigación, lo dejé como un problema que no se puede determinar con precisión. (Probé de diferentes formas pero ninguna fue confiable)
Hace una semana, me encontré con Readability , un complemento que convierte cualquier URL en texto legible. Me parece bastante acertado. Supongo que de alguna manera tienen un algoritmo que es lo suficientemente inteligente como para extraer el texto relevante.
¿Alguien sabe cómo lo hacen? ¿O cómo podría hacerlo de manera confiable?
javascript
asp.net
extraction
usuario300981
fuente
fuente
Respuestas:
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 cuándo se vuelve difícil acercarse al 100% de precisión.
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 claramente dos tipos de texto (texto completo y no texto completo o, más o menos, " contenido principal "frente a" 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 son interrumpidos por marcas) que tienen más de aproximadamente 10 palabras. Parece que los humanos eligen entre dos tipos de texto ("corto" y "largo", medido por el número de palabras que emiten) por dos motivaciones diferentes para escribir un texto. Yo las llamaría motivaciones "de navegación" e "informativas".
Si un autor quiere que usted obtenga rápidamente lo que está escrito, él / ella usa texto de "navegación", es decir, pocas palabras (como "DETENER", "Leer esto", "Haga clic aquí"). Este es el tipo de texto más destacado en los elementos de navegación (menús, etc.)
Si un autor quiere que comprendas profundamente lo que quiere decir, usa muchas palabras. De esta forma, se elimina la ambigüedad a costa de un aumento de la redundancia. El contenido similar a un artículo generalmente se incluye en esta clase, ya que tiene más de unas pocas palabras.
Si bien esta separación parece funcionar en una gran cantidad de casos, se vuelve complicada con titulares, oraciones cortas, descargos de responsabilidad, pies de página de derechos de autor, etc.
Hay estrategias y funciones más sofisticadas que ayudan a separar el contenido principal del estándar. 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 anteriores / siguientes, la frecuencia de un texto de bloque en particular en la Web "completa", la Estructura DOM del documento HTML, la imagen visual de la página, etc.
Puede leer mi último artículo " Detección repetitiva mediante funciones de texto superficial " para obtener información desde una perspectiva teórica. También puede ver el video de mi presentación de trabajo en VideoLectures.net.
"Legibilidad" utiliza algunas de estas características. Si observa atentamente 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 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 de su elección utilizando la aplicación complementaria boilerpipe-web en Google AppEngine.
Para que los números hablen, consulte la página "Puntos de referencia " en la wiki de boilerpipe, que compara algunas estrategias de extracción, incluidas boilerpipe, Readability y Apple Safari.
Debo mencionar que estos algoritmos asumen 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.
Salud,
cristiano
fuente
la legibilidad es un bookmarklet de JavaScript. es decir, su código del lado del cliente que manipula el DOM. Mire el javascript y debería poder ver qué está pasando.
Flujo de trabajo y código de legibilidad:
Y si sigue los archivos JS y CSS que extrae el código anterior, obtendrá la imagen completa:
http://lab.arc90.com/experiments/readability/js/readability.js (esto está bastante bien comentado, lectura interesante)
http://lab.arc90.com/experiments/readability/css/readability.css
fuente
Por supuesto, no existe una forma 100% confiable de hacer esto. Puedes echar un vistazo al código fuente de legibilidad aquí.
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 como:
Los identificadores negativos serían:
Y luego tienen candidatos improbables y tal vez . Lo que harían es determinar cuál es más probable que sea el contenido principal del sitio, vea 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), eliminar todo lo innecesario, eliminar el formato, etc.El código tiene 1792 líneas. Parece un problema no trivial, así que tal vez puedas inspirarte desde allí.
fuente
Interesante. He desarrollado un script PHP similar. Básicamente, escanea artículos y adjunta partes de la oración a todo el texto (Brill Tagger). Entonces, las oraciones gramaticalmente inválidas se eliminan instantáneamente. Luego, los cambios repentinos en los pronombres o el tiempo pasado indican que el artículo ha terminado o que aún no ha comenzado. Las frases repetidas se buscan y 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 relacionados con diversas emociones. Los cambios repentinos de tono, de activo / negativo / financiero a pasivo / positivo / político indican un límite. Realmente es interminable, sin importar lo que quieras profundizar.
Los principales problemas son los enlaces, las anomalías incrustadas, los estilos de secuencias de comandos y las actualizaciones.
fuente