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

# 概要　
　特許情報取得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つの関数を使って要約する部分
```py
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)
```

# 出力

## 拒絶理由全体
```
Ａ．この出願の下記の請求項に係る発明は、その出願前に日本国内又は外国において、頒布された下記の刊行物に記載された発明又は電気通信回線を通じて公衆に利用可能となった発明に基いて、その出願前にその発明の属する技術の分野における通常の知識を有する者が容易に発明をすることができたものであるから、特許法第２９条第２項の規定により特許を受けることができない。
　記
　（引用文献等については引用文献等一覧参照）［請求項１－１８について］　下記引用文献１によれば、名詞句を形成する複数の名詞に対して、連結表記テーブルに基づいて二つの名詞の間に「の」（本願発明でいう「連結機能語」）を挿入するか否かを決定する構成が開示されている。　この開示における連結表記テーブルでは、漢語，カタカナ語，和語などの名詞の種類別に、「の」を挿入することの適否をテーブル化しているが、漢語，カタカナ語，和語などは、それに属する単語を表すものであるから、該連結表記テーブルは、本願発明でいうところの「２単語の間に所定の連結機能語を挿入することの適否に関する情報」を保持しているといえる。また、本願実施例にあるように、「野球」、「試合」などの具体的な単語単位に「２単語の間に所定の連結機能語を挿入することの適否に関する情報」を保持するものについても、用例データベースに基づく翻訳が、下記引用文献２－４に見られるように本願出願前周知であることからみて、引用文献１の開示において、連結表記テーブルの代わりに用例データベースを用いて、具体的な単語単位の用例情報を保持することにより、当業者が容易に想到しえたものと認められる。
　また、請求項５，８，１３，１８に関し、入力テキストから用例を抽出して自動登録することは、例えば下記引用文献２に開示されている。
　よって、各請求項に係る発明は、上記引用文献１および引用文献２－４に見られる周知技術に基づいて、当業者が容易に想到しえたものと認められる。
Ｂ．この出願は、特許請求の範囲の記載が下記の点で、特許法第３６条第６項第２号に規定する要件を満たしていない。
　記［請求項１，２，９，１０，１４，１５について］（１）請求項において、「前記２単語の間に所定の連結機能語を含む用例である正用例の情報に基づいて判定された、前記２単語の間に前記所定の連結機能語を挿入することの適否に関する情報」との記載があるが、実際に用例データベースに格納される、本願【図５】に見られるような情報を見ても、それが。「２単語の間に所定の連結機能語を含む用例である正用例の情報に基づいて判定された」ものであるのか否かがどのように識別できるのか不明である。したがって、「前記２単語の間に所定の連結機能語を含む用例である正用例の情報に基づいて判定された」との限定にいかなる技術的意味があるのか不明である。
［請求項４，１２，１７について］（２）「前記所定の連結機能語を含まない用例である負用例の情報とに基づいて適否を判定した情報である」という限定についても、上記（１）と同様にいかなる技術的意味があるのか不明である。
［請求項５，１３，１８について］（３）「入力された目的言語の文章データを基に、前記用例データベースに記録する用例データを自動的に編集し登録する」との記載は、機能的、あるいは概念的であり、そのような機能を実現する具体的構成が明確でない。
［請求項８について］（４）「前記正用例抽出手段によって抽出された正用例の情報に基づいて判定された、前記２単語の間に所定の連結機能語を挿入することの適否に関する情報」との記載があるが、正用例抽出手段によって抽出された正用例の情報に基づく判定を、いずれの構成が行うのか明確でない。
　よって、請求項１，２，４，５，９，１０，１２－１５，１７，１８（および、これらを引用する全ての請求項）に係る発明は明確でない。
　引　用　文　献　等　一　覧１.特開昭６２－２６７８７１号公報２.特開平０９－３３０３２０号公報３.特開平０３－２７６３６７号公報４.特開平０９－３０５６０９号公報－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
　先行技術文献調査結果の記録
・調査した分野
Ｇ０６Ｆ１７／２７－１７／２８　
　この先行技術文献調査結果の記録は拒絶理由を構成するものではありません。
```

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

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