ホームページ >バックエンド開発 >Python チュートリアル >[PYTHON チュートリアル] 記事の要約を抽出する

[PYTHON チュートリアル] 記事の要約を抽出する

黄舟
黄舟オリジナル
2017-02-07 16:11:181743ブラウズ

ブログシステムの記事リストでは、記事の内容をより効果的に提示し、読者がよりターゲットを絞った読みを選択できるようにするために、通常、記事のタイトルと要約が同時に提供されます。

記事のコンテンツはプレーンテキスト形式でも構いませんが、インターネットの普及に伴い、現在では 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ドキュメントには、多数のタグが含まれています( 4a249f0d628e2318394fd9b75b4636b1、e388a4556c0f65e1904146cc1a846bee、3499910bf9dac5ae3c52d5ede7383485 など)、これらの文字はマーク命令であり、通常、単純なテキストのインターセプトによって 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&#39;<p>Hi guys:</p><p>This is a example using SummaryHTMLParser.</p>&#39;
>>> parser = SummaryHTMLParser(10)
>>> parser.feed(text)
>>> parser.get_summary(u&#39;...&#39;)
u&#39;<p>Higuys:Thi...</p>&#39;
"""
def __init__(self, count):
HTMLParser.__init__(self)
self.count = count
self.summary = u&#39;&#39;

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&#39;&#39;.join(data.split())

self.summary += data_without_whitespace[0:more]

def get_summary(self, suffix=u&#39;&#39;, wrapper=u&#39;p&#39;):
return u&#39;<{0}>{1}{2}</{0}>&#39;.format(wrapper, self.summary, suffix)

if __name__ == &#39;__main__&#39;:
import doctest
doctest.testmod()

上記は、記事の要約を抽出するための [PYTHON チュートリアル] の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。