ブログシステムの記事リストでは、記事の内容をより効果的に提示し、読者がよりターゲットを絞った読みを選択できるようにするために、通常、記事のタイトルと要約が同時に提供されます。
記事のコンテンツはプレーンテキスト形式でも構いませんが、インターネットの普及に伴い、現在では HTML 形式が多くなっています。形式に関係なく、要約は通常、記事の冒頭の内容であり、指定された文字数に従って抽出できます。
プレーンテキストの概要
まず、プレーンテキストの概要を抽出します。プレーンテキストのドキュメントは長い文字列ですが、その概要を抽出するのは簡単です:
#!/usr/bin/env python # -*- coding: utf-8 -*- """Get a summary of the TEXT-format document""" def get_summary(text, count): u"""Get the first `count` characters from `text` >>> text = u'Welcome 这是一篇关于Python的文章' >>> get_summary(text, 12) == u'Welcome 这是一篇' True """ assert(isinstance(text, unicode)) return text[0:count] if __name__ == '__main__': import doctest doctest.testmod()
HTMLの概要
HTMLドキュメントには、多数のタグが含まれています(
、 など)、これらの文字はマーク命令であり、通常、単純なテキストのインターセプトによって HTML の文書構造が破壊され、要約が表示されます。ブラウザが不適切に表示されました。
HTML ドキュメントの構造に従いながらコンテンツをインターセプトするには、HTML ドキュメントを解析する必要があります。 Python では、これは標準ライブラリ HTMLParser を使用して実行できます。
最も単純な概要抽出関数の 1 つは、HTML タグを無視し、タグ内のネイティブ テキストのみを抽出することです。以下は、この関数と同様の Python 実装です:
#!/usr/bin/env python # -*- coding: utf-8 -*- """Get a raw summary of the HTML-format document""" from HTMLParser import HTMLParser class SummaryHTMLParser(HTMLParser): """Parse HTML text to get a summary >>> text = u'<p>Hi guys:</p><p>This is a example using SummaryHTMLParser.</p>' >>> parser = SummaryHTMLParser(10) >>> parser.feed(text) >>> parser.get_summary(u'...') u'<p>Higuys:Thi...</p>' """ def __init__(self, count): HTMLParser.__init__(self) self.count = count self.summary = u'' def feed(self, data): """Only accept unicode `data`""" assert(isinstance(data, unicode)) HTMLParser.feed(self, data) def handle_data(self, data): more = self.count - len(self.summary) if more > 0: # Remove possible whitespaces in `data` data_without_whitespace = u''.join(data.split()) self.summary += data_without_whitespace[0:more] def get_summary(self, suffix=u'', wrapper=u'p'): return u'<{0}>{1}{2}</{0}>'.format(wrapper, self.summary, suffix) if __name__ == '__main__': import doctest doctest.testmod()
上記は、記事の要約を抽出するための [PYTHON チュートリアル] の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。