17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sumyを使って青空文庫を要約してみる

Posted at

sumyを使って青空文庫を要約してみる

TL;DR

テキスト要約モジュールであるsumyを使って青空文庫の書籍を要約してみました。

sumyを使う部分はけ日記 - Python: LexRankで日本語の記事を要約するを参考にさせていただきました。
同記事ではTokenizerにJanomeを使用していますが、今回はginza(spacy)を使用しています。

実行環境

  • Python 3.6.8
  • sumy 0.7.0
  • ginza(spacy) 1.0.2
  • beautifulsoup4 4.7.1

ソースコード

spacyのロード

import spacy

nlp = spacy.load('ja_ginza_nopn')

青空文庫のスクレイピング

from urllib import request
from bs4 import BeautifulSoup
import bs4

# urlに要約対象とする書籍のURLを指定します。以下は「だしの取り方 by 北大路魯山人」のURLです。
url = 'https://www.aozora.gr.jp/cards/001403/files/49986_37674.html'
html = request.urlopen(url)
soup = BeautifulSoup(html, 'html.parser')
body = soup.select('.main_text')
text = ''
for b in body[0]:
    if type(b) == bs4.element.NavigableString:
        text += b
        continue
    # ルビの場合、フリガナは対象にせずに、漢字のみ使用します。
    text += ''.join([e.text for e in b.find_all('rb')])

分析用コーパスの準備

活用などで表記が異なると違う単語として計算されてしまうため、分析用コーパスではレンマ化します。

corpus = []
originals = []
doc = nlp(text)
for s in doc.sents:
    originals.append(s)
    tokens = []
    for t in s:
        tokens.append(t.lemma_)
    corpus.append(' '.join(tokens))

print(len(corpus))
print(len(originals))

sumyによる要約

from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lex_rank import LexRankSummarizer

# 連結したcorpusを再度tinysegmenterでトークナイズさせる
parser = PlaintextParser.from_string(''.join(corpus), Tokenizer('japanese'))

summarizer = LexRankSummarizer()
summarizer.stop_words = [' ']  # スペースも1単語として認識されるため、ストップワードにすることで除外する

# sentencres_countに要約後の文の数を指定します。
summary = summarizer(document=parser.document, sentences_count=3)

# 元の文を表示
for sentence in summary:
    print(originals[corpus.index(sentence.__str__())])

まとめ

だしの取り方 by 北大路魯山人を3行で要約すると以下のようになりました。良いだしを取るためには、鉋(かんな)から準備しましょう。

どんなふうに削ったのがいいだしになるかというと、削ったかつおぶしがまるで雁皮紙のごとく薄く、ガラスのように光沢のあるものでなければならない。
現在、鉋でかつおぶしを削っているのは料理屋のみであって、たいがいは道具もなくて我慢しているようである。
鉋があっても、切れない場合が多いし、それを使用して削れないと思うくらいなら、日本料理をやめた方がいい。

蜘蛛の糸 by 芥川龍之介の場合は以下のとおりです。

陀多は両手を蜘蛛の糸にからみながら、ここへ来てから何年にも出した事のない声で、「しめた。
ところがふと気がつきますと、蜘蛛の糸の下の方には、数限もない罪人たちが、自分ののぼった後をつけて、まるで蟻の行列のように、やはり上へ上へ一心によじのぼって来るではございませんか。
が、そう云う中にも、罪人たちは何百となく何千となく、まっ暗な血の池の底から、うようよと這い上って、細く光っている蜘蛛の糸を、一列になりながら、せっせとのぼって参ります。

参考文献

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?