特許分類の定義情報をAPIで取得
1.はじめに
・特許分類(コード)の定義を参照する際には、いつもJ-platpatの特許分類情報からコードを指定して対応する定義を見ている。
が、すごく面倒くさい時がある。(沢山のコードの定義を参照しなければいけない時など)。
コードを指定すると、さっと特許分類の定義を返してくれるAPIがあると嬉しいので、作ってみた。↓
・ 例:5K030GA02の上位階層含めた定義がほしい場合:
https://us-central1-friendly-be550.cloudfunctions.net/get_fterm_def?ft=5K030GA02&is_tree=y
2.構成
こんな感じ↓
Client<-->CloudFunctions<--->BigQuery
ClientはAPIの引数にコード情報を入れればいい。
引数は3つ
引数 | 説明 | デフォルト | 例 |
---|---|---|---|
ft | Fターム | '5K030GA02 | |
is_tree | 最上位の定義から取得するか | y | y or n |
version | Fタームのバージョン | 2021002 | ←202102の間違え |
(※)なお特許分類は階層構造(住所みたいな感じ)で定義されているので、ピンポイントで定義情報をとっても意味不明なことがある(ex:「断熱性」という文字が帰ってきてもよくわからない)。そのため、定義そのものに加えて、階層の最上位の定義から定義を取得できるようにした。
ex:5K030GA02を取得したいとして
https://us-central1-friendly-be550.cloudfunctions.net/get_fterm_def?ft=5K030GA02&is_tree=y
戻り値(階層あり定義)はこんな感じに。
目的効果(観点00はフリーワード付与)⇒高速化⇒伝送遅延時間の短縮
https://us-central1-friendly-be550.cloudfunctions.net/get_fterm_def?ft=5K030GA02&is_tree=n
だと、戻り値(階層なし定義)はこんな感じに。
伝送遅延時間の短縮
最初にもくろんでいた感じにできた。
スプレッドシート関数で、=IMPORTDATA([url])を使えば、ほしいコードを指定すると、対応する定義が表示できた!
以下、各作成段階の説明
2.1 特許分類の定義ファイル取得
特許庁のバルクデータに申し込んで取得した特許分類の定義情報から、Fタームの定義ファイルを取得して、下記のような感じのcsvファイルを作成。
def_treeは、特許分類が階層構造を持っていることを考慮して、最上位の階層からの定義を取得できるようにしている。
一番細かい階層だと40万行ほどあった。
2.2 Bigqueryに投入
そんなに複雑な構造でないので、csvファイルをGCSにアップロードしてからUI経由で投入。↓投入後
2.3Cloudfunctions作成
python3.8で作成。
#main.py
from flask import jsonify
from google.cloud import bigquery
import google.auth
#import os
#os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "./cred.json"
def get_fterm_def(request):
request_args = request.args
if request_args and 'ft' in request_args:
ft = request_args['ft']
else:
ft = '5K030GA02'
if request_args and 'is_tree' in request_args:
is_tree = request_args['is_tree']
else:
is_tree = 'y'
if request_args and 'version' in request_args:
version = request_args['version']
else:
version = '2021002'
if is_tree == 'y':
QUERY = (
' SELECT tree_def '
' FROM `[project-id.dataset].fterm` '
' WHERE ipc = "' + ft + '"'
' AND CAST(version AS STRING) = "' + version + '"'
)
col = "tree_def";
else:
QUERY = (
' SELECT def '
' FROM `[project-id.dataset].fterm` '
' WHERE ipc = "' + ft + '"'
' AND CAST(version AS STRING) = "' + version + '"'
)
col = "def"
bq_client = bigquery.Client.from_service_account_json('./cred.json')
query_job = bq_client.query(QUERY)
defdf = query_job.result().to_dataframe()
deftext = "".join(defdf[col].tolist())
return deftext
#requirements.txt
google-cloud-bigquery==2.13.1
pandas==1.2.3
pandas-gbq==0.14.1
pyarrow==3.0.0
XlsxWriter==1.3.7
ちょっと迷ったのがBigqueryをCloudFunctionsから呼び出すところ。
GCP > APIs & Services > Credentials でサービスアカウントキーを作成する&権限周りで少し躓く。
↓
サービスアカウントキーをCloud Functionsのアップロード先にアップロード。
※cred.jsonというやつ。
なお、サービスアカウントキーを作る画面で、セキュリティリスクがあるので、Workload Identity Federationを使えと
言ってくれている。Workload Identity Federationがまだよくわからないので、今後の課題。
Service account keys could pose a security risk if compromised. We recommend you avoid downloading service account keys and instead use the Workload Identity Federation . You can learn more about the best way to authenticate service accounts on Google Cloud here .
3.今後
- バージョンがちょこちょこ変わる(一部のコードの改廃や追加など)に対応してデータ追加
- BigQueryへのデータ追加の自動化
- BigQueryの列名などがおかしいので要修正
- CPC,FI,IPCも同様にAPI化
など。。
Author And Source
この問題について(特許分類の定義情報をAPIで取得), 我々は、より多くの情報をここで見つけました https://qiita.com/niship2/items/f8098b0be93f47f54c97著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .