>백엔드 개발 >파이썬 튜토리얼 >[PYTHON 튜토리얼] 기사 초록 추출

[PYTHON 튜토리얼] 기사 초록 추출

黄舟
黄舟원래의
2017-02-07 16:11:181767검색

블로그 시스템의 기사 목록에는 기사 내용을 보다 효과적으로 제시하고 독자가 보다 타겟에 맞는 읽기 선택을 할 수 있도록 기사 제목과 초록이 동시에 제공되는 경우가 많습니다.

기사의 내용은 일반 텍스트 형식일 수도 있지만, 요즘은 인터넷이 대중화되면서 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를 사용하여 이를 수행할 수 있습니다.

가장 간단한 스니펫 추출 기능 중 하나는 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 중국어 웹사이트(www.php)를 참고하세요. .cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.