pikesaku’s blog

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

Natural Language API の基本メモ(analyzeEntitiesメソッド)

インプットテキスト

AIスピーカー「アレクサ」に潜む弱点 部屋に侵入される恐れも - ライブドアニュース

アマゾンのAIスピーカー「エコー(アレクサ)」の発売以来、急速に人気が高まってきたスマート・デバイスの音声操作機能。だが、最近そこに思わぬセキュリティ・ホールが発見された。
私たち人間には聞き取れないが、機械にだけは聞き取れるサブリミナル・メッセージを音声や音楽などに忍ばせることで、スマホAIスピーカーを外部の第三者が自由自在に操れるというのだ。
このショッキングな研究成果を発表したのは、米カリフォルニア大学バークレイ校の科学者チーム。彼らは録音された音声メッセージや音楽に巧妙な命令を忍ばせ、これをユーチューブなどから流すことで、AIスピーカーのようなスマート・デバイスを秘かに操作することに成功した。
これにより本来の利用者がスマート・デバイスの電源を入れた状態で音楽を聴いたり、動画を見たりしている間に、(自分のアカウントを通じて)悪意を持った第三者から勝手にオンライン・ショッピングをされたり、自分のお金をどこかに送金されたり、甚だしい場合にはドアのロックを外されて部屋に侵入されたりする恐れが出てきたという。


サンプルコード

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
import six


def entities_text(text):
    client = language.LanguageServiceClient()

    if isinstance(text, six.binary_type):
        text = text.decode('utf-8')

    # Instantiates a plain text document.
    document = types.Document(
        content=text,
        type=enums.Document.Type.PLAIN_TEXT)

    entities = client.analyze_entities(document).entities
    lang = client.analyze_entities(document).language

    entity_type = ('UNKNOWN', 'PERSON', 'LOCATION', 'ORGANIZATION',
                   'EVENT', 'WORK_OF_ART', 'CONSUMER_GOOD', 'OTHER')

    for entity in entities:
        print('=' * 20)
        print(u'{:<16}: {}'.format('name', entity.name))
        print(u'{:<16}: {}'.format('type', entity_type[entity.type]))
        print(u'{:<16}: {}'.format('salience', entity.salience))
        print(u'{:<16}: {}'.format('wikipedia_url', entity.metadata.get('wikipedia_url', '-')))

        for i in entity.mentions:
            print(u'{:<16}: {}'.format('mentions', 'content: ' + i.text.content + ' begin_offset: ' +  str(i.text.begin_offset) + ' type: ' + entity_type[i.type]))


def main():
    text = 'アマゾンのAIスピーカー「エコー(アレクサ)」の発売以来、急速に人気が高まってきたスマート・デバイスの音声操作機能。だが、最近そこに思わぬセキュリティ・ホールが発見された。私たち人間には聞き取れないが、機械にだけは聞き取れるサブリミナル・メ ッセージを音声や音楽などに忍ばせることで、スマホやAIスピーカーを外部の第三者が自由自在に操れるというのだ。このショッキングな研究成果を発表したのは、米カリフォルニア大学バークレイ校の科学者チーム。彼らは録音された音声メッセージや音楽に巧妙な命令を忍ば せ、これをユーチューブなどから流すことで、AIスピーカーのようなスマート・デバイスを秘かに操作することに成功した。これにより本来の利用者がスマート・デバイスの電源を入れた状態で音楽を聴いたり、動画を見たりしている間に、(自分のアカウントを通じて)悪意を 持った第三者から勝手にオンライン・ショッピングをされたり、自分のお金をどこかに送金されたり、甚だしい場合にはドアのロックを外されて部屋に侵入されたりする恐れが出てきたという。'
    entities_text(text)


main()


実行結果

mentionsの出力がおかしな感じ。typeはLOCATIONのみ。

