2009-11-04 41 views
5

我正在尋找一種方法來自動生成一個摘要,基本上是博客條目的前幾個份額/段落,以顯示在文章列表中(用markdown寫)。目前,我在做這樣的事情:計算文章摘要

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

只獲取值得文本的第幾行,但我不與結果完全滿意。

我真正想要的是最終以大約1/3的格式化文本顯示在條目列表中,但使用上述算法時,拉出的金額會以不同的金額變化,少至一兩行,經常混有更多理想大小的摘要。

有沒有一個圖書館擅長這種事情?如果沒有,你有任何改善輸出的建議嗎?

+3

「不完全開心」是什麼意思?你能舉出「錯誤」和「正確」摘要的例子嗎? – 2009-11-04 19:13:48

回答

7

編輯:

你可以做這樣的事情:

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

這使得使用textwrap算法來獲得理想的文本長度。它會將文本分解爲屏幕大小的行,並使用它們來計算所需行數的長度。

例如在python wikipedia page進入應用此算法:

print getAbstract(text, lines=7) 

會給你這樣的輸出:

Python是一種通用型的高層次 編程語言。 2它的設計 哲學強調代碼 的可讀性。[3] Python聲稱 「[結合]卓越的功能,非常清晰的語法」[4],其標準的 庫是大而全面的。 它使用縮進作爲塊 分隔符在流行的 編程語言中是不尋常的。

Python支持多種編程範式 (主要是面向對象的, 勢在必行,和功能性的)和 設有一個完全動態的類型系統 和自動內存管理, 類似於Perl中,紅寶石,方案,和Tcl的 。像其他動態語言,Python的 經常被用來作爲一種腳本...


沒有進一步的細節,很難幫助你。但如果你的問題是,服用前幾行是太過分了,你可能需要看看textwrap

例如,如果你只想要100個字符的抽象,你可以做以下一些條目:

import textwrap 

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

這也將取代換行符與空格可能需要根據您的要求。

+0

Doug Hellman在他本週的Python模塊博客中也對textwrap進行了很好的描述:http://www.doughellmann.com/PyMOTW/textwrap/index.html – unutbu 2009-11-04 20:01:28

+0

這應該是個訣竅。謝謝! – SingleNegationElimination 2009-11-05 00:07:07

0

我不完全確定你想要什麼。

但是,我建議剪切X字符後的文章,並把「...」。然後,您可以更好地控制「抽象」的大小(如果這是您當前實施中的困擾)。