最新論文の日本語要約を毎日メール受信するコードを書いてみた

アカデミック

こんにちは、Kanotです。最近、生成AIが研究にどの程度使えるのかというのを調べていたのですが、その勢いで「最新の論文の日本語要約を毎日メール受信するツール作れないかな?」と思い立ち、Google ScholarとChatGPTを組み合わせるWebツールを作ってみました。Web情報やChatGPTを活用し、ほとんど自分ではコードを書かずに実装できましたので、シェアしたいなと思います。(間違っている箇所があったらぜひ教えてください!)

今回実装したのは以下の機能を連続で行うツールです。実行後はメールを自動送信します。

  1. 特定のキーワードでGoogle Scholarから新しい論文を3件抽出(Serp API利用)(無料)
  2. 取得した新着論文の要約をChat GPTで取得(OpenAI API利用)(有料:月数十円)
  3. 取得結果を1日1回、メールで送信(Google App Script利用)(無料)

以下が動作イメージを図化してみたものです。

ここから、具体的な実装方法を紹介していきます。

Step 1. Google App Scriptを開く

まず、このサービスはGoogle App Script(以下、GASと略します)というGoogleの無料のWebサービスを使って実装しています。

Apps Script  |  Google for Developers
Develop high-quality, cloud-based solutions with ease.

上のリンクからGASを開いていただき、左上の「新しいプロジェクト」をクリックするとコードを入力する画面に飛びますので、Step 2で紹介するコードをコピペして修正していきます。

Step 2. コードをコピペする

GASのコード入力箇所(上画像のグレーの箇所)に以下のコードを貼ります。コードはJavaScriptで書かれています。赤字の部分を修正していただければ、ご利用可能です。修正手順も以下で説明していきます。

// SERP APIとOpenAI APIのキーを設定
const OPENAI_API_KEY = "ここをOpenAIのAPI Keyに書き換える";
const SERP_API_KEY = 'ここをSerp API Keyに書き換える';

// メインの関数
function main() {
  const keyword = 'キーワード指定(複数ある場合は「OR」で繋ぐ)'; // キーワードを指定
  const articles = fetchScholarArticles(keyword);

  let summary = '';

  articles.forEach(article => {
    const articleSummary = summarizeArticle(article.title, article.link);
    summary += `タイトル: ${article.title}\n著者・雑誌: ${article.info}\nリンク: ${article.link}\n要約: ${articleSummary}\n\n`;
  });

  sendEmail(keyword, summary);
}

// 指定されたキーワードでGoogle Scholarから論文を検索
function fetchScholarArticles(keyword) {
  const url = `https://serpapi.com/search?engine=google_scholar&q=${encodeURIComponent(keyword)}&api_key=${SERP_API_KEY}&num=3&scisbd=1`;

  const response = UrlFetchApp.fetch(url);
  const json = JSON.parse(response.getContentText());

  // 論文のタイトルとリンクを取得
  const articles = json['organic_results'].map(article => ({
    title: article.title,
    link: article.link,
    info: article.publication_info.summary
  }));

  return articles;
}