====================
name            : AIスピーカー
type            : CONSUMER_GOOD
salience        : 0.1747267097234726
wikipedia_url   : -
mentions        : content: AIスピーカー begin_offset: -1 type: LOCATION
mentions        : content: AIスピーカー begin_offset: -1 type: LOCATION
mentions        : content: AIスピーカー begin_offset: -1 type: LOCATION
====================
name            : スマート
type            : OTHER
salience        : 0.17224037647247314
wikipedia_url   : -
mentions        : content: スマート begin_offset: -1 type: LOCATION
mentions        : content: スマート begin_offset: -1 type: LOCATION
====================
name            : アマゾン
type            : OTHER
salience        : 0.112796850502491
wikipedia_url   : https://en.wikipedia.org/wiki/Amazon_(company)
mentions        : content: アマゾン begin_offset: -1 type: PERSON
mentions        : content: アレクサ begin_offset: -1 type: LOCATION
====================
name            : 音楽
type            : WORK_OF_ART
salience        : 0.05859414488077164
wikipedia_url   : -
mentions        : content: 音楽 begin_offset: -1 type: LOCATION
mentions        : content: 音楽 begin_offset: -1 type: LOCATION
mentions        : content: 音楽 begin_offset: -1 type: LOCATION
====================
name            : デバイス
type            : CONSUMER_GOOD
salience        : 0.05645248666405678
wikipedia_url   : -
mentions        : content: デバイス begin_offset: -1 type: LOCATION
====================
name            : 第三者
type            : PERSON
salience        : 0.03569682314991951
wikipedia_url   : -
mentions        : content: 第三者 begin_offset: -1 type: LOCATION
mentions        : content: 第三者 begin_offset: -1 type: LOCATION
====================
name            : エコー
type            : OTHER
salience        : 0.0339825302362442
wikipedia_url   : -
mentions        : content: エコー begin_offset: -1 type: LOCATION
====================
name            : 発売
type            : EVENT
salience        : 0.0339825302362442
wikipedia_url   : -
mentions        : content: 発売 begin_offset: -1 type: LOCATION
====================
name            : 人気
type            : OTHER
salience        : 0.0339825302362442
wikipedia_url   : -
mentions        : content: 人気 begin_offset: -1 type: LOCATION
====================
name            : 音声操作機能
type            : OTHER
salience        : 0.0339825302362442
wikipedia_url   : -
mentions        : content: 音声操作機能 begin_offset: -1 type: LOCATION
====================
name            : スマホ
type            : CONSUMER_GOOD
salience        : 0.021044226363301277
wikipedia_url   : -
mentions        : content: スマホ begin_offset: -1 type: LOCATION
====================
name            : 音声
type            : OTHER
salience        : 0.016728678718209267
wikipedia_url   : -
mentions        : content: 音声 begin_offset: -1 type: LOCATION
====================
name            : ホール
type            : LOCATION
salience        : 0.014126484282314777
wikipedia_url   : -
mentions        : content: ホール begin_offset: -1 type: LOCATION
====================
name            : セキュリティ
type            : OTHER
salience        : 0.014126484282314777
wikipedia_url   : -
mentions        : content: セキュリティ begin_offset: -1 type: LOCATION
====================
name            : スマート・デバイス
type            : CONSUMER_GOOD
salience        : 0.01232805848121643
wikipedia_url   : -
mentions        : content: スマート・デバイス begin_offset: -1 type: LOCATION
====================
name            : こと
type            : OTHER
salience        : 0.011985300108790398
wikipedia_url   : -
mentions        : content: こと begin_offset: -1 type: LOCATION
====================
name            : サブリミナル・メッセージ
type            : OTHER
salience        : 0.009465305134654045
wikipedia_url   : -
mentions        : content: サブリミナル・メッセージ begin_offset: -1 type: LOCATION
====================
name            : 機械
type            : OTHER
salience        : 0.009465305134654045
wikipedia_url   : -
mentions        : content: 機械 begin_offset: -1 type: LOCATION
====================
name            : 人間
type            : PERSON
salience        : 0.009465305134654045
wikipedia_url   : -
mentions        : content: 人間 begin_offset: -1 type: LOCATION
====================
name            : ショッピング
type            : EVENT
salience        : 0.008759783580899239
wikipedia_url   : -
mentions        : content: ショッピング begin_offset: -1 type: LOCATION
====================
name            : アカウント
type            : OTHER
salience        : 0.007321797776967287
wikipedia_url   : -
mentions        : content: アカウント begin_offset: -1 type: LOCATION
====================
name            : 外部
type            : OTHER
salience        : 0.006733151618391275
wikipedia_url   : -
mentions        : content: 外部 begin_offset: -1 type: LOCATION
====================
name            : 米
type            : LOCATION
salience        : 0.006372390780597925
wikipedia_url   : -
mentions        : content: 米 begin_offset: -1 type: PERSON
====================
name            : カリフォルニア大学
type            : ORGANIZATION
salience        : 0.006372390780597925
wikipedia_url   : -
mentions        : content: カリフォルニア大学 begin_offset: -1 type: PERSON
====================
name            : 音声メッセージ
type            : WORK_OF_ART
salience        : 0.006255020387470722
wikipedia_url   : -
mentions        : content: 音声メッセージ begin_offset: -1 type: LOCATION
====================
name            : 科学者チーム
type            : PERSON
salience        : 0.005568326450884342
wikipedia_url   : -
mentions        : content: 科学者チーム begin_offset: -1 type: LOCATION
====================
name            : 研究成果
type            : OTHER
salience        : 0.005568326450884342
wikipedia_url   : -
mentions        : content: 研究成果 begin_offset: -1 type: LOCATION
====================
name            : バークレイ校
type            : ORGANIZATION
salience        : 0.005568326450884342
wikipedia_url   : -
mentions        : content: バークレイ校 begin_offset: -1 type: LOCATION
====================
name            : こと
type            : OTHER
salience        : 0.005289978347718716
wikipedia_url   : -
mentions        : content: こと begin_offset: -1 type: LOCATION
====================
name            : デバイス
type            : CONSUMER_GOOD
salience        : 0.005289978347718716
wikipedia_url   : -
mentions        : content: デバイス begin_offset: -1 type: LOCATION
====================
name            : こと
type            : OTHER
salience        : 0.005289978347718716
wikipedia_url   : -
mentions        : content: こと begin_offset: -1 type: LOCATION
====================
name            : 恐れ
type            : OTHER
salience        : 0.005215971264988184
wikipedia_url   : -
mentions        : content: 恐れ begin_offset: -1 type: LOCATION
====================
name            : 電源
type            : OTHER
salience        : 0.005215971264988184
wikipedia_url   : -
mentions        : content: 電源 begin_offset: -1 type: LOCATION
====================
name            : 命令
type            : OTHER
salience        : 0.0044446708634495735
wikipedia_url   : -
mentions        : content: 命令 begin_offset: -1 type: LOCATION
====================
name            : オンライン
type            : OTHER
salience        : 0.004084674641489983
wikipedia_url   : -
mentions        : content: オンライン begin_offset: -1 type: LOCATION
====================
name            : 金
type            : OTHER
salience        : 0.004084674641489983
wikipedia_url   : -
mentions        : content: 金 begin_offset: -1 type: LOCATION
====================
name            : どこか
type            : OTHER
salience        : 0.004084674641489983
wikipedia_url   : -
mentions        : content: どこか begin_offset: -1 type: LOCATION
====================
name            : 悪意
type            : OTHER
salience        : 0.003994716331362724
wikipedia_url   : -
mentions        : content: 悪意 begin_offset: -1 type: LOCATION
====================
name            : 状態
type            : OTHER
salience        : 0.0038634329102933407
wikipedia_url   : -
mentions        : content: 状態 begin_offset: -1 type: LOCATION
====================
name            : 動画
type            : WORK_OF_ART
salience        : 0.0038634329102933407
wikipedia_url   : -
mentions        : content: 動画 begin_offset: -1 type: LOCATION
====================
name            : 利用者
type            : PERSON
salience        : 0.0038634329102933407
wikipedia_url   : -
mentions        : content: 利用者 begin_offset: -1 type: LOCATION
====================
name            : 場合
type            : OTHER
salience        : 0.0036949925124645233
wikipedia_url   : -
mentions        : content: 場合 begin_offset: -1 type: LOCATION
====================
name            : ドア
type            : OTHER
salience        : 0.0036949925124645233
wikipedia_url   : -
mentions        : content: ドア begin_offset: -1 type: LOCATION
====================
name            : ロック
type            : EVENT
salience        : 0.0036949925124645233
wikipedia_url   : -
mentions        : content: ロック begin_offset: -1 type: LOCATION
====================
name            : 部屋
type            : LOCATION
salience        : 0.0036949925124645233
wikipedia_url   : -
mentions        : content: 部屋 begin_offset: -1 type: LOCATION
====================
name            : ユーチューブ
type            : OTHER
salience        : 0.0029422540683299303
wikipedia_url   : -
mentions        : content: ユーチューブ begin_offset: -1 type: LOCATION

