Pythonで文章要約!自然言語処理を使ってExciteの記事を要約してみた

こんにちは。
いつものtaanatsuです。

今回は、自然言語処理で文章要約をしてみます。
それではやっていきましょうか。

ターゲット

エキサイトニュースの記事
カーシェアリング各社を比較 タイムズ、カレコ、オリックスの対抗にdカーシェア
を要約してみます! 。 (正しく要約できているかは、記事に飛んでチェックしてみてください!)

バーチャルenv環境の準備

Python標準の venv を使っていこうと思います。

# バーチャルenvの作成
$ python3 -m venv venv

# ターミナルにバーチャルenvを反映
$ source venv/bin/activate 

必要モジュールのインストール

$ pip install sumy
$ pip install tinysegmenter
$ pip install ginza ja-ginza

実行コード

「LexRank」というアルゴリズムを使ってみます。
このアルゴリズムGoogle検索のPageRankを応用したアルゴリズム「TextRank」に加え、
TF-IDFという特徴量を加味しています。

from lxml.html._diffcommand import read_file
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lex_rank import LexRankSummarizer

# 要約対象のテキスト
text = read_file('./sample_text.txt')

# 3行要約をする(sentences_count=3なので、3行)
parser = PlaintextParser.from_string(text, Tokenizer('japanese'))
summarizer = LexRankSummarizer()
res = summarizer(document=parser.document, sentences_count=3)

for sentence in res:
    print(sentence)

要約結果「3行で頼む!」

カーシェアリング各社を比較 タイムズ、カレコ、オリックスの対抗にdカーシェア」の3行要約!
※ 元文章は一部画像削除や不要な文削除(箇条書きやカーシェアを使ってみた感想部分の削除)など、1〜2分でできるチューニングは行っています

カーシェアリングは、自家用車を購入するほど頻ぱんにクルマに乗らないが、買い物などちょっと出かけるときに使いたいという人向けの選択肢として、年々注目度が上がっている。
用途でいえば、各社が運営している駐車場の一画が車両ステーションになっているため拠点数が多く、短時間からの利用ができるので、週末のおでかけやちょい乗りに適している。
10~15分単位で料金が設定されており、1時間の利用で800円前後(月額基本料、距離料金を除く)だ。

カーシェアのまとめのようなものが出力されました。
各サービスのまとめではなく、カーシェアリングのまとめなのでタイトルとは少し乖離がありますね。
元文章をもう少しチューニングすれば、もっと精度良く出せるようになるのでしょうか?
また色々試してみたいですね!

結果

サクッと作った割には、要約的な意味では良さそうな結果となりました。
タイトルに近づけるには、各サービスの比較の文章も出てきてほしいなーってところですね。
チューニングを挟めばもっと精度も上がりそうな予感がしますね。

自然言語処理に興味があるエンジニアを、エキサイトでは募集しています!
よかったら一緒に働いてみませんか?

www.wantedly.com

と、いうわけで、今回は自然言語処理で遊んでみました。
では、また次回ー!