pythonで文章要約を行う方法を調べていたことがありました。
pythonで要約する方法はいくつかあったのですが今回はpysummarizationを使った方法を。
pysummarizationの使い方
pysummarizationを使った文の要約にはpysummarizationとmecabが必要です。
それぞれpip isntallで追加します。
pip install pysummarization
pip install mecab-python3
ソースコードです。
from pysummarization.nlpbase.auto_abstractor import AutoAbstractor
from pysummarization.tokenizabledoc.simple_tokenizer import SimpleTokenizer
from pysummarization.abstractabledoc.top_n_rank_abstractor import TopNRankAbstractor
from pysummarization.tokenizabledoc.mecab_tokenizer import MeCabTokenizer
import re
import MeCab
def fn_start_document_summarize(file_path):
with open(file_path, "r", encoding="utf-8") as f:
contents = f.readlines()
# contents = re.sub("《[^》]+》", "", contents)
# contents = re.sub("[[^]]+]", "", contents)
# contents = re.sub("[| 「」\n]", "", contents)
document = ''.join(contents)
print(u'[原文書]')
print(document)
# Object of automatic summarization.
auto_abstractor = AutoAbstractor()
# Set tokenizer for Japanese.
auto_abstractor.tokenizable_doc = MeCabTokenizer()
# Set delimiter for making a list of sentence.
auto_abstractor.delimiter_list = ["。", "\n"]
# Object of abstracting and filtering document.
abstractable_doc = TopNRankAbstractor()
# Summarize document.
result_dict = auto_abstractor.summarize(document, abstractable_doc)
print(u'[文書要約結果]')
# Output result.
for sentence in result_dict["summarize_result"]:
print(sentence)
if __name__ == '__main__':
file_path = "読み込ませたいファイルを指定する"
fn_start_document_summarize(file_path)
実際に要約をした結果
今回は青空文庫よりカフカの「変身」を要約してみました。
データは青空文庫よりダウンロードしました。
個人的にこの「変身」読んでみて欲しいです。
(虫になった理由が最後まで説明されない。
自分を最後まで気にかけていてくれた妹にりんごを投げられて生涯を終える。
カフカの父親へのコンプレックスなどが作品に反映されていて面白いです)
普通に作品を読んでいただきたいですが、とりあえず要約してみます。
[文書要約結果]
ある朝、グレゴール・ザムザが気がかりな夢から目ざめたとき、自分がベッドの上で一匹の巨大な毒虫に変ってしまっているのに気づいた。
彼は甲殻のように固い背中を下にして横たわり、頭を少し上げると、何本もの弓形のすじにわかれてこんもりと盛り上がっている自分の茶色の腹が見えた。
腹の盛り上がりの上には、かけぶとんがすっかりずり落ちそうになって、まだやっともちこたえていた。
ふだんの大きさに比べると情けないくらいかぼそいたくさんの足が自分の眼の前にしょんぼりと光っていた。
「おれはどうしたのだろう?」と、彼は思った。
自分の部屋、少し小さすぎるがまともな部屋が、よく知っている四つの壁のあいだにあった。
まず彼は身体の下の部分を動かしてベッドから出ようとしたが、まだ自分で見てもいないし、正しい想像をめぐらすこともできないでいるこの下半身の部分は、ひどく動かすことがむずかしいとわかった。
きっと今やっとベッドから出たばかりで、まだ服を着始めていなかったのだろう。
「いったい、どうしたんだね? 君は自分の部屋にバリケードを築いて閉じこもり、ただ、イエスとかノーとだけしか返事をしない。
それはそうとしても、これがまだ彼の父親なのだろうか。
要約ではストーリーが全く分かりませんw
要約は小説では難しいようです。
小説意外なら精度も上がると思います。
とりあえずpythonで要約のプログラムを使いたいとう方は、サンプルソースを使っていただければと思います。
お役に立ったのなら幸いです。