// OpenAI APIを使用して論文を要約
function summarizeArticle(title, link) {
  const messages = [
    {
      role: "system",
      content: "あなたは優秀な情報科学分野の研究論文の要約者です。"
    },
    {
      role: "user",
      content: `次の論文を要約して。要点は箇条書きで。:\nタイトル:${title}\nリンク:${link}`
    }
  ];

  const url = 'https://api.openai.com/v1/chat/completions';
  const options = {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${OPENAI_API_KEY}`,
      'Content-Type': 'application/json'
    },
    payload: JSON.stringify({
      model: 'gpt-3.5-turbo', // gpt-3.5-turboモデルを使用
      messages: messages, // チャット形式のメッセージを渡す
      max_tokens: 500
    }),
    muteHttpExceptions: true // エラー時の詳細なレスポンスを取得
  };

  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());

  // レスポンスを確認し、チャット形式の出力から要約を取得
  return json.choices[0].message.content.trim();
}


// メール送信
function sendEmail(keyword, summary) {
  const recipient = 'あなたのメールアドレス'; // 送信先メールアドレス
  const subject = `${keyword}に関する最新の論文の要約`;
  const body = `以下は指定したキーワード(${keyword})に関する最新の論文の要約です:\n\n${summary}`;
  
  MailApp.sendEmail(recipient, subject, body);
}

Step 3. メールアドレスおよび検索キーワードを修正

Step 2のコードの赤字部分のうち、メールを送りたいメールアドレスと、Google Scholarで検索したいキーワードをお好きなものに修正してください。

Step 4. Serp API Keyの取得

Step 3のキーワードを使ってGoogle Scholarから新着論文を抽出するために、Serp APIというGoogle検索との接続サービス(API)を利用します。

APIを利用するにはAPI Keyというものを取得する必要があります。Serp APIは月100検索まで無料のようなので、1日数回程度の検索でしたら無料アカウントで問題なさそうです。

以下のサイトの「Register」からユーザ登録し、ページ内でAPI Keyを取得してください。

SerpApi: Google Search API
SerpApi is a real-time API to access Google search results. We handle proxies, solve captchas, and parse all rich struct...

取得後はAPI Keyをコードの3行目にコピペしてください。

Step 5. OpenAI API Keyの取得

Google Scholarから取得した論文の日本語要約を作成するのに、ChatGPTを使います。GASの中からChatGPTを呼び出すためには、OpenAIのAPI Keyを取得する必要があります。

API Keyの取得方法は以下ののサイトが詳しいです。API Key取得後は、コードの2行目にコピペしてください。

OpenAIのAPIキー取得方法|2024年7月最新版|料金体系や注意事項 - Qiita
はじめに先日DALL・E APIを使ったシステムを作る機会があったので、APIキーの取得方法についてまとめておきます。用途に関わらず取得方法は同じです。手順この順番である必要はないのですが、…

こちらのAPIは有料になっており、一定金額を先にチャージする形式になっています。情報量に応じてパケット代がかかるようなのですが、今回のコードでは数ドル分チャージしておけば一年くらいは軽く持つのではと考えられます。(私の実績では9月の消費が$0.1くらいでした)

また、支払いクレジットカード登録時に「Auto recharge」の有無のチェックがありますが、これはオフにしておくほうが良いと多います(後から変更もできるようです)。これはチャージがなくなった時に自動チャージする機能ですが、誤ってチャージを大量消費した時に気付けない可能性があるので、(特にAPI利用に慣れていない方は)オンにはしないことをオススメします。

なお、アカウント作成時にトライアルのチャージをもらえるという説もあるのですが、2024年9月時点ではどうもなくなったようで、私がアカウント作った時は無料分はありませんでした。

ちなみにChatGPTには、APIを通じて「あなたは優秀な情報科学分野の研究論文の要約者です。次の論文を要約して。要点は箇条書きで。・・論文1、2、3」といった質問を投げています。ここも分野や目的に応じて適宜修正してください。

Step 6. コードのテスト

GAS画面の「実行」を押して、コードが動くか確認してください。実行時にGoogleから「このAppにメール送信させる権限を付与してよいか?」みたいなメッセージが出るかもしれませんが「Yes」で大丈夫です。

うまく動けば、以下青字のようなメールが届きます。

以下は指定したキーワード(ict development OR digital development OR ICT4D)に関する最新の論文の要約です:

タイトル: Análisis estadístico y pronostico para el servicio de internet móvil de los operadores en Colombia usando machine learning para determinar el número de abonados …
著者・雑誌: LF Castillo Caranton, MÁ Flórez Salazar – repository.udistrital.edu.co
リンク: https://repository.udistrital.edu.co/items/81e19b35-23ad-4237-b773-2f7b6a5896a1
要約: – 論文は、コロンビアにおけるモバイルインターネットサービスのプロバイダーの顧客数を予測するために機械学習を使用した統計的分析に焦点を当てている。
– 研究では、主にARIMAモデルと機械学習アルゴリズム(ランダムフォレスト、サポートベクトルマシンなど)を使用して、過去のデータを基に将来のユーザー数を予測している。
– データはコロンビアの主要なモバイルインターネットサービスプロバイダーから収集され、分析された。
– 結果として、研究は機械学習アルゴリズムの方が伝統的なARIMAモデルよりも予測精度が高いことを示している。
– 実際のデータに基づいて、この予測モデルを使用することで、プロバイダーは将来の需要をより正確に予測し、サービスの最適化や需要対応を行うことができる。

タイトル: High-Level Estimate of the ICT and E&M Sectors’ Material Footprint in 2020
著者・雑誌: T Onaleye, R Manoharan – 2024 – diva-portal.org
リンク: https://www.diva-portal.org/smash/record.jsf?pid=diva2:1897923
要約: – この論文のタイトルは、「2020年のICTおよびE&Mセクターの資材フットプリントの高レベルな見積もり」である。
– 研究では、情報通信技術(ICT)および電子および機械工学(E&M)セクターの資材フットプリントに焦点を当てている。
– 著者たちは、この研究を通じて2020年のICTとE&Mセクターの環境への影響を評価し、持続可能な開発目標に向けた取り組みを促進することを目的としている。
– 資材フットプリントは、製品、インフラストラクチャ、およびサービス全体の製造および供給に必要な物質リソースの合計量を示す指標である。
– 研究結果によると、ICTとE&Mセクターの資材フットプリントは膨大であり、環境に及ぼす影響が顕著であることが示されている。
– これらのセクターは、資材の使用量、エネルギーの消費、および廃棄物の生成など、持続可能性に影響を与える多くの要因によって特徴付けられている。
– 研究の結果は、ICTおよびE&Mセクターにおける資材フットプリントの管理と削減が、環境への負荷軽減や持続可能な開

タイトル: Pendampingan Pembelajaran Fiqih Dengan Memanfaatkan Media ICT Bagi Siswa SDN 1 Sukorejo di Desa Sukorejo Kecamatan Sukorejo Kabupaten Ponorogo
著者・雑誌: EN Tiara, R Witasari – Social Science Academic, 2024 – ejournal.insuriponorogo.ac.id
リンク: https://www.ejournal.insuriponorogo.ac.id/index.php/ssa/article/view/6008
要約: – 研究は、ポノログ地方のスコレジョの小学校で実施された「フィキフ(イスラム法)」の学習をICTメディアを利用して補助するプロジェクトに焦点を当てている。
– 研究は、ICTメディア(情報通信技術)を使用することで、フィキフ学習の質と効率を向上させる方法を調査することを目的としている。
– 研究では、ICTメディアを活用した学習プログラムが導入され、その効果が定量的および定性的な方法で評価された。
– ICTメディアを使用した学習プログラムは、生徒たちにフィキフの理解を促進し、好意的な学習環境を提供したことが示唆された。
– 研究結果は、ICTメディアを活用した教育が学習者の理解を向上させる可能性があることを示しており、伝統的な学習手法との比較も行われている。

うまく3件の論文の要約(箇条書き)が受信できているようです。

Step 7. トリガーの設定(時間起動)

コードが上手く動いたら、あとは時間設定のトリガーを設定するだけです。GASの左メニューの「トリガー」をクリックし、「トリガーを追加」を選択します。

以下は私の設定画面で、毎日朝9時頃に受信するようにしていますが、ご希望の頻度・時間帯に修正してください。

まとめ

これで完成になります。

今回のコードは、Webサイトを参考にしたりChatGPTに作ってもらったものを手直ししたという感じで、コード量はそれなりにありますが、8割以上はAIが書いたものです。便利な世の中になりました。

コツがわかってくると、論文検索以外の他の検索に応用したり、ChatGPTに別の質問を投げてみるツールにしたり、色々と応用できるはずです。皆さんも適宜カスタマイズして自分の仕事や生活の質向上に繋げていただけたらと思います。

また、コードをChatGPTに貼って、「XXXXしたいんだけど、どう修正すれば良い?」「このコードを実行したらXXXというエラーが出たんだけど、なぜ?」とか聞くと修正方法も教えてくれたりしますので、カスタマイズにも生成AIは役に立ちますよ。

うまく生成AIを助手として使っていただけたらと思います。

ニュースレターはじめました。テクノロジーと国際開発(ICT4D)に関する新規ブログ記事・海外ニュース・イベント情報などを月1〜2回発信しています。以下フォームからご参加ください。詳細はこちら

Kanot
フォローする
アカデミック

コメント

タイトルとURLをコピーしました