欧州特許庁が提供する研究用特許データベース「PATSTAT」は非常に有益なデータ源だが、日本語での解説は乏しいことが欠点です。ここでは、私の備忘も兼ねて、いくつか基本的なコード集を共有します。なお、MySQL ver.8.0での実装を想定しています。スマートなやり方ではない箇所がありますが、これは私の技能の問題です。
前提
patstatをMySQLのschemaに格納できていることが前提です。格納には私は以下のサイトのコードをつかいました。
http://rawpatentdata.blogspot.com/2019/11/patstat-2019b-mysql-upload-scripts.html
なお、以下の例ではschema名は"patstat"としています。
出願人名からの検索
発明者名・出願人名はt206というテーブルに収録されています。PATSTATでは何種類かの名寄せが行われていますが、ここではPATSTATの名寄せデータ(PSN_NAME)を使うことにしましょう。手順は以下のとおりです。
ステップ1:出願人名のIDを取り出します
- まず対象企業のものと思われる名称を検索します。
- 一覧をダウンロードし、目視で対象となる企業のID(PERSON_ID)を特定します。ついでに住所(PERSON_ADDRESS, PERSON_CTRY_CODE)もとっておきましょう。
- 注意:MySQLのデータフォルダに"out_applicant_id.csv"というファイルが存在しているとエラーになります。削除しておいてください。
コード(例ではNokiaまたはEricssonを検索)
use patstat;
SELECT person_id, psn_name, person_address, person_ctry_code from tls206_person as t206
where (t206.psn_name like 'Nokia%') or (t206.psn_name like 'Ericsson%')
into outfile "out_applicant_id.csv";
ステップ2:抽出対象の出願人IDを新しいテーブルに格納します
- "out_applicant_id.csv"というファイルが出力されましたので、Excel等で開き、2列目(psn_name)と3列目(person_address)を見て対象となる出願人の person_idを"in_applicant_id.txt"というタブ区切りテキストファイルに保存しましょう。
-
- 会社名等にカンマがはいることもあるため、csvファイルはおすすめしません。
- このとき、同じ出願人についても複数のperson_idがある場合があると思います。このような時の場合のため、「company_group」という列を作り、ここに出願人のグループ名を入力しておきましょう。
person_id | company_group |
---|---|
1037159 | Nokia |
1228600 | Nokia |
- その上で、この"in_applicant_id.txt"を「in_appln_names」というテーブルに仮格納し、そこからこのテーブルと、欲しい情報のテーブルをマージ(結合)させます。
コード
use patstat;
drop table in_appln_names;
create table in_appln_names
person_id int not null primary key,
company_group varchar(255));
load data infile "in_applicant_id.txt" into table in_appln_names
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
ステップ3:出願人情報から出願番号、公開番号、登録番号、INPADOC Family IDを取り出します。
- 出願人のperson_idを検索条件にして出願番号、公開番号、登録番号、INPADOC Family ID等を取り出します。
- 出願庁、出願年を検索条件にしています。
コード
select
tls201_appln.appln_id, tls201_appln.appln_auth, tls201_appln.appln_nr,
tls201_appln.appln_filing_date, tls201_appln.earliest_filing_date,
tls201_appln.inpadoc_family_id,
tls211_pat_publn.pat_publn_id, tls211_pat_publn.publn_nr,
tls227_pers_publn.person_id, tls206_person.psn_name, in_appln_names.comp_group
from in_appln_names
inner join tls227_pers_publn on in_appln_names.person_id = tls227_pers_publn.person_id
inner join tls211_pat_publn on tls227_pers_publn.pat_publn_id = tls211_pat_publn.pat_publn_id
inner join tls201_appln on tls211_pat_publn.appln_id = tls201_appln.appln_id
inner join tls206_person on in_appln_names.person_id = tls206_person.person_id
AND (tls201_appln.appln_auth = "EP" OR tls201_appln.appln_auth = "US")
AND ((tls201_appln.earliest_filing_year > 1985 AND tls201_appln.earliest_filing_year < 2016)
OR (tls201_appln.appln_filing_year > 1985 AND tls201_appln.appln_filing_year < 2016))
into outfile "out_patentlist.txt";