岡田テクノ特許事務所

EPOのLinked open EP Dataの利用検討 (その1)

最終更新日:2021/03/15


1)はじめに

 Linked open EP Data は、EPO(European Patent Office:欧州特許庁)が提供している無料で利用できるオープンデータサービスです。

(※)下記URLにLinked open EP Dataに関する詳細な説明があり、マニュアル等もダウンロードできます。
    https://www.epo.org/searching-for-patents/data/linked-open-data.html

 Linked open EP Dataには、短時間又は小規模な検索用と制限されていますが、クエリでデータの問い合わせができる公開エンドポイントも用意されています。
 そこで、その公開エンドポイントから、特許分類CPCの情報取得のために、Linked open EP Dataを利用してみました。


2)Linked open EP Dataについて

 Linked open EP Dataは、EPOで作成されたデータです。

 具体的には、各特許出願の書誌事項、発行物(公報)情報、CPCやIPCの特許分類コードの情報等が蓄積されています。

 Linked open EP Dataは、RDF(Resource Description Framework)等を用いた、いわゆる標準化データモデルであるLinked Dataの一種であると考えらえます。

 このため、Linked open EP Dataに対して、ユーザは、ちょうどURLのようにURIを指定して、直接にデータにアクセスしたり、SPARQL(スパークル:SPARQL Protocol and RDF Query Language)等でクエリを作成して、その問い合わせにより所望の情報を取得することができます。


3)Linked Dataについて

 Linked Dataの特徴として、情報データにはすべてURI(Uniform Resource Identifier)が付けられていて、各データはURIにより識別されます。
 ※EPOのLinked open EP Data User Guideも、URIとして説明されています。

 また、Linkedの名の通り、各データは他のデータに関するURIのリンクを含んでいます。このため、ちょうどネットサーフィンでウェブページをたどって関連情報を閲覧していくように、関連情報を取得することができます。

 Linked Dataの各データの最小単位は、主語、述語、目的語の3つのリソースの組み合わせであるトリプルから成り立っています。

 例えば、下記の例では、主語「特許分類CPCのB25B5/16は」、述語「…をタイトルとして有する」、目的語「Machines or devices …」ということを表しています。

トリプル

 主語と述語はURI、目的語はURI又は上記のような文字や数値となります。

 Linked open EP Dataは、膨大な数のこのようなトリプルの集合体と考えることができます。

 尚、CPCは階層化された情報なので、このトリプルを用いて、個々の分類はその上位、下位の分類とリンクされています。下記はその例です。

トリプル2


4)SPARQLについて

 SPARQLは、RDFのデータモデルに対して、クエリ(問い合わせ)を用いて所望のデータを抽出するためのクエリ言語です。

 EPOは、ユーザが直接、SPARQLクエリを入力して情報を抽出できる入力フォームを用意しているので、Linked open EP Dataでは、SPARQLを手軽に使うことができます。

 具体的には、上記で紹介したLinked open EP dataのページの上部のタブで「SPARQL Query」を選択すると、SPARQL queryフォームが開きます。

 そのフォームにコードを入力して、「Perform」ボタンを押すことで実行します。

SPARQL入力フォーム

 実行結果はこのフォーム窓の下に表示されます。

 SPARQLの文法その他についてはネット等に詳しいので省略しますが、以下の例では、このSPARQLによりLinked open EP Dataにアクセスして、CPC情報を抽出しています。


5) CPCについて

 CPC(Cooperative Patent Classification)は、IPC(International Patent Classification;国際特許分類)を拡張した特許分類で、EPOとUSPTO(US Patent and Trademark Office;米国特許商標庁)により共同で管理されているものです。

 この分類はA~H及びYの7つのセクションに分けられ、さらに、サブセクション、クラス、サブクラス、グループ、及びサブグループに階層的に分類されます。

 下表のように全体で約26万個の分類があります。

CPC分類数

 ※分類数は、2021/03時点のLinked open EP Dataより取得


