tag div attribute html html-content-extraction text-extraction

div - ¿Cuál es el estado del arte en la extracción de contenido HTML?



tooltip html5 (8)

Hay mucho trabajo académico sobre la extracción de contenido HTML, por ejemplo, Gupta & Kaiser (2005) Extrayendo contenido de páginas web accesibles , y algunos signos de interés aquí, por ejemplo, one , two y three , pero no estoy muy claro. qué tan bien la práctica de este último refleja las ideas del primero. cual es la mejor practica?

Indicadores de buenas implementaciones (en particular, código abierto) y buenas encuestas académicas de implementaciones serían el tipo de cosa que estoy buscando.

Primer post . Para ser precisos, el tipo de encuesta que busco sería un documento (publicado, no publicado, lo que sea) que analice ambos criterios de la literatura académica y varias implementaciones existentes, y analiza qué tan infructuosas son las implementaciones. Desde el punto de vista de los criterios. Y, realmente, una publicación en una lista de correo también funcionaría para mí.

Después de la respuesta de Peter Rowell, que acepté, podemos ver que esta pregunta conduce a dos preguntas secundarias: (i) el problema resuelto de la limpieza de HTML no conforme, para el cual Beautiful Soup es la más recomendada solución, y (ii) el problema no resuelto o la separación de cruft (principalmente en el sitio de la caldera y el material promocional) de la carne (el contenido que el tipo de personas que piensan que podría interesar a la página, de hecho, es relevante. Para abordar el estado de la técnica , las nuevas respuestas deben abordar el problema de cruft-from-meat explícitamente.



Hay algunas herramientas de código abierto disponibles que realizan tareas similares de extracción de artículos. https://github.com/jiminoc/goose que fue de código abierto por Gravity.com

Tiene información sobre la wiki, así como la fuente que puede ver. Hay docenas de pruebas unitarias que muestran el texto extraído de varios artículos.


He trabajado con Peter Rowell a lo largo de los años en una gran variedad de proyectos de recuperación de información, muchos de los cuales involucraron la extracción de textos muy difíciles de una diversidad de fuentes de marcado.

Actualmente estoy centrado en la extracción de conocimientos de fuentes de "firehose" como Google, incluidos sus canales RSS que limpian enormes cantidades de artículos de noticias locales, regionales, nacionales e internacionales. En muchos casos, los títulos son ricos y significativos, pero solo se usan como "ganchos" para atraer tráfico a un sitio web donde el artículo real es un párrafo sin sentido. Esto parece ser una especie de "spam en reversa" diseñado para aumentar las calificaciones de tráfico.

Para clasificar los artículos incluso con la métrica más simple de la longitud del artículo, debe poder extraer el contenido del marcado. El exótico marcado y las secuencias de comandos que dominan el contenido web en estos días rompen la mayoría de los paquetes de análisis de código abierto, como Beautiful Soup, cuando se aplican a grandes volúmenes característicos de Google y fuentes similares. Descubrí que el 30% o más de los artículos extraídos rompen estos paquetes como regla general. Esto nos ha hecho volver a centrarnos en el desarrollo de analizadores basados ​​en caracteres inteligentes y de muy bajo nivel para separar el texto sin formato del marcado y los scripts. Cuanto más detallado sea el análisis (es decir, la partición del contenido), más inteligentes (y hechas a mano) deben ser sus herramientas. Para hacer las cosas aún más interesantes, tiene un objetivo móvil a medida que la creación web continúa cambiando y cambiando con el desarrollo de nuevos enfoques de scripting, marcado y extensiones de lenguaje. Esto tiende a favorecer la entrega de información basada en el servicio en lugar de aplicaciones de "envoltura retráctil".

Mirando hacia atrás a lo largo de los años, parece que se han escrito muy pocos artículos académicos sobre la mecánica de bajo nivel (es decir, la "práctica de los primeros" a los que se refiere) de tal extracción, probablemente porque es muy específico del dominio y del contenido.


La extracción puede significar diferentes cosas para diferentes personas. Una cosa es poder lidiar con todo el HTML estropeado que existe, y Beautiful Soup es un claro ganador en este departamento. Pero BS no te dirá qué es cruft y qué es carne.

Las cosas se ven diferentes (y feas) al considerar la extracción de contenido desde el punto de vista de un lingüista computacional. Al analizar una página, solo me interesa el contenido específico de la página, menos toda la navegación / publicidad / etc. crucero Y no puede comenzar a hacer cosas interesantes (análisis de co-ocurrencia, descubrimiento de frases, generación de vectores de atributos ponderados, etc.) hasta que se haya liberado del crucero.

El primer documento al que hace referencia el OP indica que esto era lo que intentaban lograr: analizar un sitio, determinar la estructura general, luego restarlo y ¡voilá! solo tienes la carne, pero descubrieron que era más difícil de lo que pensaban. Estaban abordando el problema desde un mejor ángulo de accesibilidad, mientras que yo era un tipo de búsqueda temprana, pero ambos llegamos a la misma conclusión:

Separar la cruft de la carne es difícil. Y (para leer entre las líneas de su pregunta) incluso una vez que se elimina el cruft, sin un marcado semántico cuidadosamente aplicado, es extremadamente difícil determinar la "intención del autor" del artículo. Sacar la carne de un sitio como Citeseer (diseñado de forma limpia y predecible con una muy alta relación señal-ruido) es 2 o 3 órdenes de magnitud más fácil que tratar con contenido web aleatorio.

Por cierto, si está tratando con documentos más extensos, podría estar particularmente interesado en el trabajo realizado por Marti Hearst (ahora profesor en UC Berkely). Su tesis doctoral y otros trabajos sobre cómo hacer un descubrimiento de subtemas en documentos grandes me dieron mucha información para hacer algo similar en documentos más pequeños (lo que, sorprendentemente, puede ser más difícil de tratar). Pero solo puedes hacer esto después de deshacerte del crucero.

Para los pocos que podrían estar interesados, aquí hay un poco de historia de fondo (probablemente fuera de tema, pero estoy de ese modo esta noche):

En los años 80 y 90, nuestros clientes eran en su mayoría agencias gubernamentales cuyos ojos eran más grandes que sus presupuestos y cuyos sueños hacían que Disneylandia pareciera un poco gris. Estaban recolectando todo lo que podían conseguir y luego fueron a buscar una tecnología de bala de plata que de alguna manera ( onda de mano gigante ) extrajera el "significado" del documento. Derecha. Nos encontraron porque éramos esta pequeña y extraña compañía haciendo "búsquedas de similitud de contenido" en 1986. Les dimos un par de demos (reales, no falsos) que los asustaron.

Una de las cosas que ya sabíamos (y les llevó mucho tiempo creernos) fue que cada colección es diferente y necesita su propio escáner especial para lidiar con esas diferencias. Por ejemplo, si todo lo que estás haciendo es masticar historias de periódicos, la vida es bastante fácil. En su mayoría, el titular le dice algo interesante, y la historia está escrita en estilo piramidal: el primer párrafo o dos tiene la esencia de quién / qué / dónde / cuándo, y luego los párrafos siguientes amplían eso. Como he dicho, esto es lo fácil.

¿Qué tal los artículos de revistas? Oh Dios, no me hagas empezar! Los títulos casi nunca tienen sentido y la estructura varía de una revista a otra, e incluso de una sección de una revista a la siguiente. Recoge una copia de Wired y una copia de Atlantic Monthly. Mire un artículo importante e intente descubrir un resumen significativo de 1 párrafo sobre el tema del artículo. Ahora trata de describir cómo un programa lograría lo mismo. ¿Se aplica el mismo conjunto de reglas en todos los artículos? ¿Incluso artículos de la misma revista? No, no lo hacen.

Lamento sonar como un alboroto en esto, pero este problema es realmente difícil .

Por extraño que parezca, una gran razón para que Google tenga tanto éxito (desde la perspectiva de un motor de búsqueda) es que le dan mucha importancia a las palabras que rodean un enlace desde otro sitio . Ese texto de enlace representa una especie de mini-resumen realizado por un humano del sitio / página a la que está vinculado, exactamente lo que desea cuando está buscando. Y funciona en casi todos los estilos de información de género / diseño. Es una visión positivamente brillante y desearía haberla tenido yo mismo. Pero no habría servido de nada a mis clientes porque no había enlaces de los anuncios de televisión de Moscú de la noche anterior a algún mensaje de teletipo aleatorio que habían capturado, o a alguna versión maleducada de un periódico egipcio de OCR.

/ mini-rant-and-trip-down-memory-lane


Me he encontrado con http://www.keyvan.net/2010/08/php-readability/

El año pasado porté la legibilidad de Arc90 para usarla en el proyecto Five Filters. Ha pasado más de un año y Readability ha mejorado mucho, gracias a Chris Dary y el resto del equipo en Arc90.

Como parte de una actualización del servicio RSS de texto completo, comencé a portar una versión más reciente (1.6.2) a PHP y el código ahora está en línea.

Para alguien que no esté familiarizado, la capacidad de lectura se creó para su uso como un complemento del navegador (un marcador). Con un solo clic transforma las páginas web para una fácil lectura y elimina el desorden. Apple lo incorporó recientemente a Safari Reader.

También es muy útil para la extracción de contenido, por lo que quería portarlo a PHP en primer lugar.


Si desea extraer contenido de las páginas que utilizan javascript en gran medida, el control remoto de selenio puede hacer el trabajo. Funciona para algo más que pruebas. El principal inconveniente de hacer esto es que terminarás usando muchos más recursos. La ventaja es que obtendrá una fuente de datos mucho más precisa de las aplicaciones / páginas enriquecidas.


Una palabra: boilerpipe.

Para el dominio de noticias, en un corpus representativo, ahora tenemos una precisión de extracción del 98% / 99% (promedio / promedio)

También bastante independiente del idioma (hoy, también aprendí que funciona para el nepalí).

Descargo de responsabilidad: Soy el autor de este trabajo.


Beautiful Soup es un analizador HTML robusto escrito en Python.

Maneja con gracia el HTML con un marcado incorrecto y también está bien diseñado como una biblioteca de Python, admite generadores para iteración y búsqueda, notación de puntos para acceso de niños (por ejemplo, acceda a <foo><bar/></foo>'' using doc. foo.bar`) y unicode sin problemas.