Natural Language API の基本メモ(analyzeSentimentメソッド)

インプットテキスト

AIスピーカー「アレクサ」に潜む弱点 部屋に侵入される恐れも - ライブドアニュース

アマゾンのAIスピーカー「エコー(アレクサ)」の発売以来、急速に人気が高まってきたスマート・デバイスの音声操作機能。だが、最近そこに思わぬセキュリティ・ホールが発見された。
私たち人間には聞き取れないが、機械にだけは聞き取れるサブリミナル・メッセージを音声や音楽などに忍ばせることで、スマホAIスピーカーを外部の第三者が自由自在に操れるというのだ。
このショッキングな研究成果を発表したのは、米カリフォルニア大学バークレイ校の科学者チーム。彼らは録音された音声メッセージや音楽に巧妙な命令を忍ばせ、これをユーチューブなどから流すことで、AIスピーカーのようなスマート・デバイスを秘かに操作することに成功した。
これにより本来の利用者がスマート・デバイスの電源を入れた状態で音楽を聴いたり、動画を見たりしている間に、(自分のアカウントを通じて)悪意を持った第三者から勝手にオンライン・ショッピングをされたり、自分のお金をどこかに送金されたり、甚だしい場合にはドアのロックを外されて部屋に侵入されたりする恐れが出てきたという。

 

