2009-11-04 36 views
5

Estoy buscando una manera de producir automáticamente un resumen, básicamente las primeras pocas representaciones/párrafos de una entrada de blog, para mostrar en una lista de artículos (que están escritos en rebajas). Actualmente, estoy haciendo algo como esto:Extracto de artículos de computación

def abstract(article, paras=3): 
    return '\n'.join(article.split('\n')[0:paras]) 

tomar sólo las primeras líneas de un valor de texto, pero no estoy totalmente satisfecho con los resultados.

Lo que realmente estoy buscando es terminar con aproximadamente 1/3 de una pantalla llena de texto formateado para mostrar en la lista de entradas, pero utilizando el algoritmo anterior, el monto extraído termina con cantidades increíblemente variables, tan poco como una línea o dos, se mezcla frecuentemente con resúmenes de tamaño más ideal.

¿Hay una biblioteca que sea buena en este tipo de cosas? si no, ¿tiene alguna sugerencia para mejorar el resultado?

+3

¿Qué significa "no totalmente feliz"? ¿Puedes dar ejemplos de resúmenes "incorrectos" y "correctos"? –

Respuesta

7

EDIT:

Usted puede hacer algo como esto:

from textwrap import wrap 

def getAbstract(text, lines=5, screenwidth=100): 
    width = len(' '.join([ 
       line for block in text.splitlines() 
       for line in wrap(block, width=screenwidth) 
      ][:lines])) 
    return text[:width] + '...' 

Esto hace uso del algoritmo TextWrap para obtener la longitud texto ideal. Romperá el texto en líneas del tamaño de la pantalla y las usará para calcular la longitud de la cantidad deseable de líneas.

Por ejemplo la aplicación de este algoritmo en la entrada python wikipedia page:

print getAbstract(text, lines=7) 

le dará esta salida:

Python es un alto nivel lenguaje de programación de propósito general. 2 Su filosofía del diseño enfatiza el código legibilidad. [3] Python afirma que "[combine] potencia notable con muy sintaxis clara", [4] y su biblioteca estándar es grande y completa. Su uso de indentación como delimitadores del bloque es inusual entre los populares lenguajes de programación .

Python apoya la programación múltiple paradigmas (principalmente orientado a objetos, imperativo, y funcional) y cuenta con un sistema totalmente dinámico tipo y la gestión de memoria automática, similar a Perl, Ruby, Scheme, y Tcl. Al igual que otros lenguajes dinámicos, Python se utiliza a menudo como un script ...


sin más detalles que es difícil para ayudarle.Pero si su problema era que la toma de las primeras líneas fue demasiado para algunas entradas puede que tenga que echar un vistazo a textwrap

Por ejemplo si solo deseas 100 caracteres abstrae puede hacer lo siguiente:

import textwrap 

abstract = textwrap.wrap(text, 100)[0] 

Eso también reemplazará las líneas nuevas con espacios que podrían ser deseables según sus requisitos.

+0

Doug Hellman también tiene un buen artículo escrito en textwrap en su blog de Python Module of the Week: http://www.doughellmann.com/PyMOTW/textwrap/index.html – unutbu

+0

Esto debería ser el truco. ¡Gracias! – SingleNegationElimination

0

No estoy exactamente seguro de lo que quiere.

Sin embargo, sugiero cortar el artículo después de X caracteres y poner "...". Entonces usted tiene más control sobre el tamaño de su "resumen" (si eso es lo que le molesta en su implementación actual).