スキップしてメイン コンテンツに移動

RSSからYoutube/Podcast配信

本文要約

要約

今回は現在使用している方法とは異なり、実装が簡単な要約方法になります。
参考元にはニューラルネットワーク(accel-brain-base)を使用した例などもありますので、そちらを参考にしてください。

Pythonライブラリの追加

以下のライブラリをインストールしてください。
$ pip install pysummarization

Pythonプログラム
test.pyに以下のコードを記述します。
ここでソース記事の各行を重みづけしてから、重要度の高い5つの行だけを選択します。
test.py
from pysummarization.nlpbase.auto_abstractor import AutoAbstractor
from pysummarization.tokenizabledoc.simple_tokenizer import SimpleTokenizer
from pysummarization.abstractabledoc.top_n_rank_abstractor import TopNRankAbstractor

def getSummary(text):

    # Object of automatic summarization.
    auto_abstractor = AutoAbstractor()
    # Set tokenizer.
    auto_abstractor.tokenizable_doc = SimpleTokenizer()
    # Set delimiter for making a list of sentence.
    auto_abstractor.delimiter_list = [". ",".\n","\n"]
    # Object of abstracting and filtering document.
    abstractable_doc = TopNRankAbstractor()
    # Summarize document.
    result_dict = auto_abstractor.summarize(text, abstractable_doc)

    # Output result.
    out_text = ''

    dic_len = len(result_dict["summarize_result"])
    if dic_len > 5 :
        dic_len = 5
    for i in range(dic_len):
        out_text += result_dict["summarize_result"][i]
    return out_text
以前のgetBody()から上記のgetSummary()を呼び出します。
タイトルや本文に色々ゴミが入ってくるので軽く削除してます。
またブログアップロードする際に改行文字をHTMLの改行タグ(<BR>)に変更しています。
test.py
def getBody(link):
    try :
        res = requests.get(link)
        extractor.analyse(res.text)
        text, title = extractor.as_text()
        title = re.sub('[-|:|\||\[|\(|\{].*','',title)
        text = re.sub('&.*?;','',text)
        text = getSummary(text)
        return postBlog(title,text.replace('\n','<BR>'),'TECHNOLOGY')
    except Exception as e :
        print(e)
        return None
結果はこちら

ちなみに要約前は以下。
次は翻訳に入ります。

参考URL:

pysummarization