pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

自然言語の要約をためす

目的

勉強で参考にしたページの要約をしたい。
 

環境構築

環境: Mac High Sierra

1. pythonをv2.7にする
2. pipで以下パッケージをインストール
numpy
scipy
scikit-learn
networkx
cherrypy
janome
pulp
Mecabはpipでエラーが出たため、janome選択
 

実行方法について

サーバ起動しWebリクエストする方法とPython APIの2つの方法あり。両方やってみる。
 

Webリクエスト実行

$ python -m summpy.server -h 127.0.0.1 -p 8080

 

ソース

# -*- coding: utf-8 -*-
import requests

params = dict()
params['sent_limit'] = 1
#params['char_limit'] = 15
params['text'] = "レアル・マドリーのジネディーヌ・ジダン監督は、パリ・サンジェルマンのブラジル代表FWネイマールの獲得が噂される件について、交渉が行われているかどうかは知らないと主張している。"
params['text'] += "11日の会見でのコメントをスペイン紙マルカなどが伝えた。"
params['text'] += "ネイマールのマドリー移籍に向けた報道は、ここ数日再び勢いを増している。"
#params['text'] += "負傷の療養のためブラジルに帰国していたネイマールにマドリー関係者が接触していたとの話や、ネイマールの父親が水面下で仲介役と接触したとの話もある。"
#params['text'] += "会見でネイマール獲得の噂について質問を受けたジダン監督は、「私は何も言う立場にはない」と返答。"
#params['text'] += "「交渉が行われているのかどうかは知らないし、私からは要請していない。"
#params['text'] += "良い形でシーズンを終えることに集中したい。その後のことはそれからだ」と語った。"
#params['text'] += "だが、もしネイマールが加入したとすれば、エースのFWクリスティアーノ・ロナウドと共存することは可能だという考えも述べている。"
#params['text'] += "「良い選手たちはいつも共存可能なものだ。私もジョルカエフと共存できないと言われていた。ピッチ外ではどうだか分からないが、ピッチ上では融合できる」と自身の現役時代を引き合いに出した。"
#params['text'] += "チームはチャンピオンズリーグ決勝を2週間後に控えているが、ネイマール加入の噂が影響することはないと主張。"
#params['text'] += "「そういう移籍の話がいつもあることは選手たちも分かっている。我々は決勝だけに集中している。ネイマールの話に乱されることはない」と語った。"
#print(params['text'])

url = 'http://127.0.0.1:8080/summarize'
r = requests.get(url, params=params)
print(r.content)

 

実行結果

{
  "debug_info": {}, 
  "summary": [
    "レアル・マドリーのジネディーヌ・ジダン監督は、パリ・サンジェルマンのブラジル代表FWネイマールの獲得が噂される件について、交渉が行われているかどうかは知らないと主張している。"
  ]
}

 
む〜1行目がそのままでただけ。
使い方がわからない。。。。。4行目を追加するとエラーになる。

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

 

Python API

ソース

# -*- coding: utf-8 -*-

from summpy.lexrank import summarize

text = 'レアル・マドリーのジネディーヌ・ジダン監督は、パリ・サンジェルマンのブラジル代表FWネイマールの獲得が噂される件について、交渉が行われているかどうかは知らないと主張している。'
text += '11日の会見でのコメントをスペイン紙マルカなどが伝えた。'
#text += 'ネイマールのマドリー移籍に向けた報道は、ここ数日再び勢いを増している。'
#text += "負傷の療養のためブラジルに帰国していたネイマールにマドリー関係者が接触していたとの話や、ネイマールの父親が水面下で仲介役と接触したとの話もある。"
#text += "会見でネイマール獲得の噂について質問を受けたジダン監督は、「私は何も言う立場にはない」と返答。"
#text += "「交渉が行われているのかどうかは知らないし、私からは要請していない。"
#text += "良い形でシーズンを終えることに集中したい。その後のことはそれからだ」と語った。"
#text += "だが、もしネイマールが加入したとすれば、エースのFWクリスティアーノ・ロナウドと共存することは可能だという考えも述べている。"
#text += "「良い選手たちはいつも共存可能なものだ。私もジョルカエフと共存できないと言われていた。ピッチ外ではどうだか分からないが、ピッチ上では融合できる」と自身の現役時代を引き合いに出した。"
#text += "チームはチャンピオンズリーグ決勝を2週間後に控えているが、ネイマール加入の噂が影響することはないと主張。"
#text += "「そういう移籍の話がいつもあることは選手たちも分かっている。我々は決勝だけに集中している。ネイマールの話に乱されることはない」と語った。"

text = unicode(text, encoding='utf-8')
# ensure type(text) is unicode
sentences, debug_info = summarize(
    text, sent_limit=5, continuous=True, debug=True
)

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

 

実行結果

レアル・マドリーのジネディーヌ・ジダン監督は、パリ・サンジェルマンのブラジル代表FWネイマールの獲得が噂される件について、交渉が行われているかどうかは知らないと主張している。
11日の会見でのコメントをスペイン紙マルカなどが伝えた。

 
む〜よくわからない。使い方が間違ってるのだろう。。。