問題を整理して、質問することが解決の近道となる

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.71%

より良い文章要約方法があれば教えてください。

受付中

回答 3

投稿 編集

  • 評価 -4
  • クリップ 3
  • VIEW 225

simply

score 8

質問

Text Summarization API | PRODUCT | A3RT
A3RT(ココしか知らない)の文章要約APIを利用して、文章数12を文章数3にしています。
APIの制限事項は、「要約できる1文の最大文字数は200文字、且つ最大文章数は10」です。

制限を超えるので、文章を3分割して文章要約APIを3回利用し連結しています。
より良い方法があれば教えてください。

目的

https://www.dmm.co.jp/digital/videoa/-/detail/=/cid=118abp00940/
目的は、FANZA動画の作品を友人に定期紹介するにあたり、description(説明)が長ったらしいので要約したいためです。

現在のスクリプトですと、以下の結果になります。
これを掲載した前回の質問は削除されました。

[20-01-25 08:54:02:807 JST] a: 4 / b: 4 / c: 4
[20-01-25 08:54:02:808 JST] sentences[0]: プレステージ専属女優『野々浦 暖』が独特な校則のある学園に転校?。転校初日に驚きの校則を知らされる。校則 1女子生徒は透け透けの制服を着用せねばならない。校則 2女子生徒は学園内すべての男性の要求をカラダで応えなければならない。
[20-01-25 08:54:03:371 JST] summary: 校則 1女子生徒は透け透けの制服を着用せねばならない!
[20-01-25 08:54:03:371 JST] sentences[1]: 恥ずかしがりながらも指定の制服に着替えると、制服越しに透けて見えるスレンダーボディに学園中の男たちが欲情。放課後の教室で行われる生活指導の先生からのエッチな実技指導。先輩とプールサイドでローションまみれの秘密の特訓。同級生と先生から迫られ3Pセックス!。
[20-01-25 08:54:03:808 JST] summary: 恥ずかしがりながらも指定の制服に着替えると、制服越しに透けて見えるスレンダーボディに学園中の男たちが欲情!
[20-01-25 08:54:03:809 JST] sentences[2]: 部員のやる気を取り戻す為ご奉仕フェラで射精へと導く。最後はクラスの皆と仲良くぶっかけ乱交セックス。性春は爆発だ!。野々浦暖が学園の至る所でヤリまくるエロ過ぎる学園性活をお楽しみください。
[20-01-25 08:54:04:044 JST] summary: 部員のやる気を取り戻す為ご奉仕フェラで射精へと導く!
[20-01-25 08:54:04:045 JST] originText: プレステージ専属女優『野々浦 暖』が独特な校則のある学園に転校?!転校初日に驚きの校則を知らされる。校則 1女子生徒は透け透けの制服を着用せねばならない!校則 2女子生徒は学園内すべての男性の要求をカラダで応えなければならない!恥ずかしがりながらも指定の制服に着替えると、制服越しに透けて見えるスレンダーボディに学園中の男たちが欲情!放課後の教室で行われる生活指導の先生からのエッチな実技指導!先輩とプールサイドでローションまみれの秘密の特訓!同級生と先生から迫られ3Pセックス!?部員のやる気を取り戻す為ご奉仕フェラで射精へと導く!最後はクラスの皆と仲良くぶっかけ乱交セックス!性春は爆発だ!!野々浦暖が学園の至る所でヤリまくるエロ過ぎる学園性活をお楽しみください♪
[20-01-25 08:54:04:045 JST] resultText: 校則 1女子生徒は透け透けの制服を着用せねばならない!恥ずかしがりながらも指定の制服に着替えると、制服越しに透けて見えるスレンダーボディに学園中の男たちが欲情!部員のやる気を取り戻す為ご奉仕フェラで射精へと導く!


イメージ説明