6) CPCオントロジーについて

 Linked open EP Data は、上記CPCのlinked dataを記述するために、CPCオントロジーとして、CPC用の特別のクラス(CPC分類のクラスではなく、RDFのリソースとしてのクラス)とプロパティを定義しています。

 その概要は、EPOのページ:CPC Ontology Overviewに記載されています。
  (https://data.epo.org/linked-data/documentation/cpc-ontology-overview.html)

 CPC用クラスで代表的なクラスはcpc:Classificationです。
 このcpc:Classificationがさらに6つのサブクラス
  cpc:Section、cpc:SubSection、cpc:Class、cpc:SubClass、cpc:MainGroup、cpc:SubGroup
を有しています。
 抽象クラスであるcpc:Classificationを継承した6つのクラスが、それぞれ独自にプロパティを定義するイメージでしょうか。

 各サブクラスには、概ね以下のようなプロパティを有しています。
 概ね、というのは、例えばcpc:Sectionはskos:broaderがない等、若干の差異はあります。


cpc:Classificationのサブクラスの主要プロパティ一覧

プロパティメモ
cpc:concordantIPC対応するipc分類
cpc:fullTitle説明
cpc:level階層レベル
cpc:sortKeyソートkey(分類表の順)
cpc:symbol分類シンボル
cpc:titleXMLXML形式の説明
dcterms:modified変更時期
dcterms:title説明(fullTitleと同じ?)
rdf:typeデータタイプ
rdfs:label分類ラベル(表示用に好適)
skos:broader上の階層
skos:narrower下の階層

※プロパティの詳細はEPOのページ:CPC Ontology Referenceに記載されています。
  (https://data.epo.org/linked-data/documentation/patent-ontology-reference.html)


7) クエリ実行例その1:特定CPCの上位分類を調べる

 以下、2)のLinked open EP Dataに対して、6)のプロパティを参照しながら、4)のSPARQLのクエリを作成及び実行して、5)のCPC特許分類の所望の情報を取得しました。

 まず最初は、特定のCPC (この例ではA61M5/145)の上位分類を取得します。
 すでに説明したように、CPCは階層的な分類なので、その上位を一緒に見ることで、そのCPCの意味や位置付けを確認できます。

 ・コード例


#prefix文は省略(EPO SPAQL query参照)

#表示変数選択
SELECT ?CPClabel ?Description

WHERE
{
#rdf:type 変数?CPCは?CPCsubclassのインスタンス
?CPC a ?CPCsymbol.
#?そのCPCsubclassは、cpc:Classificationクラスのサブクラス
?CPCsymbol rdfs:subClassOf cpc:Classification.

#?CPCのラベルは・・・である
?CPC rdfs:label "A61M 5/145".
#?CPCの再帰的に繰り返す上位分類は?broaderCPCである(複数)
?CPC skos:broader* ?broaderCPC.

#?broaderCPCの各プロパティは・・・である
?broaderCPC rdfs:label ?CPClabel;
            cpc:sortKey ?Sortkey;
            cpc:fullTitle ?Description.
}
#結果を分類表示用にソート
ORDER BY ASC(?Sortkey)
#取得件数制限
LIMIT 20

 変数?CPCはcpc:Classificationのサブクラスのインスタンスとして定義し、そのプロパティのラベルに「A61M 5/145」を指定します。
 skos:broader*というプロパティで?CPCの上位CPCを再帰的に?broaderCPCとして取得します。  ?broaderCPCのプロパティとして、rdfs:label(分類名)、cpc:sortKey(ソートするためのキー情報)、cpc:fullTitle(分類説明)を取得していきます。
 取得したデータはsortKeyでソートします。

 このコードをSPARQL Queryフォームのprefix文の下に代入して、実行しました。
 以下が、実行結果です。

CPC上位分類表示

 最上位からA61M 5/145まで、8レベルの階層化構造のデータであることがわかります。


8) クエリ実行例その2:特定CPCの下位分類を調べる

 特定のCPC (この例ではA61M 5/145)の下位分類を取得します。
 特定分類がさらにどのように下位に細分化されているかを確認することができます。

 ・コード例