サンプルコード

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

import argparse
import sys

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
import six


def sentiment_text(text):
    """Detects sentiment in the text."""
    client = language.LanguageServiceClient()
    if isinstance(text, six.binary_type):
        text = text.decode('utf-8')
    # Instantiates a plain text document.
    document = types.Document(
        content=text,
        type=enums.Document.Type.PLAIN_TEXT)
    # Detects sentiment in the document. You can also analyze HTML with:
    #   document.type == enums.Document.Type.HTML
    sentiment = client.analyze_sentiment(document).document_sentiment
    print('AnalyzeSentiment -------------------------------------')
    print('')
    print(' [全体結果]')
    print(' Score:     {}'.format(sentiment.score))
    print(' Magnitude: {}'.format(sentiment.magnitude))
    print('')
    print(' [文単位結果]')
    sentiment = client.analyze_sentiment(document).sentences
    for line in sentiment:
        print(u' Sentence:  {}'.format(line.text.content))
        print(u' Score:     {}'.format(line.sentiment.score))
        print(u' Magnitude: {}'.format(line.sentiment.magnitude))
        print(u'')


def main():
    text = 'アマゾンのAIスピーカー「エコー(アレクサ)」の発売以来、急速に人気が高まってきたスマート・デバイスの音声操作機能。だが、最近そこに思わぬセキュリティ・ホールが発見された。私たち人間には聞き取れないが、 機械にだけは聞き取れるサブリミナル・メッセージを音声や音楽などに忍ばせることで、スマホやAIスピーカーを外部の第三者が自由自在に操れるというのだ。このショッキングな研究成果を発表したのは、米カリフォルニア大学バーク レイ校の科学者チーム。彼らは録音された音声メッセージや音楽に巧妙な命令を忍ばせ、これをユーチューブなどから流すことで、AIスピーカーのようなスマート・デバイスを秘かに操作することに成功した。これにより本来の利用者が スマート・デバイスの電源を入れた状態で音楽を聴いたり、動画を見たりしている間に、(自分のアカウントを通じて)悪意を持った第三者から勝手にオンライン・ショッピングをされたり、自分のお金をどこかに送金されたり、甚だし い場合にはドアのロックを外されて部屋に侵入されたりする恐れが出てきたという。'
    sentiment_text(text)


main()

実行結果

