2009-11-04 11 views
5

私は、記事のリスト(markdownに書かれている)に表示するために、基本的にはブログエントリの最初の数行/段落を抽象的に生成する方法を探しています。テキストだけの価値は最初の数行をつかむためにコンピューティング記事の要約

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

、しかし、私は結果に完全に満足していない:現在、私はこのような何かをやっています。

私が本当に探しているのは、エントリのリストに表示する書式付きテキストの約1/3で終わることですが、上記のアルゴリズムを使用すると、その量は大きく変化しますが、 1行または2行というわずかなものが、より理想的なサイズの抄録と頻繁に混合されます。

このような種類のライブラリはありますか?そうでない場合は、出力を改善するための提案はありますか?

+3

「まったく満足していない」とはどういう意味ですか? 「間違った」と「正しい」要約の例を挙げることはできますか? –

答えて

7

EDIT:あなたはこのような何かを行うことができます

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アルゴリズムを使用します。テキストを画面サイズの行に分割し、それらを使用して望ましい行数の長さを計算します。

print getAbstract(text, lines=7) 

はあなたに、この出力を与える:python wikipedia pageエントリにこのアルゴリズムを適用する例えば

Pythonは、汎用の高レベル プログラミング言語です。 2そのデザイン 哲学はコード の可読性を強調します。[3] Pythonは "[結合]顕著なパワーと非常に 明確な構文"、[4]とその標準 ライブラリは大きくて包括的であると主張しています。 ブロック 区切り文字としてインデントを使用することは、普及している プログラミング言語の中では珍しいことです。

のPythonは、Perl、Rubyの、スキーム、及び Tclのと同様完全に動的型システム と自動メモリ管理、 を備えて複数のプログラミング パラダイム(主にオブジェクト指向、命令型、及び機能 )と をサポートします。他の動的言語と同様に、 Pythonは、多くの場合、それはあなたを助けるために難しい、さらに詳細がなくて...スクリプトとして


を使用しています。しかし、あなたの問題は、最初の数行を服用すると、あなたが唯一の100文字を使用すると、次の操作を行うことができます抽象化したい場合、たとえばtextwrap

を見てする必要があるかもしれないいくつかのエントリのためにあまりにも多くのことだった場合:

import textwrap 

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

これは、必要に応じて改行をスペースで置き換えることもできます。

+0

Doug Hellmanはまた、彼のPython Module of the Weekのブログで、テキストラップの素敵な記事を書いています:http://www.doughellmann.com/PyMOTW/textwrap/index.html – unutbu

+0

これはすべきことです。ありがとう! – SingleNegationElimination

0

私はあなたが欲しいものを正確には分かりません。

しかし、私は記事をX文字の後で切り取り、 "..."を入れることをお勧めします。次に、あなたの "抽象"(現在の実装であなたを悩ましている場合)のサイズをより詳細に制御できます。

関連する問題