#下位分類取得
SELECT ?CPClabel ?Level ?Description ?ConcordantIPC
WHERE{
?CPC a ?CPCsymbol.
?CPCsymbol rdfs:subClassOf cpc:Classification.
?CPC rdfs:label "A61M 5/145".
?CPC skos:narrower* ?narrowerCPC.
?narrowerCPC rdfs:label ?CPClabel;
             cpc:level ?Level;
             cpc:sortKey ?Sortkey;
             cpc:fullTitle ?Description;
             cpc:concordantIPC ?IPC.
?IPC rdfs:label ?ConcordantIPC.}
ORDER BY ASC(?Sortkey)
LIMIT 30

 skos:narrower*というプロパティで?CPCの下位CPCを再帰的に?narrowerCPCとして取得します。

 尚、階層レベルがわかるように階層化レベルを追加し、IPCと比較できるように対応IPC変を追加しています。

 また、下位分類を調べる際のソートは、?Sortkeyを使うのがベストと思われます。
 実は、7)のように上位分類を調べる時にはEPOの例のように?broaderCPCでソートしても、問題ありません。
 しかし、下位分類を調べる際のソートは、分類の中に付加分類(2000番台)が含まれる場合もあるので?broaderCPCのソートでは具合が悪いためです。

・実行結果

CPC下位分類表示

実行結果は20個のリストとなりましたが、初めの10個を示しています。


9) クエリ実行例その3:特定CPCの下位分類の数を調べる

 特定CPC(この例ではA61M 5/145)の下位分類の数を調べます。

・コード例


SELECT (COUNT (?narrowerCPC) AS ?num) 
WHERE
{
?CPC a ?CPCsymbol.
?CPCsymbol rdfs:subClassOf cpc:Classification.
?CPC rdfs:label "A61M 5/145".
?CPC skos:narrower* ?narrowerCPC.
}

・実行結果

CPC下位分類数

 8)でも求めた変数 ?narrowerCPCの数を数えるものです。
 もちろん結果は、8)の結果と同じく20個となりました。

 尚、この分類のところを変更することでセクション全体の個数を計数できます。
 ただし、比較的負荷の高いクエリになるかと思いますので、繰り返しの実行やgroupによる集約化は避けた方が良いかもしれません。


10)rによるSPARQL実行

 EPOが公開している公開SPARQLエンドポイントに、r言語プログラムからクエリを投げて、問い合わせを実行してみました。

 rでは、SPARQL検索を行うためのパッケージ「SPARQL」が公開されているので、これをインストールした後、実行するだけです。

・コード例(抜粋)

rによるSPARQL実行例

実行結果

rによるSPARQL実行例

8)と同一のクエリなので、同じ結果となりました。

7) まとめ

・EPO のLinked open EP Dataを利用することで、特許分類CPCの情報を取得できます。

・カスタマイズしたSPARQLクエリを発行することで、所望のデータ群をまとめて入手できる点は非常に便利です。

・EPOのSPARQL queryフォームを使えば、フォーム上でSPARQLコード作成、実行、表示(表作成)まで手軽に試すことができます。

・さらにrでもSPARQLクエリを投げて結果を得られるので、SPARQL queryフォームを使用することなく、データを取得することも容易にできます。

・ただし、EPOの使用条件のFair use policyにも記載があるとおり、SPARQL queryフォームでの実行やエンドポイントへのクエリ実行は、小規模でのデータ検索や検索アイデアを実行するためのものです。
 例えば、既知のURIより特許出願データを検索したり、使用可能なデータ(クラスやプロパティ)を確認したり、単純なSPARQLクエリを試したりすることに制限すべきかと思います。
 実際、実行時のタイムアウトも設定されているようです。

・Linked open EP Dataのバルクデータは、別途、EPOからダウンロードできます。
 このため、本格的にLinked Dataデータベースとして利用したい場合は、ローカルにデータベース(RDFストア)を作成すればよいかと思われます。
 ただ、CPC分類データならともかく(30M程度)、特許出願データは膨大な量であり、しかも毎年増えていくので、自前に作るのは結構なコストや労力がかかり、実際にはなかなか難しいかもしれません。

・個人的には、自由にデータを利用できるオープンデータの仕組みの一端を知ることができた点では大変勉強になりました。


特許情報プローブへ戻る