// A3RTのAPIを使って文章要約を行う
function get_A3RT_Summarize(originText) {

  // テキストの区切り位置を調整する
  var editText = originText.replace(/!/g, '。').replace(/。。/g, '!。').replace(/。?/g, '!?')
  .replace(/?/g, '。').replace(/。。/g, '?。').replace(/♪/g, '。');

  // 最大文字数は200文字、且つ最大文章数は10 を超えていないか
  var sentences = [];
  var split = editText.replace(/。$/, '').split('。');// 末尾の"。"は除去してsplit
  if (editText.length <= 200 && split.length <= 10) {
    sentences.push(editText);
    var linenumber = "3"
  // 超えていたら文章を3つに区切る
  } else {
    // 基本区切り文字数を取得する
    var baseNumber = Math.floor(split.length / 3);
    // 3つの区切り文字数を調整する
    var a, b, c; a = b = c = baseNumber;
    var remainder = split.length % 3;
    if (remainder==1) { b++; }
    if (remainder==2) { a++; b++; }
    Logger.log('a: '+ a +' / b: '+ b +' / c: '+ c);
    // 文章を3つに区切る
    var aPart = '', bPart = '', cPart = '';
    for (var i=0; i < a; i++) { aPart += split[i] +'。'; }
    for (var i=a; i < a+b; i++) { bPart += split[i] +'。'; }
    for (var i=a+b; i < a+b+c; i++) { cPart += split[i] +'。'; }
    sentences.push(aPart);
    sentences.push(bPart);
    sentences.push(cPart);
    var linenumber = "1"
  }

  // 文章要約を行う
  var summaryfragment = [];
  var API_KEY = "XXXXXXXXXX";
  var summarize_URL = 'https://api.a3rt.recruit-tech.co.jp/text_summarization/v1';

  for (var i=0; i < sentences.length; i++) {
    Logger.log('sentences['+ i +']: '+ sentences[i]);    
    var payload = {
      "apikey"    : API_KEY,
      "sentences" : sentences[i],
      "linenumber": linenumber,
      "separation": "。"
    };
    var options = {
      'method' : 'POST',
      'payload': payload
    };
    var response = UrlFetchApp.fetch(summarize_URL, options);
    var src = response.getContentText();
    var json = JSON.parse(src);
    var summary = json["summary"];

    // 除去された区切り文字を復元する
    for (var j=0; j < summary.length; j++) {
      if (originText.match(summary[j] +'.?')) {
        summary[j] = originText.match(summary[j] +'.?')[0];
      }
    }
    // 要約結果の配列を連結する
    summaryfragment = summaryfragment.concat(summary);
    Logger.log('summary: '+ summary);
  }

  // 配列を連結して文字列にする
  var resultText = summaryfragment.join('');
  Logger.log('originText: '+ originText);
  Logger.log('resultText: '+ resultText);

  return resultText;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    上記に当てはまらず、質問内容が明確になっていない質問には「」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

回答 3

+2

自動要約 無料ツール by ユーザーローカル

10,000文字までの文章を要約することができます。

判定方法がないんですよ。これがいいか、リクルートがいいかは質問者様の気分でしかない。これでマイナスがついたとして、どうやって、ご気分に召すように、より良くなるように、あらためればいいかは誰にもわからない。誰にもというのは、判定方法を答えられない質問者様にすら分からないということです。やってみて気に入るか否かでしかないのですから。

参考までに探しかたですが Zuishin 様のご指摘を参考にこちらを確認しました。

GAS なら UrlfetchApp があるんで、規約的にどうかはしりませんが、API がなくてもフォームデータを偽装できたりもしますよ(UrlfetchApp は user-agent を偽装できないので、相手先次第ではある)。terail の過去質問でも、クッキーとか、XSS 対策のシークレットとかを抜いて、ログイン用途で使おうとしている例がみつかるはず。

https://api.ce-cotoha.com/contents/api-all.html 開発者向けの無料アカウントが取得できそう
https://www.qhapaq.org/imakita/
https://cl.asahi.com/api_data/headlinegeneration.html 新聞記事向け?
https://api.rakuten.net/MeaningCloud/api/summarization/details
https://cloud.google.com/natural-language/?hl=ja
https://prtimes.jp/main/html/rd/p/000000006.000022937.html コンタクトセンター向け?

投稿

編集

papinianus

score 10098

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • papinianus

    papinianus

    2020/01/24 23:54

    いつも思うんですが、質問修正依頼やコメントに +1 できないのはサービスとして改善してほしいです。

  • simply

    simply

    2020/01/24 23:56

    ユーザーローカルは知ってますが、たしかAPIがなかったような。

  • papinianus

    papinianus

    2020/01/25 01:57

    > simply 2020/01/22 19:03 編集
    > 要約とは、「論旨・要点を短くまとめて表すこと」です。
    > より良い文章要約方法があれば教えてください。

    API でなければならないという新たな要件が出ました。質問を改訂してください。

    > (ココしか知らない)

    質問テンプレにあるはずですが、やったこと、しらべたこと、それがなぜ上手くいっていないかをかきましょう。API でなければならない、は重要な要件ですし、それで却下したものとしてこれこれがある、は回答の方向を左右する重要な情報です。情報を出し渋って既知の情報が回答として出されることで、誰も得をしません。

+1

ぶつ切り状態の文を個別で要約しているので、全体から見たら良い要約になっていないと思います。
分割した文章間の前後関係無視した状態での要約ではないでしょうか?

以下、ライセンス的に問題無いか確認後してください。
一文ごとに要約し(余計な修飾語などを削る)、それ等をマージして再度要約(文章全体を要約)なら行けるかもしれないです。

投稿

oikashinoa

score 1897

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • simply

    simply

    2020/01/24 21:30

    10の文章を、5や3に間引くことはできても、1つの文章を要約して短くする機能はありません。

  • oikashinoa

    oikashinoa

    2020/01/24 23:34 編集

    '余計な修飾語などを削る’のをA3RTでやるなんて言ってませんが。
    まぁA3RTは抽出型要約をしているのが分かったんで、'余計な修飾語などを削る’のは無意味でした。

    ---以下私の覚え書きです。
    A3RT Text Summarization APIの論文を見つけました。
    [リクルート式 自然言語処理技術の適応事例紹介]https://www.slideshare.net/recruitcojp/ss-56150629

    抽象型要約のイメージしか無かったんですが、抽出型要約ってのがあるんですね。勉強になりました。
    [大自然言語時代のための、文章要約 - Qiita]https://qiita.com/icoxfog417/items/d06651db10e27220c819

+1

より良い方法があれば教えてください。

「別に、それで要約できてるならいいのでは?」
としか答えられません。

詳しくは、要件や目的を明確に質問に書いてからです。

投稿

asuchi0819

score 5252

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.71%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる