Help us understand the problem. What is going on with this article?

summpyで文章要約してみた

リクルートテクノロジーズが公開している文章要約ツールsummpyを試してみました。

summpy
https://github.com/recruit-tech/summpy

環境はUbuntu16.4です。
動作にはPython 2.7が必要。デフォルトでは入ってないのでanacondaで2.7の環境を整備します。

$ conda create -n 2.7 python=2.7 anaconda

ちゃんとインストールできたか確認

$ source activate 2.7
(2.7)$
(2.7)$ conda info -e
# conda environments:
#
base                     /home/croso/anaconda3
2.7                   *  /home/croso/anaconda3/envs/2.7
3.5                      /home/croso/anaconda3/envs/3.5
3.6                      /home/croso/anaconda3/envs/3.6

形態素解析にMeCabまたはjanomeが必要ということでMecab-pythonをインストール

(2.7)$ pip install mecab-python

続いてpipでsummpyをインストールします

(2.7)$ pip install summpy 

サンプルスクリプトを作成

# -*- coding: utf-8 -*-
from summpy.lexrank import summarize

text=u'''
総務省が1日発表した9月の完全失業率(季節調整値)は2.4%となり、前月から0.2ポイント悪化した。

ロイターの調査では2.3%が予想されていた。

完全失業率は2018年1月以降、2.5%以下の水準で推移している。

総務省は「失業率は上昇したが、水準としては約26年ぶりの低い水準で推移しており、雇用情勢は着実に改善している」(幹部)と総括した。

就業者数(季節調整値)は6730万人と前月に比べ5万人減少。

完全失業者数(同)は167万人と前月から13万人増加した。

完全失業者数の増加は6カ月ぶり。

内訳をみると、非自発的な離職は前月と同数だったが、自発的な離職(自己都合)は同1万人増、新たな求職は同9万人増となっており、総務省は「新たに働きたいという人が増えている」とみている。

原数値では、就業者数は前年同月比53万人増の6768万人だった。

81カ月連続で増加し、比較可能な1953年以降過去最多となった。

15―64歳の就業率は77.9%と過去最高タイ。

厚生労働省が発表した9月の有効求人倍率(季節調整値)は1.57倍で、前月から低下した。

ロイターの調査では1.59倍が見込まれていた。
'''

sentences, debug_info = summarize(
    text, sent_limit=2
)

for sent in sentences:
    print sent.strip().encode('utf-8')


ニュースサイトから適当に抜粋した記事を解析してみます。
sent_limitは結果を何行にまとめるか?みたいです。
ここまではsummpyのREADME.mdをそのままなぞった形です。

動作させるとエラーとなりました。

"error": "add_edge() takes exactly 3 arguments (4 given)"

調べてみるとnetworkxとやらのバージョン不一致とのこと。
https://teratail.com/questions/114565
バージョンを合わせることにします。

(2.7)$ pip install multiqc==1.2
(2.7)$ pip install networkx==1.11

初めにmultiqcをインストールしてください。multiqcをインストールすると自動でnetworkxも2.2をインストールしちゃうので、その上からnetworkxの1.11を上書きしてあげないと上手く環境を再現できません。

出来上がった文章が以下です

就業者数(季節調整値)は6730万人と前月に比べ5万人減少。
完全失業者数(同)は167万人と前月から13万人増加した。

どんなもんでしょうか。就業者数は減少、失業者数は増加、ということで日本の景気が冷え込みましたと要約文から読み取れます。ただ「前月から0.2ポイント悪化した」という主題ともいえる文章を見逃している気もします。

あと勘違いしていたのですが「文章の要約」はしてくれないみたいです。文章のなかから重要な行だけを抽出するツールというのが正しいみたい。

ちなみにmecabはインストールしてそのまま利用している人はほとんどいないと思います。辞書を追加しないと使い物になりません。というわけで、以下をインストール。

https://github.com/neologd/mecab-ipadic-neologd

最新ワード対応しているmecab辞書です。インストール後に以下に辞書情報が入っているはず。

(2.7)$ ls /usr/local/lib/mecab/dic/mecab-ipadic-neologd
char.bin  dicrc  left-id.def  matrix.bin  pos-id.def  rewrite.def  right-id.def  sys.dic  unk.dic

辞書を自動で読んでほしいのですが、summpyにはそんな機能ありませんでしたので、ソースの一部を書き換えて対応しました。(mecab-pythonのほうに手を入れるほうが正しいかも...)

(2.7)$ vi ~/anaconda3/envs/2.7/lib/python2.7/site-packages/summpy/misc/mecab_segmenter.py 

8行目

_mecab = MeCab.Tagger()

_mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

に差し替え。これで多少精度は良くなっているはず...

関係ない話になってしまいますが、機械学習には膨大な量の学習データが必要です。そのなかで文章要約というのは学習データを比較的集めやすい課題だと思いました。数多あるニュースサイトから正解データは記事タイトル、学習データを記事本文にすれば、いくらでもネットにサンプルが転がっているわけで、勉強にはよい題材かもしれないと思いました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした