LoginSignup
3
1

More than 1 year has passed since last update.

特許情報取得APIで取得した拒絶理由をもとにChatGPTからアドバイスをもらう例(easy_patents応用例5)

Last updated at Posted at 2023-04-21

概要 

 特許情報取得APIで取得した拒絶理由をもとにChatGPTのAPIからアドバイスをもらう例を取り上げる。

サンプルコード

特に対話的にやり取りをすることを想定していないため、openaiの返答のところを関数としてまとめた。

sample_openai.py
import os
import openai


openai.api_key = "***" #openaiのAPIキーを記載


def get_answer(content, role="user", model="gpt-3.5-turbo"):
    messages = [
            {'role':role, 'content':content}
    ]
    return openai.ChatCompletion.create(
        model=model,
        messages=messages
    ).choices[0]["message"]["content"].strip()


if __name__ == "__main__":
    pass

特許情報取得APIで拒絶理由を取得する関数

sample_report.py
import os
import xml.etree.ElementTree as ET
from sample_translate import get_translation
from easy_patents.get_info import app_doc_cont_refusal_reason_decision
from easy_patents.get_info import app_progress


def get_latest_refusal_reason(app_number):
    # 特許庁APIを通じて、経過情報と拒絶理由通知書ファイルをダウンロード
    progress_info = app_progress(app_number)
    target_dir_path = app_doc_cont_refusal_reason_decision(app_number)

    # 経過情報から、拒絶理由通知書にかかる情報を抽出
    biblio_info = progress_info['result']['data']['bibliographyInformation']
    doc_info_list = [doc_info for biblio in biblio_info for doc_info in biblio["documentList"]]
    kyozetsu_doc_info_list = [doc_info for doc_info in doc_info_list if doc_info['documentDescription'] == "拒絶理由通知書"]

    # legalDateでソートして、最新の拒絶理由通知書のdocumentNumberを取得
    kyozetsu_doc_info_list.sort(key=lambda x:x['legalDate'])
    latest_kyozetsu = kyozetsu_doc_info_list[-1]
    latest_kyozetsu_docnumber = latest_kyozetsu["documentNumber"]

    # documentNumberをもとに、対象の拒絶理由通知書のxmlデータを読み込む。
    target_file_name = "%s-jpntce.xml" % latest_kyozetsu_docnumber
    target_file_path = os.path.join(target_dir_path, target_file_name)
    with open(target_file_path, "r", encoding="shift_jis") as f:
        target_xml_data = f.read()
    root = ET.fromstring(target_xml_data)

    # 読み込んだ拒絶理由通知書のデータから理由が書かれている部分を抽出
    ns = {'jp': 'http://www.jpo.go.jp'}
    sub1 = root.find('jp:notice-of-rejection-a131', ns)
    reason_part = sub1.find('jp:drafting-body', ns)
    reason_text = ''.join([text for part in reason_part for text in part.itertext()])
    reason_text = reason_text.replace("\n\n", " ")
    reason_text = reason_text.replace("\n", "")
    reason_text = reason_text.replace("  ", "\n")
    reason_text = reason_text.replace(" ", "\n")
    while "\n\n" in reason_text:
        reason_text = reason_text.replace("\n\n", "\n")

    return reason_text

これらの2つの関数を使って要約する部分

from sample_openai import get_answer
from sample_report import get_latest_refusal_reason

latest_refusal_reason = get_latest_refusal_reason("2007-035937")
response = get_answer("次の文は特許の審査における拒絶理由です。この拒絶理由を解消するためにどんなことをすればよいですか。"+latest_refusal_reason)

# 拒絶理由全体
print(latest_refusal_reason)

# ChatGPTの返答
print(response)

出力

拒絶理由全体

