Google ColabでPatentfieldAPIを使用した引用・被引用検索
こんにちは、Patentfieldの公式noteです。
Patentfield公式noteでは、PatentfieldAPIを活用した具体的な開発実装事例を紹介しています。
この記事では、PatentfieldのAPIを使って引用・被引用検索を実施する方法について、解説します。
1.引用・被引用検索とは
特許データを活用したIPランドスケープを実施する際に引用・被引用文献を活用する手法は非常に有益です。先日、特許庁から発行されました「経営戦略に資するIPランドスケープ実践ガイドブック」にも、様々な目的に応じた引用・被引用文献を活用する分析手法が紹介されています。(https://www.jpo.go.jp/support/example/ip-landscape-guide/)
特許分析において引用・被引用文献を取得する事は、個々の特許については様々なデータベースで容易に取得する事ができます。しかし、ある分析対象の母集団に対してまとめて一括に引用・被引用文献を取得する事は容易ではありません。また、引用・被引用世代数をパラメータとした引用・被引用文献の抽出をする事も容易ではありません。
しかしながら、PatentfieldのAPIでは、分析対象母集団の、引用・被引用文献検索を、引用・被引用世代数をパラメータとして設定する事ができますので、新規用途探索や、自社特許活用先の探索等で、類似技術を含んだ母集団を作成する事が容易にできます。
2.事前準備
・PatentfieldのAPIトークン(APIトークンがなくても、実行環境の構築までは可能です)
※PatentfieldのAPIサービスは有料オプションですが、無料トライアルも随時受付しています。ご興味あれば、APIトークンを発行しますので、下記URLからぜひお問合せください。
https://patentfield.com/apply#/
3.プログラミング言語、開発環境
・プログラム言語:Python
・開発環境:Google Colab
Google Colab(名称:Google Colaboratory)は、ブラウザベースの無料の開発環境で、Googleアカウントがあればインストール不要で、Pythonプログラミングを簡単に始めることができます。
4.作成したもの
今回作成したものを実行すると、以下のような出力が得られます。
引用・被引用文献を取得したい公報番号を入力し、被引用文献検索世代、引用文献検索世代を設定し実行すれば、設定した世代数に応じた引用・被引用文献が追加された母集団を得ることができるアプリケーションです。
入力する公報番号に自社特許リストや、分析対象の母集団を設定する事で、簡単に引用・被引用文献をリストで取得する事ができます。また、検索世代数をパラメータとして設定できますので、新規用途探索や、自社特許活用先の探索において、いわゆる”分析の飛び地”の距離設定を自由にコントロールすることができます。
Google Colab環境でPythonを使用して、PatentfieldのAPIにアクセスし、Gradioを使ってWebアプリ化しています。
Gradioは、機械学習モデルのデモを行うWebアプリケーションを簡単に作ることができるPythonのライブラリです。
5.実装
Google Calabでの実行手順は、次の通りです。
(1)ライブラリのインストール
# ライブラリインストール
!pip install requests
!pip install gradio
(2)ライブラリインポート
# ライブラリインポート
import os
import requests
import gradio as gr
import pandas as pd
from datetime import datetime, timedelta, timezone
from pydantic import BaseModel, Field
from typing import Optional, List
(3)Googleドライブマウント
APIから取得したデータをCSVファイルとして取得するために、Googleドライブをマウントします。
# Googleドライブマウント
from google.colab import drive
drive.mount('/content/drive')
(4)CSVファイル保存関数
# CSVファイル保存関数
def save_csv_to_drive(df, prefix):
# タイムゾーンの生成
JST = timezone(timedelta(hours=+9), 'JST')
timestamp = datetime.now(JST).strftime("%Y%m%d%H%M%S")
# CSVファイル名を生成(クエリとタイムスタンプを含む)
csv_filename = f"{prefix}_{timestamp}.csv"
# Googleドライブの保存先パスを設定
drive_path = "/content/drive/My Drive/"
full_path = os.path.join(drive_path, csv_filename)
# DataFrameをCSVファイルとして保存
df.to_csv(full_path, index=False, encoding="cp932", errors="ignore")
return full_path
(5)引用被引用検索
# 引用被引用検索
# AcquireCitingCitedDocsクラス定義
class AcquireCitingCitedDocs(BaseModel):
numbers: List[str] = Field(..., example="特許6486898")
id_type: str = Field(default="exam_id_o")
citing_depth: Optional[int] = Field(default=1)
cited_depth: Optional[int] = Field(default=1)
columns: Optional[List[str]] = Field(default=["app_doc_id", "app_id_o", "pub_id", "pub_id_o", "exam_id", "exam_id_o", "app_date", "pub_date", "exam_date", "country", "cross_applicants", "patent_status", "title", "abstract", "ipcs", "fis", "themes", "fterms", "cpcs", "claims"])
# 引用被引用検索関数
def acquire_citingcited_docs(item: AcquireCitingCitedDocs, access_token):
# Patentfield APIエンドポイント
req_url = "https://api.patentfield.com/api/v1/patents/search"
# Patentfield APIリクエストヘッダー
req_headers = {"Authorization": "Token " + access_token, "Content-Type": "application/json"}
# APIリクエストパラメータ
req_params = {
"numbers": [{"n": n, "t": item.id_type} for n in item.numbers],
"conditions": [
{'key': 'citation_merge', 'lop': 'or', 'op': 'in', 'citing_depth': item.citing_depth, 'cited_depth': item.cited_depth, "both": None, "remove_root_key": True}
],
'columns': item.columns,
'limit': 1000
}
# API呼出
response = requests.post(url=req_url, headers=req_headers, json=req_params)
# APIレスポンス処理
if response.status_code == 200:
data = response.json()
records = data.get('records', {})
# Pandas DataFrameに変換
df = pd.DataFrame(records)
return str(response.status_code), df
else:
return str(response.status_code), pd.DataFrame()
(6)Webアプリ(Gradio)の定義
# Gradioからの入力を使ってCitingCitedDocsオブジェクトを構築
def acquire_citingcited_wrapper(numbers, id_type, citing_depth, cited_depth, access_token):
all_records = []
numbers_list = [number.strip() for number in numbers.split("\n") if number.strip()] # 入力された特許番号をリストに変換
item = AcquireCitingCitedDocs(
numbers=numbers_list,
id_type=id_type,
citing_depth=citing_depth,
cited_depth=cited_depth
)
status_code, df = acquire_citingcited_docs(item, access_token)
if not df.empty:
all_records.append(df)
if all_records:
df_final = pd.concat(all_records, ignore_index=True)
prefix = "CitingCitedDocs"
csv_filename = save_csv_to_drive(df_final, prefix)
return status_code, df_final, csv_filename
else:
return "No data", pd.DataFrame(), None
# Webアプリ(Gradio)定義
with gr.Blocks() as app:
gr.Markdown("引用被引用検索")
with gr.Row():
with gr.Column():
numbers = gr.Textbox(label="公報番号",lines=10, placeholder="引用・被引用文献を検索したい公報番号を入力してください (例:特許6123456\n特許6123457 各公報番号は改行区切り)")
id_type = gr.Radio(label="公報番号種別", choices=["app_id", "pub_id", "exam_id"], value="exam_id")
citing_depth = gr.Number(label="被引用文献(Citing:後願)検索世代", value=1, minimum=1, maximum=3)
cited_depth = gr.Number(label="引用文献(Cited:先願)検索世代", value=1, minimum=1, maximum=3)
access_token = gr.Textbox(label="APIアクセストークン", lines=1, placeholder="APIのアクセストークンを入力してください")
submit = gr.Button("APIリクエスト送信",variant="primary")
reset = gr.Button("リセット")
with gr.Column():
status_code_output = gr.Textbox(label="APIステータスコード", lines=1, interactive=False)
response_output = gr.Dataframe()
download_fpath = gr.Text(label="ダウンロードファイルパス")
submit.click(
fn=acquire_citingcited_wrapper,
inputs=[numbers, id_type, citing_depth, cited_depth, access_token],
outputs=[status_code_output, response_output, download_fpath]
)
reset.click(
fn=lambda: ["", pd.DataFrame(), ""],
inputs=[],
outputs=[status_code_output, response_output, download_fpath]
)
(7)Webアプリ(Gradio)を起動
ここでWebアプリ(Gradio)を起動します。
# Webアプリ(Gradio)起動
app.launch(debug=True, height=1000)
Gradioが起動したら、引用・被引用文献を取得したい公報番号リストを貼り付け、被引用文献検索世代、引用文献検索世代を設定し、「APIリクエスト送信」ボタンを押すと、入力公報番号リストの引用・被引用文献がリストで取得する事ができます。
引用・被引用特許リストはGoogleドライブのMy Driveに「CitingCitedDocs_{YYYYMMDDhhmmss}.csv」というファイル名で保存されています。
6.おわりに
Patentfieldとは
Patentfieldは、4つの機能(プロフェッショナル検索・データ可視化・AI類似検索・AI分類予測)を組み合わせて、ワンストップで総合的な検索・分析ができる『AI特許総合検索・分析プラットフォーム』です。
無料で検索もできるので、ご興味あればぜひアクセスください。
PatentfieldのAPIについて
PatentfieldのAPI連携サービスは、情報参照だけではなく、特許検索機能をはじめPatentfieldの各機能をAPI経由で連携することで、社内で運用しているグループウェアへの組み込みや、特許検索・分析の独自アプリケーションの開発が可能になります。
AIセマンティック検索やAI分類予測などのAI機能や、PFスコアや類似キーワードの取得などPatentfieldの多彩な機能を利用して、特許に関わる社内のニーズに合わせて最適なワークフローやアプリケーションを構築できます。
次回以降も、特許検索や分析実務で役立つ開発実装例を紹介していきます。
実践的なケーススタディを通じて、みなさまの知財業務変革のヒントになればと思います。