企業名や出願人の名寄せ
特許の分析をする際に一番悩ましいのが名寄せではないかと思う。
名寄せが必要な理由は
①企業の名称変更、合併、吸収
②単に表記ミス
などがある。
①の解決には商用のツールを使うという手があるのかもしれない(使ったことないので知らないけど)。あるいは企業のHPや会社情報DB見てメモしたりとかやるのかもしれない。だけど分析対象の出願人・企業名が多い場合はかなりキツイと思う。
そんな時利用できるのはNISTEP(科学技術・学術政策研究所)
に公開されている NISTEP企業名辞書 というのがある。これを使えば企業名を検索して変遷やグループ企業などを一気に取得することができる。例えばパナソニックと松下電器産業は同じとか。
さらに外部データとの連携ができるようにコードが付与されているのであんなことやこんなこともできるのではないかと妄想させるところが素晴らしい。一部の特許データへの接続も考慮されている。
ただリレーショナルデータベースの構造で提供されるのでデータベース構築+SQLのスキルは必要になるのである程度の作業は必要になる(自分でHP調べるよりははるかに楽とは思うが)。ただ、逆にそのおかげで検索したりテーブル結合したりしてデータが即取得できるようにはなる。
商用利用もOKなので興味のある方は試してはいかがでしょうか。
②の表記ミスの解決については先ほど触れた一部の特許データを使えば大体の範囲をカバーできる(すべてではない)。これはまた長いので別途。
insert ignore 〜の問題
insert ignore 〜 の構文でインサートしたときには重複行がある場合にはインサートを実行しないのだがちょっと問題点が。。
プライマリキー(たとえば id) をauto_increment で設定していて かつ それ以外のカラムにUNIQUE KEYを設定している場合に問題があるよう。 insert ignore 〜でインサートが実行されないときにもauto_incrementが実行されるのでプライマリキーにギャップ(空番)が出てしまい、現状存在するプライマリキーの番号とシーケンスの番号の差異が一定以上(たしか10000)になるとエラーになってしまう。
これはmysql5.1.22 のinnoDBの仕様らしく設定を変えるしかないので断念。。
バルクインサートで便利かと思ったのだが、1データずつ存在チェック+インサートしかなさそう。パフォーマンスはわるそうだが仕方ないかな。。
整理標準化データの追加
整理標準化データはデータの更新があったときに該当する公報のマスタデータが
配布される形式になっている。
たとえばある出願 2000-123XXX にIPCの更新があったときにはそれについてのすべての整理標準化データの出願マスタ1レコード分が配信される。つまり更新があるときには全カラム更新となるのでdelete, insertの方が処理が楽なのかもしれない。
その場合最新の情報が正となるのでデータ作成の時には 旧->新の場合と 新->旧の場合の処理が異なる。新たなデータの挿入の際にユニークキー(四法+出願番号)が重複するとき、旧->新の時は delete , insert 、 新->旧の時は単に無視となる。
そんなときの insert の構文
旧->新:delete + insert
replace into 〜
ユニークキーに重複があればdelete + insert, なければ insert
ただし、id などのカラムは書き換えてしまう。
新->旧:無視
insert ignore into 〜
ユニークキーに重複があればなにもしない。 なければ insert
ちなみに整理標準化データの出願マスタはDVD一回配布分だけで10万件分ある。。
全回分処理したら何件になるのだろうか。。。
mysql 日本語全文検索 入門
full text search の構文
select * from テーブル名 where match(カラム名) against('キーワード' in boolean mode)
'in boolean mode' は論理演算ができるモードらしい。あとこれを入れてないとなんか
曖昧な検索結果になってしまう。
boolean mode は上記の式のキーワード部分に以下を指定可能
- + AND演算
- ー NOT
- なにもなし OR演算
- @数字 近接演算 (ただしinnoDBのみ)
などなど 詳細はこちら
キーワード部分の例
'apple banana' どちらかのキーワード
'+apple +banana' 両方含む
'+apple machintosh' appleを含むものだが、machintoshを含む方がランク上
'+apple -machintosh' appleを含み、machintoshを含まない
ランクというのは検索結果にスコアがつくのでそのスコアの重みということ。
ランクの計算方法、重み付けについても先のリンクにあるので参考にしたい。
あとここも参考になった
全文検索DB
先日 mroongaのセミナ
Groonga - 「MySQLとPostgreSQLと日本語全文検索3」開催のお知らせ
に参加。ここで知ったのがmysql5.7からmysqlでもインデックスを使った全文検索
が可能ということ。そして google cloud sql の2nd のバージョンが5.7になっていた。
とりあえず公報データを投入して試したら検索できた。ただ気になるのは以下。
- mecabのトークナイザは使えなさそう(mysql では使えるけどgoogleでは使えないという意味で)。インストールできないしね。基本はbi-gram
- innoDB エンジンだとmroongaに比べると遅い。トランザクションはいらないので高速であればよいのだが。
- mroongaは他テーブルの参照にベクターカラムを持てるのだがそれは使えない。この機能は便利そうなのだが。詳しくはこちら
とはいえ、google cloud sql が使えたらサーバー設定も管理も楽なので速度さえでればというところ。まずは数万件データを入れてから速度を見てみようかなと。無駄にならなければよいが。。