2009-11-04 12 views
5

Poszukuję sposobu automatycznego generowania streszczenia, w zasadzie pierwszych sentances/akapitów wpisu blogu, do wyświetlenia na liście artykułów (które są napisane w markdown). Obecnie robię coś takiego:Abstrakty artykułów komputerowych

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

po prostu chwytam kilka pierwszych linii tekstu, ale nie jestem całkowicie zadowolony z wyników.

To, czego naprawdę szukam, to skończyć z około 1/3 ekranu sformatowanego tekstu, który zostanie wyświetlony na liście wpisów, ale z użyciem powyższego algorytmu, pobrana kwota kończy się na niezwykle zmiennych kwotach, tak niewiele jak linia lub dwie, często miesza się z bardziej abstrakcyjnymi abstrakcjami.

Czy istnieje biblioteka, która jest dobra w tego typu sprawach? jeśli nie, czy masz jakieś sugestie, aby poprawić wyniki?

+3

Co oznacza "niezupełnie szczęśliwy"? Czy możesz podać przykłady "złych" i "właściwych" abstraktów? –

Odpowiedz

7

EDIT:

można zrobić coś takiego:

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] + '...' 

To sprawia, że ​​korzystanie z algorytmu odpychania tekstu, aby uzyskać idealną długość tekstu. Spowoduje to rozbicie tekstu na linie o rozmiarze ekranu i użycie ich do obliczenia długości pożądanej liczby linii.

Na przykład stosujące ten algorytm na wejściu python wikipedia page:

print getAbstract(text, lines=7) 

daje to wyjście:

Python jest wysoki poziom językiem programowania ogólnego przeznaczenia. 2 Jego projekt filozofii podkreśla czytelność kodu . [3] Python twierdzi, że "[łączą] niezwykłą moc z bardzo przejrzystą składnią" ", a jego standardowa biblioteka jest obszerna i obszerna. Stosowanie wcięć jako bloków jest nietypowe wśród popularnych języków programowania .

Python obsługuje wiele programowanie paradygmaty (głównie obiektowego, imperatyw, i funkcjonalny) i posiada w pełni dynamiczny system typów i automatyczne zarządzanie pamięcią, podobną do Perl, Ruby, Scheme i Tcl. Podobnie jak w innych językach dynamicznych, Python jest często używany jako skryptów ...


Bez dalszych szczegółów trudno pomóc.Ale jeśli problemem było to, biorąc kilka pierwszych linii było zbyt wiele dla niektórych wpisów może trzeba spojrzeć na textwrap

Na przykład, jeśli chcą tylko 100 znaków abstrakty można wykonać następujące czynności:

import textwrap 

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

To również zastąpi znaki nowej linii spacjami, które mogą być pożądane w zależności od wymagań.

+0

Doug Hellman ma również miły zapis na textwrap w swoim blogu Python Module of the Week: http://www.doughellmann.com/PyMOTW/textwrap/index.html – unutbu

+0

To powinno wystarczyć. dzięki! – SingleNegationElimination

0

Nie jestem dokładnie pewien, czego chcesz.

Proponuję jednak wyciąć artykuł po X znakach i umieścić "...". Wtedy masz większą kontrolę nad rozmiarem twojego "abstrakcyjnego" (jeśli to cię zawraca w twojej obecnej implementacji).

Powiązane problemy