AnalyzeSentiment -------------------------------------
 [全体結果]
 Score:     -0.20000000298023224
 Magnitude: 3.0

 [文単位結果]
 Sentence:  アマゾンのAIスピーカー「エコー(アレクサ)」の発売以来、急速に人気が高まってきたスマート・デバイスの音声操作機能。
 Score:     -0.5
 Magnitude: 0.5

 Sentence:  だが、最近そこに思わぬセキュリティ・ホールが発見された。
 Score:     0.10000000149011612
 Magnitude: 0.10000000149011612

 Sentence:  私たち人間には聞き取れないが、機械にだけは聞き取れるサブリミナル・メッセージを音声や音楽などに忍ばせることで、スマホやAIスピーカーを外部の第三者が自由自在に操れるというのだ。
 Score:     -0.20000000298023224
 Magnitude: 0.20000000298023224

 Sentence:  このショッキングな研究成果を発表したのは、米カリフォルニア大学バークレイ校の科学者チーム。
 Score:     0.4000000059604645
 Magnitude: 0.4000000059604645

 Sentence:  彼らは録音された音声メッセージや音楽に巧妙な命令を忍ばせ、これをユーチューブなどから流すことで、AIスピーカーのようなスマート・デバイスを秘かに操作することに成功した。
 Score:     -0.699999988079071
 Magnitude: 0.699999988079071

 Sentence:  これにより本来の利用者がスマート・デバイスの電源を入れた状態で音楽を聴いたり、動画を見たりしている間に、(自分のアカウントを通じて)悪意を持った第三者から勝手にオンライン・ショッピングをされたり、自分のお金をどこかに送金されたり、甚だしい場合にはドアのロックを外されて部屋に侵入されたりする恐れが出てきたという。
 Score:     -0.800000011920929
 Magnitude: 0.800000011920929

Natural Language API の基本メモ

特徴

テキスト分析・アノテーション(※1)付与するメソッドがあり
分析結果より言語理解のための情報が得られる
※1 データに注釈となる情報をメタデータとして追加すること、あるいは、追加されたメタデータのこと。
 アノテーションとは - IT用語辞典 Weblio辞書

機能 メソッド 出力
感情分析 analyzeSentiment 感情分析結果。ポジティブ or ネガティブ or ニュートラ
エンティティ分析 analyzeEntities 既知のエンティティ(著名人、地名などの固有名詞、レストラン、競技場などの普通名詞)に関する情報
エンティティ感情分析 analyzeEntitySentiment 抽出したエンティティに対する感情分析結果
構文解析 analyzeSyntax 品詞(動詞・形容詞・名詞等)分解結果
コンテンツ分類 classifyText カテゴリ

 

感情分析API(analyzeSentimentメソッド)

APIレスポンス概要

項目 説明
score -1.0(ネガティブ)~1.0(ポジティブ)
magnitude 感情の強度(ポジティブとネガティブの両方)が 0.0~+inf

 
magnitudeは感情が表現される度に数値アップ。文章が長い程、高スコアになる傾向あり。
scoreは相対算出。ネガティブ・ポジティブが混在するドキュメントは相殺される。
混在と無感情ドキュメントの区別にmagnitudeを利用。
混在 -> magnitude数値高い
無感情 -> magnitude数値低い
ドキュメントの感情比較する際は、scoreをmagnitudeで調整して算出する。

f:id:pikesaku:20180520083933p:plain

レスポンスにはリクエストしたドキュメント全体と文章単位の上記値が含まれる。
 

感情分析API(analyzeEntitiesメソッド)

APIレスポンス概要

項目 説明
entity 名詞 or 固有名詞の文字列
type タイプ。人物 or 場所 or 消費財
metadata 知識レポジトリ情報。Wiki URL等
salience ドキュメントにおける重要度。0.0(低)〜1.0(高)
mentions ドキュメント内の出現位置、使われ方(固有名詞or普通名詞)

 
typeで類似のentityを区別可能。例)「Lawrence of Arabia」(映画)と「T.E. Lawrence」(人物)
metadataは随時情報追加される
salienceは要約に利用可能
mentionsに使われ方の2つのタイプ情報あり。PROPER(固有名詞)、COMMON(普通名詞)
 

感情分析API(analyzeEntitySentimentメソッド)

APIレスポンス概要

