mysql@ubunt のリモート接続
my sql をubuntu(16.04)に入れてデータサーバーとして他の端末から接続する
ときにはまってしまいました。。
リモート側で接続しようとすると
ERROR 2002 (HY000) : Can't connect to MySQL server ~~
と出てしまう。
調べてみると /etc/mysql/my.cnf 内の bind-adressの項目をコメントアウト or
サーバー自身のipadress に書き換えればOKとわかる。
しかし。。/etc/mysql/my.cnf の中身は
!include /etc/mysql/conf.d/
!include /etc/mysql/mysql.conf.d/
とあるのみで該当箇所がない! そしてしばらくはまってしまう。
しばらくしてこれを見つけて解決。
mysqlの設定の実体は /etc/mysql/mysql.conf.d/mysqld.cnf でそこにbind-addressの
項目を発見!コメントアウトして問題解決。地味なところではまってしまいました。。
整理標準化データIPCについての小ネタ
特許の検索や集計をする際に筆頭IPCを利用される方もいるのではないだろうか。
役には立たないかもしれないけれどそれに関する小ネタ。
整理標準化データではIPCは出願マスタに含まれていて「公開IPC(un-examined-ipc)」と「公告IPC(examined-ipc)」で分かれて記録されている。これは見たまんま公開時のIPCと登録時のIPCを意味している(公告制度は今はないがこの名称が今も利用されている)。このことは jplat-patでも確認できる(下記は2009年出願案件)。
ここで注目したいのは上記の件で筆頭IPCが変化していることである。ご存じの方も多いと思うが、公開公報のIPCと登録公報のIPCが違うことはたまにある。理由としては
① 補正などによってメインクレームの技術分野が変わってしまう
例)画像処理方法(G06T)が撮像装置(H04N)に変わった
② IPCの分類体系の変化
例)いわゆるビジネスモデル系 G06T17/60 -> G06Q50/~
③ 審査官による再付与
審査官が審査後により適切と思われるIPCに付与し直した
サーチャーでも着手当初の見込みが違うことはありますよね!?
などがある。
たまにあるといっても具体的にどれくらいか気になったので手元にある出願データ(約1400万件)について調べてみた。するとサブクラスレベル( 4桁 例えば G06T)で公開時と登録時で違うものは 約25万5千件。割合にすると約1.8%程度なのでやはり「たまに」という位の頻度。ただし公開と登録の両方にIPCが付与されている文献は約439万件なのでそれを考慮すると 6%位にはなる。
なお、商用データベースNRIサイバーパテントデスク2でいろいろ試してみると「筆頭IPC」では公開、登録の区別なくヒットしたので漏れの心配はなさそうである。いずれかにヒットするようにしているのだろう。
というわけで結論としては公開、登録の区別を気にしなくても特に問題なし!ただしちょっと思ったよりは多めにヒットするということで、結局知らなくても影響はないという話でした。。。
ちなみにFIは出願情報(出願マスタ)とは別にサーチマスタという別のデータで管理されていて、こちらには出願単位でFI,Fタームが記録されるので公開、登録の区別はない。自分の経験や聞いた話で不正確ではあるが、FIは過去の履歴は残したままになるはず。更新前で、もはやパテントマップガイダンスでも参照できないようなものもFIデータには残っていることが多い。
企業の名寄せについての一考
特許データの分析時や集計時には企業の名寄せについてはなかなか悩まされる
ことと思う。名寄せが必要な理由は大きくは以下の理由がある。
①企業の変遷によるものー名称変更、合併、吸収 etc.
②表記揺れ 整理標準化データのなかでも表記の揺れは大きい。特に海外出願人はほぼ一筋縄ではいかず、人間が見たら同じに見えてもエクセルやDB上は全く別物となってしまう。
で、ここでは①の解決方法についての提案を一つ。
以前の記事に紹介したNISTEP(科学技術・学術政策研究所)の企業名辞書を使用する方法である。
産業における研究開発・イノベーションに関するデータ | 科学技術・学術政策研究所 (NISTEP)
この中の企業名辞書テーブルを用いる方法である。ありがたいことにMySQLのダンプ(CSV)形式になっているのですぐにインポートして利用することができる。インポートした結果は以下(ツールによってDBテーブルの中身を表示)。
comp_id : 各企業(comp_name)で表される企業ごとのid
history_id:同一企業の変遷レコードをグループ化して扱うための番号
(合併、吸収、名称変更などは同じグループ化される)
たとえば「サンリオ」は comp_id: 1008136, history_id: 1008136 で、逆に history_id 1008136 で検索すると以下のような結果となる。つまり以下は1つのグループとなる。
一応企業HPで確認して正しいことはわかった(あたりまえか)。
で、テーブルからのこの取得方法は上記のような二段階の検索はせずに副問い合わせを使って1回で取得可能。ちなみにテーブル名は1_comp_name_main_TBLなので
select * from 1_comp_name_main_TBL where history_id in
(select history_id from 1_comp_name_main_TBL where comp_name = 'サンリオ')
サンリオの例は企業変遷だが、合併・統合の例でいうとリクシルの情報は以下のとおり
で、これをどうやって名寄せに利用するかというと、上記のSQLで得られたcomp_nameを使ってさらに出願人名で書誌データ(整理標準化データなど)を検索すれば名寄せを考慮した検索が自動的にできる。もちろんどこまでを名寄せと考えるかは各自の判断があるのでそのあたりの工夫は必要になるだろう。
SQLで考えると副々問い合わせになるので可読性は悪くなりそうだけどほかのやり方を知っている人がいたら教えてもらいたいです。。
さらに、この方法と以前に触れたexcel+pythonの技を使うと縦セルに企業名を並べておいて一気に上記の方法で取得した企業情報や件数集計を埋めることができる。
実際にやってみたので画面を動画キャプチャしてデモにしようかと思ったけど、動画にするのがいまいちうまくいかなかったのあきらめた(笑)。
上記の例はデータベースを構築することが前提となるが、ありがたいことにExcelの形式でも提供されているので何らかの自動化は可能だと思う。私はVBAはできないので具体的なことは言えないけれど、もし手動で利用するにしても有用な情報だと思う。仕様や詳細は是非HPを見てみてほしい。
python から excel の操作
ライブラリ openpyxl を使用すればできた
https://openpyxl.readthedocs.io/en/default/index.html#
インストールはMac環境では
pip install openpyxl
使用例
# coding: utf-8
import openpyxl
wb = openpyxl.load_workbook(filename = 'sample.xlsx')
sheet = wb['test']
print sheet['A2'].value #セルA2の値
cell_range = sheet['A1':'C10'] # Cells(A1:C10) の取得
for cell in cell_range:
print cell[0].value # 列Aの各要素の値を出力
# タプルで1列ごと取得 1行目なら (A1, B1, C1) となる Aの要素はインデックス0
#cell_range の中身
# (<Cell test.A1>, <Cell test.B1>, <Cell test.C1>)
# (<Cell test.A2>, <Cell test.B2>, <Cell test.C2>)
# (<Cell test.A3>, <Cell test.B3>, <Cell test.C3>)
# (<Cell test.A4>, <Cell test.B4>, <Cell test.C4>)
# (<Cell test.A5>, <Cell test.B5>, <Cell test.C5>)
# (<Cell test.A6>, <Cell test.B6>, <Cell test.C6>)
# (<Cell test.A7>, <Cell test.B7>, <Cell test.C7>)
# (<Cell test.A8>, <Cell test.B8>, <Cell test.C8>)
# (<Cell test.A9>, <Cell test.B9>, <Cell test.C9>)
# (<Cell test.A10>, <Cell test.B10>, <Cell test.C10>)
wb.save('sample.xlsx') # セーブ
基本的な読み書きは以上でだいたいいける。あとは都度サンプルを見ればよし。
VBAよりこっちの方が楽でよいし、データベースにアクセスしつつ値を入力できそうなので結構使えそう。
キーワード検索 ≠ 全文検索
特許の商用データベースを利用していてこんなこと感じたことがあると思う。
例えば全文を対象としてキーワード「静電容量センサ」で検索
検索キーワードをハイライトして公報をチェック
しかしそこにはキーワード「静電容量センサ」がない。
これは我々ユーザが利用するイメージと実際の動作に違いがあることが理由である。各社商用データベースのエンジンになにが使用されているかは公開されていないがおそらく動作は下記と同じと思う。
通常我々が思い描くイメージは 「静電容量センサ」の語句のかたまりをテキストに対して一致させて検索させているものだと思う。もちろんこの方法での検索はデータベースでできるのだが、おそらく利用していないはず。理由はとても遅いから。これはSQLでいうとLIKE演算による部分一致になる。
では実際にどうしているかというと文章を語句単位に切り分けて、語句単位のマッチングをしている。これがデータベース(OracleやMySQLなど)でいう全文検索(Full Text Search)である。そして、その語句の切り分け方は以下の3通りある。なお、各商用データベースがどれを利用しているかは不明。
1.空白による区切り
英語などの言語に適用
2.N-gram
N文字単位で区切る。特に2文字単位はbigramと呼ばれ、日中韓はこれで対応するケースが多い。逆に英語では2文字では不十分といわれている。
3.形態素解析
形態素解析エンジンによって単語単位に分割。動詞の活用の表記揺れなども吸収できる。辞書を用いるので新語などには弱い。
bigramを例にとると 「静電容量センサ」 は「静電」、「電容」、「容量」、「量セ」、「セン」、「ンサ」に分解されて それらを同じ順序でもつ文献が検索される。適合率は下がるが漏れはないことはおわかりいただけると思う。
なぜこれで速くなるかということは説明が長いし、私も完全には理解してはいないが、自身で実験データ(公報3万件分)でLIKE演算と比較すると100倍くらいの速度の違いがあった。
これを知ってどうなるのかなという気もするけど少なくとも最初の?は消えるのではないでしょうか。ちなみに特許情報フェアのUSPTOのカンファレンスでは庁内の全文検索はN-gramとの記載があった(のでこのネタが浮かんだ)。
企業名や出願人の名寄せ
特許の分析をする際に一番悩ましいのが名寄せではないかと思う。
名寄せが必要な理由は
①企業の名称変更、合併、吸収
②単に表記ミス
などがある。
①の解決には商用のツールを使うという手があるのかもしれない(使ったことないので知らないけど)。あるいは企業のHPや会社情報DB見てメモしたりとかやるのかもしれない。だけど分析対象の出願人・企業名が多い場合はかなりキツイと思う。
そんな時利用できるのはNISTEP(科学技術・学術政策研究所)
に公開されている NISTEP企業名辞書 というのがある。これを使えば企業名を検索して変遷やグループ企業などを一気に取得することができる。例えばパナソニックと松下電器産業は同じとか。
さらに外部データとの連携ができるようにコードが付与されているのであんなことやこんなこともできるのではないかと妄想させるところが素晴らしい。一部の特許データへの接続も考慮されている。
ただリレーショナルデータベースの構造で提供されるのでデータベース構築+SQLのスキルは必要になるのである程度の作業は必要になる(自分でHP調べるよりははるかに楽とは思うが)。ただ、逆にそのおかげで検索したりテーブル結合したりしてデータが即取得できるようにはなる。
商用利用もOKなので興味のある方は試してはいかがでしょうか。
②の表記ミスの解決については先ほど触れた一部の特許データを使えば大体の範囲をカバーできる(すべてではない)。これはまた長いので別途。