1 ある日の知財部にて
2 マルチマルチクレームとは
マルチマルチクレームのいちばん簡単な類型ってこれですよね。 請求項3がマルチクレームで、それを引用する請求項4がマルチマルチクレーム。 |
|
---|---|
でも甲田さん、請求項の引用関係をしっかりと見ないとマルチマルチクレームかどうかって分かりませんよね。 |
類型1:
マルチマルチクレーム類型1
【書類名】特許請求の範囲
【請求項1】特定構造のボールベアリング。
【請求項2】内輪がステンレス鋼である請求項1記載のボールベアリング。
【請求項3】外輪がステンレス鋼である請求項1又は2記載のボールベアリング。
【請求項4】外輪の外側に環状緩衝体を設けた請求項1から請求項3のいずれか1項に記載のボールベアリング。
【請求項5】前記環状緩衝体はゴムである請求項4記載のボールベアリング。
特許庁から簡易型マルチマルチクレームチェッカのmultimulticheckerが公開されているよ。 だから、各案件の請求の範囲をmultimulticheckerにかけていけば、各案件にマルチマルチクレームが含まれているかどうかが判るよ。 |
|
---|---|
multimulticheckerって、htmlにjavascriptで記述されたアプリケーションなんですね。 Azureにデプロイしてみました。 https://jpoapi.azurewebsites.net/multimultichecker_ver_1_1/multimultichecker_ver_1_1.html |
|
案件については、商用特許データベースからCSVファイルでダウンロードできるよ。 例えば、今年3月4日の公開案件を母集団にしようか。 |
|
でも、何千件も請求の範囲をブラウザにコピペするのは大変だよなあ。 | |
じゃあ、各案件の請求の範囲をブラウザにコピペする動作を、Excel VBAで書いてしまいましょう。 |
3 各案件の請求の範囲をチェックツールに掛けるExcel VBA
乙川さん、3月4日の公開案件のCSVファイルをダウンロードしたよ。2568件だから統計的に有意だと思うよ。 | |
---|---|
CSVファイルのAL列が請求の範囲ですね。これをブラウザにコピペして実行ボタンを押したあと、結果を取り込めばいいんですね。そういうExcel VBAを作ります。 |
4 VBAスクリプトの説明
4.1 請求項解析サブルーチンの説明
請求項解析
Option Explicit
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPtr
Private Declare PtrSafe Function GetLastActivePopup Lib "user32" (ByVal hWnd As Long) As Long
Const WM_COMMAND As Long = &H111&
Const WM_DESTROY As Long = &H2&
Const WM_CLOSE As Long = &H10&
Sub 請求項解析()
Dim i As Integer
Dim j As Integer
Dim claims As String
Dim orText As String
Dim orLines As Variant
Dim claim As Variant
For i = 2 To 2569
claims = Cells(i, "AL").Value
claims = Replace(claims, "【請求項", vbCrLf & "【請求項")
Call mmcheck(claims, orText)
If Len(orText) > 0 Then
orLines = Split(orText, vbCrLf)
Cells(i, "AM").Value = ""
If UBound(orLines) >= 0 Then
If Left(orLines(0), 6) = "マルチマルチ" Then
Cells(i, "AM").Value = orLines(0)
End If
End If
Cells(i, "AN").Value = ""
If UBound(orLines) >= 1 Then
If Left(orLines(1), 2) = "上記" Then
Cells(i, "AN").Value = RTrim(orLines(1))
End If
End If
End If
Next i
End Sub
4.2 mmcheckサブルーチンの説明
乙川さん、mmcheckサブルーチンは、マルチマルチクレームチェッカを呼び出すものだよね。 | |
---|---|
mmcheckサブルーチンは、マルチマルチクレームチェッカをデプロイしたURLを呼び出して、ic入力フィールドに請求項を入力して「実行」ボタンをクリックして、orフィールドから結果を取得します。 コードの参考としたURLは https://fastclassinfo.com/entry/vba_ie_control/ です。 |
|
ic入力フィールドに請求項を入力することが、請求項フィールドにコピペする動作の代わりです。orフィールドから結果を取得する動作が、結果フィールドから結果をコピペする動作の代わりです。 | |
なお、Alertダイアログが表示された場合には、WM_CLOSEを投げてそのダイアログを閉じます。 |
mmcheck
Sub mmcheck(ByVal claims As String, ByRef orText As String)
'---コード1|インターネットに接続してブラウザを開く---
Dim objIE As New InternetExplorer
Set objIE = New InternetExplorer
objIE.Visible = True
orText = ""
'---コード2|インターネットの特定のページを開く---
objIE.Navigate "https://jpoapi.azurewebsites.net/multimultichecker_ver_1_1/multimultichecker_ver_1_1.html"
Call IEWait(objIE) 'IEを待機
Call WaitFor(3) '3秒停止
'---コード3|IEに自動で文字入力して情報検索する---
'キーワードを取得
Dim s As String
s = claims
Dim objtag, objsubmit As Object
Set objtag = objIE.Document.getElementById("ic")
objtag.Value = s
Dim Button As Object
For Each Button In objIE.Document.getElementsByTagName("button")
If Button.textContent = "実行" Then '値が「実行」なら
'対象のボタンを取得後、VBAではなく、javascriptでクリックする。そうすることで、制御はVBAに残ったままになり、以下のコードが実行される。
objIE.Document.Script.setTimeout "javascript:document.getElementsByTagName('button')(0).click()", 200
'ボタンをクリックして
Exit For '繰り返し処理を抜ける
End If
Next
Call WaitFor(1) '1秒停止
Dim hWnd As Variant
hWnd = FindWindow("#32770", "Web ページからのメッセージ")
If hWnd <> 0 Then
Debug.Print hWnd, objIE.hWnd
DoEvents
PostMessage hWnd, WM_CLOSE, vbOK, 0
End If
'---コード5|IEを閉じる---
Dim objOr As Object
Set objOr = objIE.Document.getElementById("or")
orText = objOr.innerText
objIE.Quit
Set objIE = Nothing
End Sub
4.3 IEWaitサブルーチンの説明
IEWaitサブルーチンって、Internet Explorerを制御するものかな。 | |
---|---|
Internet Explorerの起動完了まで待機する関数です。mmcheckサブルーチンから呼び出されます。 |
IEWait
Function IEWait(ByRef objIE As Object)
Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop
End Function
4.4 WaitForサブルーチンの説明
WaitForサブルーチンって何なのかな。 | |
---|---|
指定秒数だけ待機する関数です。mmcheckサブルーチンから呼び出されます。 |
WaitFor
Function WaitFor(ByVal second As Integer)
Dim futureTime As Date
futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Function