top of page
執筆者の写真NISHIO KEI

特許分類の定義情報を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つ

引数説明デフォルト例ftFターム'5K030GA02is_tree最上位の定義から取得するかyy or nversionFタームのバージョン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 jsonifyfrom google.cloud 
import bigqueryimport 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
 google-cloud-bigquery==2.13.1pandas==1.2.3pandas-gbq==0.14.1pyarrow==3.0.0XlsxWriter==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化 など。。

閲覧数:200回0件のコメント

最新記事

すべて表示

Comentarios


bottom of page