A.この出願の下記の請求項に係る発明は、その出願前に日本国内又は外国において、頒布された下記の刊行物に記載された発明又は電気通信回線を通じて公衆に利用可能となった発明に基いて、その出願前にその発明の属する技術の分野における通常の知識を有する者が容易に発明をすることができたものであるから、特許法第29条第2項の規定により特許を受けることができない。
 記
 (引用文献等については引用文献等一覧参照)[請求項1-18について] 下記引用文献1によれば、名詞句を形成する複数の名詞に対して、連結表記テーブルに基づいて二つの名詞の間に「の」(本願発明でいう「連結機能語」)を挿入するか否かを決定する構成が開示されている。 この開示における連結表記テーブルでは、漢語,カタカナ語,和語などの名詞の種類別に、「の」を挿入することの適否をテーブル化しているが、漢語,カタカナ語,和語などは、それに属する単語を表すものであるから、該連結表記テーブルは、本願発明でいうところの「2単語の間に所定の連結機能語を挿入することの適否に関する情報」を保持しているといえる。また、本願実施例にあるように、「野球」、「試合」などの具体的な単語単位に「2単語の間に所定の連結機能語を挿入することの適否に関する情報」を保持するものについても、用例データベースに基づく翻訳が、下記引用文献2-4に見られるように本願出願前周知であることからみて、引用文献1の開示において、連結表記テーブルの代わりに用例データベースを用いて、具体的な単語単位の用例情報を保持することにより、当業者が容易に想到しえたものと認められる。
 また、請求項5,8,13,18に関し、入力テキストから用例を抽出して自動登録することは、例えば下記引用文献2に開示されている。
 よって、各請求項に係る発明は、上記引用文献1および引用文献2-4に見られる周知技術に基づいて、当業者が容易に想到しえたものと認められる。
B.この出願は、特許請求の範囲の記載が下記の点で、特許法第36条第6項第2号に規定する要件を満たしていない。
 記[請求項1,2,9,10,14,15について](1)請求項において、「前記2単語の間に所定の連結機能語を含む用例である正用例の情報に基づいて判定された、前記2単語の間に前記所定の連結機能語を挿入することの適否に関する情報」との記載があるが、実際に用例データベースに格納される、本願【図5】に見られるような情報を見ても、それが。「2単語の間に所定の連結機能語を含む用例である正用例の情報に基づいて判定された」ものであるのか否かがどのように識別できるのか不明である。したがって、「前記2単語の間に所定の連結機能語を含む用例である正用例の情報に基づいて判定された」との限定にいかなる技術的意味があるのか不明である。
[請求項4,12,17について](2)「前記所定の連結機能語を含まない用例である負用例の情報とに基づいて適否を判定した情報である」という限定についても、上記(1)と同様にいかなる技術的意味があるのか不明である。
[請求項5,13,18について](3)「入力された目的言語の文章データを基に、前記用例データベースに記録する用例データを自動的に編集し登録する」との記載は、機能的、あるいは概念的であり、そのような機能を実現する具体的構成が明確でない。
[請求項8について](4)「前記正用例抽出手段によって抽出された正用例の情報に基づいて判定された、前記2単語の間に所定の連結機能語を挿入することの適否に関する情報」との記載があるが、正用例抽出手段によって抽出された正用例の情報に基づく判定を、いずれの構成が行うのか明確でない。
 よって、請求項1,2,4,5,9,10,12-15,17,18(および、これらを引用する全ての請求項)に係る発明は明確でない。
 引 用 文 献 等 一 覧1.特開昭62-267871号公報2.特開平09-330320号公報3.特開平03-276367号公報4.特開平09-305609号公報------------------------------------
 先行技術文献調査結果の記録
・調査した分野
G06F17/27-17/28 
 この先行技術文献調査結果の記録は拒絶理由を構成するものではありません。

アドバイス

A.出願前に公開された技術情報によって同様の発明が既にあるため、この発明を新規性があるとして特許を受けることはできません。この場合、出願審査においては、既存の技術情報との違いや優位性を示し、新規性や非自明性を有することを証明する必要があります。
B.特許請求の範囲に関して、具体的な要件が明確に記載されていないために拒絶されています。この場合、明確な要件を記載し、特許請求の範囲を修正する必要があります。また、それぞれの記載に技術的意義があることを説明する必要があります。

まだ実用性はなさそうだ。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1