analyzeSentimentとanalyzeEntitiesの情報を統合したもの。
 

構文解析API(analyzeSyntaxメソッド)

APIレスポンス概要

sentences(文抽出)とtokens(品詞抽出)の2つあり。それぞれが以下の情報を持つ。
 
sentences

項目 説明
content 抽出された文章
beginOffset ドキュメント内の開始位置

 
tokens

項目 説明
content 抽出された文章
partOfSpeech 文法情報(形態論的情報含む)
lemma 単語の語幹。正規化で利用 例)「write」、「writing」、「wrote」、「written」はすべて同じ基本形(「write」)に基づく
dependencyEdge 単語間の関係を有向木の辺によって識別。翻訳、情報の抽出、要約に役立つ

 
dependencyEdgeは以下付属情報を持つ

headTokenIndex トークン」の(0 から始まる)インデックス値を提供。親を持たないトークンでは自身のインデックスになる。
label ヘッドトークンに対する依存関係のタイプを提供

Natural Language API Client Librariesを使う!

参考

cloud.google.com
 

作業の流れ

Cloud Shellでも認証設定必要だった。。。gcloudコマンドは認証設定なしで動いたのに。

①アカウント作成

f:id:pikesaku:20180519102101p:plain
 
f:id:pikesaku:20180519102249p:plain
 

JSONファイルダウンロード

 

③Cloud ShellにJSONファイルをアップロードし以下環境変数にファイルパス設定

export GOOGLE_APPLICATION_CREDENTIALS=/home/pike/hoge.json

 

④サンプルコード実行

a.py

# Imports the Google Cloud client library
from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
# Instantiates a client
client = language.LanguageServiceClient()
# The text to analyze
text = u'Hello, world!'
document = types.Document(
    content=text,
    type=enums.Document.Type.PLAIN_TEXT)
# Detects the sentiment of the text
sentiment = client.analyze_sentiment(document=document).document_sentiment
print('Text: {}'.format(text))
print('Sentiment: {}, {}'.format(sentiment.score, sentiment.magnitude))

 

$ python ./a.py
Text: Hello, world!
Sentiment: 0.300000011921, 0.300000011921
$

 
サービスアカウント設定しないとコード実行時に以下エラーになる。

Traceback (most recent call last):
  File "./a.py", line 16, in <module>
    sentiment = client.analyze_sentiment(document=document).document_sentiment
  File "/usr/local/lib/python2.7/dist-packages/google/cloud/language_v1/gapic/language_service_client.py", line 180, in analyze_sentiment
    return self._analyze_sentiment(request, retry=retry, timeout=timeout)
  File "/usr/local/lib/python2.7/dist-packages/google/api_core/gapic_v1/method.py", line 139, in __call__
    return wrapped_func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/google/api_core/retry.py", line 260, in retry_wrapped_func
    on_error=on_error,
  File "/usr/local/lib/python2.7/dist-packages/google/api_core/retry.py", line 177, in retry_target
    return target()
  File "/usr/local/lib/python2.7/dist-packages/google/api_core/timeout.py", line 206, in func_with_timeout
    return func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/google/api_core/grpc_helpers.py", line 56, in error_remapped_callable
    six.raise_from(exceptions.from_grpc_error(exc), exc)
  File "/usr/local/lib/python2.7/dist-packages/six.py", line 737, in raise_from
    raise value
google.api_core.exceptions.PermissionDenied: 403 Cloud Natural Language API has not been used in project 618104708054 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/
language.googleapis.com/overview?project=618104708054 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

Google Natural Language API をやってみる!

API実行方法は2方法あり

①PCにCloud SDKインストールし、gcloudコマンド実行
②Cloud Shellから実行
Cloud ShellはAPI認証設定済み。こちらを使う。
 
 

作業の流れは以下

②Cloud Natural Language API 有効化

f:id:pikesaku:20180519090523p:plain
f:id:pikesaku:20180519090533p:plain
 

③Cloud ShellでサンプルAPI実行

f:id:pikesaku:20180519090612p:plain
f:id:pikesaku:20180519090627p:plain

自然言語の要約をためす

目的

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

環境構築

環境: 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日の会見でのコメントをスペイン紙マルカなどが伝えた。

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