AU2021107326A4 - A data- and information mining system and method - Google Patents

A data- and information mining system and method Download PDF

Info

Publication number
AU2021107326A4
AU2021107326A4 AU2021107326A AU2021107326A AU2021107326A4 AU 2021107326 A4 AU2021107326 A4 AU 2021107326A4 AU 2021107326 A AU2021107326 A AU 2021107326A AU 2021107326 A AU2021107326 A AU 2021107326A AU 2021107326 A4 AU2021107326 A4 AU 2021107326A4
Authority
AU
Australia
Prior art keywords
span
style
div
txt
grid
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
AU2021107326A
Inventor
Hendrik Liebenberg
Ravi McCosker
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Liebenberg Hendrik Johannes Mr
Original Assignee
Liebenberg Hendrik Johannes Mr
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Liebenberg Hendrik Johannes Mr filed Critical Liebenberg Hendrik Johannes Mr
Priority to AU2021107326A priority Critical patent/AU2021107326A4/en
Application granted granted Critical
Publication of AU2021107326A4 publication Critical patent/AU2021107326A4/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/26Visual data mining; Browsing structured data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

This invention relates to data mining systems and information mining systems. In particular, the invention relates to computerised active screen component objects made and used to data mine and information mine. The invention extends to a computer program product, which when executed, computerises active screen component objects, a method of computerising active screen component objects, and a computer system, that includes a computer program product, which when executed, computerise an active screen component object to data mine and information mine. 2m - - 3I I I C M I0 I0 0 0 0 [0 0 [ 0 0 [ C l l l U 00 FL]]C [FlC iiC iL]]lii C LI] C L C LII] C g. a3 _ _13aK E e -C a Ii a 6 Ii% aE ~ :1 o a = x a .a - a

Description

2m - -
3II I CM I0 I0 000 [0 0 [ 00 [ Cl l l U
00 FL]]C [FlC iC iL]]lii C LI] C L C LII] C
g.
E e -C
a
Ii
a
a3 _ _13aK
6 Ii% aE
~ :1 o
a x = a
.a
- a
EDITORIAL NOTE
2021107326
THERE ARE 58 PAGES OF DESCRIPTION ONLY
A DATA- AND INFORMATION MINING SYSTEM AND METHOD TECHNICAL FIELD
This invention relates to data mining systems and information mining systems. In particular, the invention relates to computerized active screen component objects made and used to datamine and information mine. The invention extends to a computer program product, which when executed, computerizes active screen component objects, a method of computerizing active screen component objects, and a computer system, that includes a computer program product, which when executed, computerize an active screen component object to data mine and information mine.
SPECIFIC DESCRIPTION
Specific embodiments, in accordance with the invention, are disclosed below with the accompany drawings in which: Figure 1 shows a graphical user interface forming part of screen component objects, in accordance with the invention, for input and construction of search tokens in relation to a plurality of related search queries, Figure 2 shows a graphical user interface forming part of screen component objects for presenting search result tokens in a diagrammatic relationship with the search tokens and related queries in Figure 1, Figure 3 shows a graphical user interface forming part of screen component objects that presents a record of the search tokens and queries in Figure 1, Figure 4 shows another a graphical user interface forming part of screen component objects for input and construction of search tokens in relation to a plurality of related search queries, Figure 5 shows another a graphical user interface forming part of screen component objects for presenting search result tokens in a diagrammatic relationship with the search tokens and related queries in Figure 1, and Figure 6 shows another graphical user interface forming part of screen component objects for constructing search tokens and queries.
An example of computer implemented instructions for enabling a computer system, in accordance with the invention, follows below:
<!DOCTYPE html> <html lang="en"> <head> <title>LENSI</title> <!-- --------------------------------------------------------------- --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=l"> <!-- --------------------------------------------------------------- --> <link rel="shortcut icon" type="image/png" sizes="32x32" href="inc/icon32.png"> <!-- ------- --> <link rel="stylesheet" type="text/css" href="index.css"> </head>
<body>
<div class="main-grid-container"> <div class="main-nav"> <div class="main-nav-title" style="grid-area: 1/1 / span 1/span 1;"> <img id="idIcon" src="inc/icon16.png" style="width:16px; padding left:5px;"> <span style="color:white; font-weight:bold; font-variant:small-caps; font size:lrem; padding-left:5px; font-family: Tahoma, sans-serif;">LENS-Interface</span> <span style="color:black; padding-left:10px; font size:0.5rem">v</span><span id="idVersion" style="color:green; font-weight:bold;">?</span> </div> <div class="main-nav-buttons" style="grid-area: 1/2 / span 1/span 1; justify-self: left;"> <form class="form-engine" style="background-color:#eeeeee; padding:O 5px; border radius: 0.25rem;"> <label style="font-weight:bold;">Search: </label> <input id="idSearchPatent" type="radio" name="radio" value="patent" checked><label>Patent</label> <input id="idSearchScholar" type="radio" name="radio" value="scholar"><label>Scholar</label> </form> </div> <div class="main-nav-buttons" style="grid-area: 1/3 / span 1/span 1; justify-self: right;"> <button id="idThesaurus" style="margin-left:2px;">&#8635 Thesaurus</button> <button id="idLens" style="margin-left:2px;">&#8635 Lens</button> <button id="idLensSyntax" style="margin-left:2px;">&#8635 Lens Syntax</button> </div> </div> <!-- ------- --> <div class="main-hdr"> <div class="main-hdr-left-grid-container"> <div class="hdr-application">Application Number</div> <div class="hdr-application-val"> <input id="idApplication" type="text" style="font-size:0.7rem;" > <button id="idSave" style="margin-left:2px;">Save</button> <button id="idLoad" style="margin-left:2px;">Load</button>
<input type="file" id="idLoadFile" style="display:none;" accept="application/json"> </div> <div class="hdr-priority-date">Priority Date</div> <div class="hdr-priority-date-val"><input id="idPriority" type="date" style="font-size:0.7rem;"></div>
<div class="hdr-pub-date">Publication Date</div> <div class="hdr-pub-date-val"><input id="idPublication" type="date" disabled style="font-size:0.7rem;"></div> </div> <div class="hdr-jurisdictions">Jurisdictions</div> <div class="hdr-all" style="padding-left:20px;">All</div> <div class="hdr-us" style="padding-left:20px;">US</div> <div class="hdr-ep" style="padding-left:20px;">EP</div> <div class="hdr-gb" style="padding-left:20px;">GB</div> <div class="hdr-wo" style="padding-left:20px;">WO</div> <div class="hdr-au" style="padding-left:20px;">AU</div> <div class="hdr-all-val"><input id="idJurisdictionAll" type="checkbox"></div> <div class="hdr-us-val"><input id="idJurisdictionUS" type="checkbox"></div> <div class="hdr-ep-val"><input id="idJurisdictionEP" type="checkbox"></div> <div class="hdr-gb-val"><input id="idJurisdictionGB" type="checkbox"></div> <div class="hdr-wo-val"><input id="idJurisdictionWO" type="checkbox"></div> <div class="hdr-au-val"><input id="idJurisdictionAU" type="checkbox"></div> <div class="hdr-whole-of-contents">Whole of Contents</div> <div class="hdr-wo-wofc-val"><input id="idWoCWO" type="checkbox"></div> <div class="hdr-au-wofc-val"><input id="idWoCAU" type="checkbox"></div> <div class="hdr-filters">Filters</div> <div class="hdr-group-family" style="padding-left:20px;">Group Family</div> <div class="hdr-group-family-val"><input id="idGroupFamily" type="checkbox"></div> <div class="hdr-box hdr-box-grid-container"> <div class="hdr-box-title">Search Query Proposer <button id="idPropose">Run</button></div> <div class="hdr-box-title-input">Raw Input:</div> <div class="hdr-box-input"><input id="idProposalInput" type="text" style="height:100%; width:98%;"></div> <div class="hdr-box-run"></div> <div class="hdr-box-title-output">Query Suggestion:</div> <div class="hdr-box-output"><input id="idProposalOutput" type="text" style="height:100%; width:98%;"></div> </div> </div> <div class="main-tabs"> <button id="idTabStatements" class="tabItem active">Statements</button> <button id="idTabList" class="tabItem">List</button> <button id="idTabSIS" class="tabItem">SIS</button> <button id="idTabLog" class="tabItem">Log</button> </div> <div class="main-tab-body"> <!-- ---------------------------------------------------------------- --> <div class="statements-grid-container"> <div id="idContext" class="context-grid-container"> <div class="ctx-title first"><button id="idClearContext">Clear</button></div> <div class="ctx-title css">Context Search Statements</div> <div class="ctx-title stem">Stem</div> <div class="ctx-title results">Results</div>
<div class="ctx-contextl txt">Context 1</div> <div class="ctx-context2 txt">Context 2</div> <div class="ctx-context3 txt">Context 3</div> <div class="ctx-contextl btn"><button id="idSendContextl" >Send</button></div> <div class="ctx-context2 btn"><button id="idSendContext2" >Send</button></div> <div class="ctx-context3 btn"><button id="idSendContext3" >Send</button></div> <div class="ctx-contextl input-text"><input id="idContextl" type="text" style="width:100%;"></div> <div class="ctx-context2 input-text"><input id="idContext2" type="text" style="width:100%;"></div> <div class="ctx-context3 input-text"><input id="idContext3" type="text" style="width:100%;"></div> <div class="ctx-contextl stem"><center><input id="idContextSteml" type="checkbox"></center></div> <div class="ctx-context2 stem"><center><input id="idContextStem2" type="checkbox"></center></div>
<div class="ctx-context3 stem"><center><input id="idContextStem3" type="checkbox"></center></div> <div class="ctx-contextl results" style="text align:center;">0</div> <div class="ctx-context2 results" style="text align:center;">0</div> <div class="ctx-context3 results" style="text align:center;">0</div> </div> <div id="idClaims" class="claims-grid-container"> <div class="cl-txt-first"><button id="idClearClaims">Clear</button></div> <div class="cl-txt-ss">Query Search Statements</div> <div class="cl-txt-ctx">Context</div> <div class="cl-txt-stem">Stem</div> <div class="cl-txt-results">Results</div> <div class="cl-txt-compare">Show</div> </div> </div> <!-- ---------------------------------------------------------------- --> <div id="idList" class="list-grid-container" style="display:none;"> </div> <!-- ---------------------------------------------------------------- --> <div class="sis-grid-container" style="display:none;"> <div> <b>SIS:</b> <textarea id="idSIS" style="height:95%; width:99%; padding:5px; resize:none;"></textarea> </div> </div> <!-- ---------------------------------------------------------------- --> <div class="log-grid-container" style="display:none;"> <div> <b>Log:</b><br> <textarea id="idLog" style="height:95%; width:99%; padding:5px; resize:none;"></textarea> </div> </div> </div> </div>
<scrip src="var.js"></scrip-> <script src="index.js"></script>
</body> </html>
INDEX.CSS LENSI v3 26 Jun 2021
button border-radius: 0.25rem; } button.tabItem border-bottom-left-radius: 0!important; border-bottom-right-radius: 0!important; }
/* ------------------------------------------------ * body { margin:0; padding:0;
.main-grid-container display: grid; grid-template-columns: lfr; grid-template-rows: 1.3rem calc(1.3rem 6) 1.3rem auto; gap: Opx Opx; height: 100vh; width: 100%; overflow-y:hidden;
.main-nav grid-area: 1 / 1 / span 1/span 1; background-color: #a2a2a2; display:grid; grid-template-columns: calc( lrem*13) auto auto; grid-template-rows: lfr; gap: Opx Opx; padding: 0 5px;
.main-hdr margin: 2px 5px; padding: 5px; grid-area: 2 / 1 / span 1/span 1;
.main-tabs grid-area: 3 / 1 / span 1/span 1; margin: 0; padding: 0 5px; border-bottom:2px solid #dddddd;
.main-tab-body grid-area: 4 / 1 / span 1/span 1; height:100%; margin: 0; padding: 0; overflow-y:auto;
/* -----------------------------------------------
.main-hdr { display: grid; grid-template-columns: 30% 5rem 2rem 8rem 6rem 2rem auto; grid-template-rows: repeat(7, 1rem); gap: Opx Opx; background-color: #f8f8f8;
.main-hdr-left-grid-container display: grid; grid-template-columns: lfr; grid-template-rows: auto auto auto auto auto auto; gap: Opx Opx;
.hdr-box-grid-container display: grid; grid-template-columns: lfr lfr; grid-template-rows: 1.2rem 1.2rem auto; gap: Opx 0;
.hdr-application,.hdr-priority-date,.hdr-pub-date, hdr-jurisdictions, hdr-whole-of-contents,.hdr filters { font-weight:bold;
}
.hdr-application { grid-area: 1/1 / span 1/span 1; .hdr-application-val { grid-area: 2/1 / span 1/span 1; padding-left:10px; .hdr-priority-date { grid-area: 3/1 / span 1/span 1; } .hdr-priority-date-val { grid-area: 4/1 / span 1/span 1; padding-left:10px; .hdr-pub-date { grid-area: 5/1 / span 1/span 1; } .hdr-pub-date-val { grid-area: 6/1 / span 1/span 1; padding-left:10px;
.hdr-jurisdictions { grid-area: 1/2 / span 1/span 1; .hdr-all { grid-area: 2/2 / span 1/span 1; } .hdr-all-val { grid-area: 2/3 / span 1/span 1; .hdr-us { grid-area: 3/2 / span 1/span 1; } .hdr-us-val { grid-area: 3/3 / span 1/span 1; .hdr-ep { grid-area: 4/2 / span 1/span 1; } .hdr-ep-val { grid-area: 4/3 / span 1/span 1; .hdr-gb { grid-area: 5/2 / span 1/span 1; } .hdr-gb-val { grid-area: 5/3 / span 1/span 1; .hdr-wo { grid-area: 6/2 / span 1/span 1; } .hdr-wo-val { grid-area: 6/3 / span 1/span 1; .hdr-au { grid-area: 7/2 / span 1/span 1; } .hdr-au-val { grid-area: 7/3 / span 1/span 1;
.hdr-whole-of-contents { grid-area: 5/4 / span 1/span 1; .hdr-wo-wofc-val { grid-area: 6/4 / span 1/span 1; padding-left:lrem; .hdr-au-wofc-val { grid-area: 7/4 / span 1/span 1; padding-left:lrem;
.hdr-filters { grid-area: 1/5 / span 1/span 3; } .hdr-group-family { grid-area: 2/5 / span 1/span 2; .hdr-group-family-val { grid-area: 2/6 / span 1/span 2;
.hdr-box{ grid-area: 1/7/ span 7/span 1; background-color:#fbf5e3;
.hdr-box-title { grid-area: 1/1 / span 1/span 2; font-weight:bold; text-align:center; .hdr-box-title-input { grid-area: 2/1 / span 1/span 1; font-weight:bold; text-align:center; .hdr-box-input { grid-area: 3/1 / span 1/span 1; padding:5px; margin-bottom:5px; } .hdr-box-title-output { grid-area: 2/2 / span 1/span 1; font-weight:bold; text-align:center; .hdr-box-output { grid-area: 3/2 / span 1/span 1; padding:5px; margin-bottom:5px; .hdr-box-run { grid-area: 2/2 / span 1/span 1; }
/* ------------------------------------------------ /
.statements-grid-container display: grid; grid-template-columns: lfr; grid-template-rows: lfr auto; gap: Opx Opx; border: lpx solid grey; margin:0; padding: 0;
.context-grid-container grid-area: 1/1 / span 1/span 1; display: grid; grid-template-columns: auto 4rem lfr 3rem 5rem; grid-template-rows: repeat(4, lfr); gap: Opx Opx; border: lpx solid grey;
.ctx-title.first { grid-area: 1/1 / span 1/span 2; text-align:left; .ctx-title.css { grid-area: 1/3 / span 1/span 1; } .ctx-title.stem { grid-area: 1/4 / span 1/span 1; .ctx-title.results { grid-area: 1/5 / span 1/span 1;
.ctx-contextl.txt { grid-area: 2/1 / span 1/auto; .ctx-context2.txt { grid-area: 3/1 / span 1/auto; .ctx-context3.txt { grid-area: 4/1 / span 1/auto; .ctx-contextl.btn { grid-area: 2/2 / span 1/auto; .ctx-context2.btn { grid-area: 3/2 / span 1/auto;
.ctx-context3.btn { grid-area: 4/2 / span 1/auto; .ctx-contextl.input-text { grid-area: 2/3 / span 1/span 1; .ctx-context2.input-text { grid-area: 3/3 / span 1/span 1; .ctx-context3.input-text { grid-area: 4/3 / span 1/span 1; .ctx-contextl.stem { grid-area: 2/4 / span 1/span 1; .ctx-context2.stem { grid-area: 3/4 / span 1/span 1; .ctx-context3.stem { grid-area: 4/4 / span 1/span 1; .ctx-contextl.results { grid-area: 2/5 / span 1/span 1; .ctx-context2.results { grid-area: 3/5 / span 1/span 1; .ctx-context3.results { grid-area: 4/5 / span 1/span 1;
.ctx-title { background-color:#ff7373; font-weight: bold; font-variant: small-caps; text-align: center; border-bottom: 2px solid black;
.context-grid-container > .txt font-weight:bold;
.ctx-contextl background-color:#ffefbf; padding:2px;
.ctx-context2 background-color:#ffffbf; padding:2px;
.ctx-context3 background-color:#efffbf; padding:2px; }
#idContext input,label,span,button { font-size:0.7rem;
/* ---------------------- */
.claims-grid-container grid-area: 2/1 / auto/span 1; display: grid; grid-template-columns: 5rem 4rem 5rem auto 6rem 3rem 5rem 3rem; grid-template-rows: repeat(201, auto); gap: Opx Opx; background-color: #ffffff; border: lpx solid grey; margin-top:5px;
.cl-txt-first,.cl-txt-ss,.cl-txt-ctx,.cl-txt-stem,.cl-txt-results,.cl-txt-compare background-color:#99ccff; font-weight: bold; font-variant: small-caps; text-align: center; border-bottom: 2px solid black;
.cl-txt-first { grid-area: 1/1 / span 1/span 3; text-align:left; .cl-txt-ss { grid-area: 1/4 / span 1/span 1; .cl-txt-ctx { grid-area: 1/5 / span 1/span 1; .cl-txt-stem { grid-area: 1/6 / span 1/span 1; .cl-txt-results { grid-area: 1/7 / span 1/span 1; .cl-txt-compare { grid-area: 1/8 / span 1/span 1;
#idClaims input,label,span,button { font-size:0.7rem;
/* ------------------------------------------------ /
.list-grid-container { display: grid; gap: Opx Opx; background-color: #defae6; padding: 5px 10px 5px 20px; div.list-grid-container font-size:8pt;
}
.list-hdr-document { font-weight:bold; background-color: #73b9ff; border-bottom: 2px solid black; } .list-row-odd { background-color: #eeeeee; } /* #eeeeee */ .list-row-even { background-color: #bfefff; } /* #dddddd */
.sis-grid-container display: grid; grid-template-columns: ifr; grid-template-rows: ifr; gap: Opx Opx; background-color: #ffe599; padding: 5px 10px; height:98%;
.log-grid-container display: grid; grid-template-columns: auto; grid-template-rows: auto; gap: Opx Opx; background-color: #eee8ff; padding: 5px 10px; height:98%;
/* ------------------------------------------------ /
.tabItem.active { 66 9 background: #00 1 ; color: white; font-weight:bold;
.tabItem background: #dddddd; border: 1px solid transparent; border-top-left-radius: .25rem; border-top-right-radius: .25rem; }
INDEX.JS LENSI Updated: 10 Jul 2021
//MISC
var ids = //--------------------------------------------------------- function mirrorIDs() //--------------------------------------------------------- for ( i=0; i<ids.length; i++ ) window[i] = undefined; ids =[]; let list = document.querySelectorAll( '[id *= id]' for ( i=0; i<list.length; i++) let id = list[i].id; ids.push( id ); window[id] = document.querySelector( ''+ id
mirrorIDs(;
//--------------------------------------------------------- readFile = function( fileObject, onload ) {
//--------------------------------------------------------- let reader = new FileReader(; reader.onload = onload; reader.readAsText( fileObject
//------------------------------------------------------------- function onError( r ) { //------------------------------------------------------------- isWait = -1; idResults.innerHTML = '<b>ERROR</b>'; console.log( 'ERROR: '+ r.responseText
//------------------------------------------------------------- function grabUrl( method, url, onOk, body, params ) { //------------------------------------------------------------- let x = new XMLHttpRequest(;
x.onreadystatechange = function() if ( this.readyState == 4 )
if ( this.status == 200 ) onOk( this else onError( this
x.open( method, url, true if ( params )
for ( let i=0; i<params.length; i+=2 let head = params[i]; let val = params[i+1]; x.setRequestHeader( head, val
x.send( body
//------------------------------------------------------------- function grabJSON( url, onOk, size, from ) { //------------------------------------------------------------- let fields = '"LENSTD","TTTLE"'; if ( v.in.searchengine == 'patent' ) fields += ',"DTSPLAYKEY"';
let payload = '{"size":' + size + ',"from":' + from; payload += ',"format":"JSON","fields":[' + fields + '],"async":false}';
grabUrl( 'POST', url, onOk, payload, [ 'content-type', 'application/json' ]
var clk = 0; //------------------------------------------------------------- function doWait( n ) { //------------------------------------------------------------- if ( isWait == -1 clk = 0; return; }
if ( n != undefined ) clk = 0;
let twister = [ '|', '/', '-', '\\', '|', '/', '-', '\\', '|' ]; let s = twister[clk++]; if (clk > 8 ) clk = 0;
let txt = idResults.innerHTML.trim(; if ( twister.indexOf( txt.slice(-1) ) != -1 ) txt = txt.slice( 0, -1 ).trim(; txt = (txt ' ' +s).trim(); txt = s; idResults.innerHTML = txt; setTimeout( doWait, 300
// STORAGE
//------------------------------------------------------------------ function doSaveFile () //------------------------------------------------------------------ let name = idApplication.value.replace( /\.json/i, ' ).trim(); if ( name == ) return;
doSave(;
let vJson = JSON.stringify( v let content = [ vJson ]; let typ = { type: 'application/json' }; / text/html name = name + '.json';
let blob = new Blob( content, typ, name
let a = document.createElement( 'a' a.download = name; a.rel = 'noopener'; a.href = URL.createObjectURL( blob setTimeout( function () { URL.revokeObjectURL( a.href ); }, 2e4 ); // 20s a.click();
,// idLoadFile.addEventListener( 'input', function ( e ) { ,// let files = event.target.files; if ( files.length != 1 ) return; readFile( files[O], function( r ) { let stor = JSON.parse( r.currentTarget.result if ( stor.crc == 'oK' ) { //idApplication.value = f.name.replace( '.json', v = stor; afterLoad(; idLoadFile.value = null;
}, false
//--------------------------------------------------------- function afterLoad() //--------------------------------------------------------- v.crc = 'oK';
if ( v.in.searchengine === undefined ) v.in.searchengine = 'patent'; idSearchPatent.checked = (v.in.searchengine == 'patent'); idSearchScholar.checked = (v.in.searchengine !== 'patent');
idApplication.value = v.in.application; idPriority.value = v.in.priority; idPublication.value = v.in.publication;
idJurisdictionAll.checked = v.in.jurisdiction.all; idJurisdictionUS.checked = v.in.jurisdiction.us; idJurisdictionEP.checked = v.in.jurisdiction.ep; idJurisdictionGB.checked = v.in.jurisdiction.gb; idJurisdictionWO.checked = v.in.jurisdiction.wo; idJurisdictionAU.checked = v.in.jurisdiction.au;
doJurisdiction(;
idWoCWO.checked = v.in.woc.wo; idWoCAU.checked = v.in.woc.au; idGroupFamily.checked = v.in.filter.group family;
idContextl.value = v.in.context[O].s, idContextSteml.checked = v.in.context[O].stem; idContext2.value = v.in.context[1].s; idContextStem2.checked = v.in.context[1].stem; idContext3.value = v.in.context[2].s; idContextStem3.checked = v.in.context[2].stem; let x = document.querySelector( '.ctx-contextl.results' x.textContent = v.in.context[0].results; if ( v.in.context[0].results > 1000 ) x.style.color = 'red'; else if ( v.in.context[0].results > 0 ) x.style.color = 'green'; else x.style.color = ''; x = document.querySelector( '.ctx-context2.results' x.textContent = v.in.context[1].results; if ( v.in.context[1].results > 1000 ) x.style.color = 'red'; else if ( v.in.context[1].results > 0 ) x.style.color = 'green'; else x.style.color = ''; x = document.querySelector( '.ctx-context3.results' x.textContent = v.in.context[2].results; if ( v.in.context[2].results > 1000 ) x.style.color = 'red'; else if ( v.in.context[2].results > 0 ) x.style.color = 'green'; else x.style.color = ''; x = document.querySelectorAll( 'input.query' for ( let i=0; i<200; i++ ) x[i].value = v.in.q[i].s; x = document.querySelectorAll( 'form.query-context' ); for ( let i=0; i<200; i++ ) x[i].elements['radio'].value = v.in.q[i].context; x = document.querySelectorAll( 'input.query-stem' ); for ( let i=0; i<200; i++ ) x[i].checked = v.in.q[i].stem; x = document.querySelectorAll( '.query-results' for ( let i=0; i<200; i++ ) { if ( v.in.q[i].results > 1000 ) x[i].style.color = 'red'; else if ( v.in.q[i].results > 0 ) x[i].style.color = 'green'; else x[i].style.color = ''; x[i].textContent = v.in.q[i].results; x = document.querySelectorAll( 'input.query-show' for ( let i=0; i<200; i++ ) x[i].checked = v.in.q[i].show;
//--------------------------------------------------------- function doLoad() //--------------------------------------------------------- chrome.storage.local.get( null, function( stor let len = Object.keys( stor ).length; if ( len > 0 && stor.version ) v = stor; afterLoad();
//--------------------------------------------------------- function doSave() { /--------------------------------------------------------- v.version = chrome.runtime.getManifest().version;
v.in.searchengine = idSearchPatent.checked ? 'patent' 'scholar';
v.in.application = idApplication.value; v.in.priority = idPriority.value; v.in.publication = idPublication.value;
v.in.jurisdiction.all = idJurisdictionAll.checked; v.in.jurisdiction.us = idJurisdictionUS.checked; v.in.jurisdiction.ep = idJurisdictionEP.checked; v.in.jurisdiction.gb = idJurisdictionGB.checked; v.in.jurisdiction.wo = idJurisdictionWO.checked; v.in.jurisdiction.au = idJurisdictionAU.checked;
doJurisdiction(;
v.in.woc.wo = idWoCWO.checked; v.in.woc.au = idWoCAU.checked; v.in.filter.group family = idGroupFamily.checked; v.in.context[0].s = idContextl.value; v.in.context[0].stem = idContextSteml.checked; v.in.context[1].s = idContext2.value; v.in.context[1].stem = idContextStem2.checked; v.in.context[2].s = idContext3.value; v.in.context[2].stem = idContextStem3.checked; let x = document.querySelectorAll( 'input.query' ); for ( let i=0; i<200; i++ ) v.in.q[i].s = x[i].value; x = document.querySelectorAll( 'form.query-context' ); for ( let i=0; i<200; i++ ) v.in.q[i].context = x[i].elements['radio'].value; x = document.querySelectorAll( 'input.query-stem' ); for ( let i=0; i<200; i++ ) v.in.q[i].stem = x[i].checked; x = document.querySelectorAll( 'span.query-results' ); for ( let i=0; i<200; i++ ) v.in.q[i].results = x[i].textContent; x = document.querySelectorAll( 'input.query-show' ); for ( let i=0; i<200; i++ ) v.in.q[i].show = x[i].checked; chrome.storage.local.set( v
// LENS
//------------------------------------------------------------- function processPatentResults( s ) { //------------------------------------------------------------- if ( s.status == 'OKNORESULTS' } else if ( s.status != 'OK' idResults.textContent = 'Error!'; doSave();
return false;
let docsMatched = s.results.docsMatched; if ( docsMatched > 1000 ) idResults.style.color = 'red'; else idResults.style.color = 'green'; idResults.textContent = docsMatched;
idSTS.value = JSON.stringify( s.results.docs
if ( mode == 'context' ) { v.in.context[index].results = docsMatched; doSave();
return false;
v.in.q[index].results = docsMatched; let len = s.results.docsExported; for ( let i=0; i<len; i++ ) { let rec = { doc: s.results.docs[i].displayKey, id: s.results.docs[i].lens~d }; v.out[index].push( rec }
return true;
//------------------------------------------------------------- function processScholarResults( s ) { //------------------------------------------------------------- let docsMatched = s.length; if ( docsMatched > 1000 ) idResults.style.color = 'red'; else idResults.style.color = 'green'; idResults.textContent = docsMatched;
if ( mode == 'context' )
v.in.context[index].results = docsMatched; doSave();
return false; v.in.q[index].results = docsMatched; let len = docsMatched; for ( let i=0; i<len; i++
) let rec = { doc: s[i].title, id: s[i].lensid }; v.out[index].push( rec }
return true;
//------------------------------------------------------------- function onLensOk( r ) //------------------------------------------------------------- isWait = -1; let s = JSON.parse( r.responseText
let isOk = v.in.searchengine == 'patent' ? processPatentResults( s processScholarResults( s
doS(); doList(; doSave(;
//--------------------------------------------------------- function doLensFix( txt ) { //--------------------------------------------------------- txt = txt.replace( /\"/g, '%22' txt = txt.replace( /\//g, '%2F' txt = txt.replace( /\[/g, '%5B' txt = txt.replace( /\]/g, '%5D' txt = txt.replace( /\{/g, '%7B' txt = txt.replace( /\}/g, '%7D'
return txt;
//--------------------------------------------------------- function doLens( txt, isStem ) { //--------------------------------------------------------- let args = isStem ? '&st=true' : '&st=false'; if ( v.in.searchengine == 'patent' ) { args += v.in.filter.group family ? '&f=true' : '&f=false'; } args '&e=false&l=en'; //if ( v.in.priority != '' ) args += '&publishedDate.to=' + v.in.priority;
let engine = (v.in.searchengine == 'patent') ? 'Patent' : 'Scholarly'; idLog.value 'Lens '+ engine +' Query: '+ txt + '+ args + '\n';
txt = doLensFix( txt
let url = urllens export + v.in.searchengine + '?q=' + txt + args; let size = (mode == 'context') ? 10 : 1000; size = 1000; grabJSON( url, onLensOk, size, 0 idResults.style.color = v.out[index] =
isWait = 1; doWait( 0
//--------------------------------------------------------- function doLensExport( list ) { //--------------------------------------------------------- let len = list.length; if ( len > lensLimit ) len = lensLimit;
let txt = '('; // doc key: AU NUM A* for ( let i=0; i<len; i++ ) { if ( i>0 txt += ' OR let doc = list[i]; doc = doc.replace( /[ \/]/g, ); // txt += doc; //+ txt txt = doLensFix( txt let url = urllens + 'search/' + v.in.searchengine + '/list?q=' + txt; window.open( url
// SIS
//------------------------------------------------------------- function doSIS) //------------------------------------------------------------- let sis = ( v.in.searchengine == 'patent' ) ? 'PATENT' : 'SCHOLARLY'; sis u- ' Search\n---------------\n'
for ( i=0; i<3; i++ ) { sis += 'Context ' + (i+1) + ' ' + v.in.context[i].s + '\n'; let x = document.querySelectorAll( 'input.query' for ( j=0; j<x.length; j++ ) { let rec = grabQueryInput( j if ( rec.query == '' ) continue; if ( rec.contextVal != (i+1) ) continue; sis += ' [ ' + idResults.textContent + ' ] ' + rec.txt '\n';
sis '\n';
idSIS.value = sis;
// LIST
//--------------------------------------------------------- function isInList( doc, list ) { //--------------------------------------------------------- for ( let i=0; i<list.length; i++ ) { if ( doc.toLowerCase() == list[i].doc.toLowerCase() ) return true; } return false;
//--------------------------------------------------------- function updateScore() //--------------------------------------------------------- v.in.score = parseInt( idScore.value
exportList = []; for ( let i=0; i<v.list.length; i++ )
if ( v.list[i].score >= v.in.score ) exportList.push( v.list[i].doc
let x = document.querySelector( '.export-limited' x.textContent = exportList.length; doSave(;
//--------------------------------------------------------- function doShowListEmpty ){ //--------------------------------------------------------- idList.innerHTML = '<div style="grid-area: 1/i/span 1/span all;"><b>No Query Results to Show! i.e. No <u>Show</u> boxes ticked!</b></div>'; }
// ---------------------------------------------------------- function doList() //--------------------------------------------------------- v.list = []; let showIdx = for ( let i=0; i<nrClaims; i++
) for ( let j=0; j<nrQueries; j++ let idx = i*nrQueries + j;
if ( v.in.q[idx].show && v.out[idx].length > 0 showIdx.push( idx ); for ( let k=0; k<v.out[idx].length; k++ //if ( v.list.length > 50 ) break; //v.out[idx][k].doc = v.out[idx][k].doc.replace( / /g, ).toUpperCase(; if ( !isInList( v.out[idx][k].doc, v.list v.list.push( { doc:v.out[idx][k].doc, id:v.out[idx][k].id, score:0 }
doShowListEmpty(); if ( showIdx.length == 0 ) return;
let colLength = showIdx.length; let rowLength = v.list.length;
v.list.sort( function( a, b ) { if ( a.doc < b.doc ) return -1; if ( a.doc > b.doc ) return 1; return 0;
for ( let r=0; r<rowLength; r++ for ( let c=0; c<colLength; c++) let doc = v.list[r].doc; let idx = showIdx[c]; if ( isInList( doc, v.out[idx] ) ) v.list[r].score++;
v.list.sort( function( a, b if ( a.score < b.score ) return 1; if ( a.score > b.score ) return -1; return 0;
let w = v.in.searchengine == 'patent' ? '130px' : '330px'; idList.style.gridTemplateColumns = '20px + w + ' 40px repeat( + colLength +
px )'; idList.style.gridTemplateRows = 'auto auto repeat( '+ rowLength + ', auto idList.innerHTML = '';
let h = '<div style="padding-left:5px; margin-bottom:10px; grid-area: 1/1/span 1/span all;">'; h += '<button class="export-lens">Export</button>'; h += '<span> using score >= </span>'; h += '<input id="idScore" type="number" value=0 style="width:45px; font-size:8pt;">'; h += '<span> ( <span class="export-limited" style="color:Red">X</span> ) max. 380 exported!</span>'; h += '</div>';
h += '<div class="list-hdr-document" style="grid-area: 2/1/span 1/span 1;"> </div>'; h += '<div class="list-hdr-document" style="padding-left:5px; grid-area: 2/2/span 1/span 1;">Documents</div>'; h += '<div class="list-hdr-document" style="grid-area: 2/3/span 1/span 1;">Score</div>'; for ( let i=0; i<colLength; i++ ) { h += '<div class="list-hdr-document" style="grid-row:2/span 1; grid column:'+(i+4)+'/span 1;">' let c = Math.round(showIdx[i]/nrQueries)+1; let q = (showIdx[i]%nrQueries)+1; h += c+'-'+q; h += '</div>'; for( let i=0; i<rowLength; i++
) let cls = (i%2==0) ? 'class="list-row-odd"' : 'class="list-row-even"'; h += '<div '+cls+' style="padding-left:5px; grid-row:'+(i+3)+'/span 1; grid column:1/span 1;">' h += '<span style="font-size:0.5rem;">' + (i+1) + '</span>'; h += '</div>'; h += '<div '+cls+' style="padding-left:5px; grid-row:'+(i+3)+'/span 1; grid column:2/span 1;">' let doc = v.list[i].doc if ( v.in.searchengine == 'patent' h += '<span class="list-doc" lens-id="' + v.list[i].id +'" style="font weight:500;">' + doc + '</span>'; else { //doc = doc.slice( 0, 100 h += '<span class="list-doc" lens-id="' + v.list[i].id +'" style="font weight:500; font-size:.6rem">' + doc + '</span>'; h h += '</div>'; h += '<div '+cls+' style="grid-row:'+(i+3)+'/span 1; grid-column:3/span 1; color:red; text-align:center;">' h += v.list[i].score; h += '</div>'; }
for( let r=0; r<rowLength; r++) for ( let c=0; c<colLength; c++ let doc = v.list[r].doc; let idx = showIdx[c]; let cls = (r%2==0) ? 'class="list-row-odd"' : 'class="list-row-even"'; h += '<div '+cls+' style="grid-row:'+(r+3)+'/span 1; grid column:'+(c+4)+'/span 1; text-align:center;">' if ( isInList( doc, v.out[idx] ) ) h += '&check;'; else h += ''; h += '</div>'; h
idList.innerHTML = h;
idScore = document.querySelector( '#idScore' idScore.addEventListener( 'change', updateScore idScore.value = v.in.score; updateScore(;
let x = document.querySelector( '.export-lens' x.addEventListener( 'click', function) if ( exportList.length > 0 ) doLensExport( exportList } );
x = document.querySelectorAll( '.list-doc' for ( let i=0; i<x.length; i++ ) { x[i].addEventListener( 'click', function) let lensId = this.getAttribute( 'lens-id' let url = url lens + v.in.searchengine +
if ( v.in.searchengine == 'patent' ) url += lensId; else url += 'article/' + lensId + '/main'; window.open( url
// GUI
//---------------------------------------------------------- function doJurisdiction() //--------------------------------------------------------- let isDisabled = v.in.searchengine !== 'patent'; idJurisdictionAll.disabled = isDisabled; idGroupFamily.disabled = isDisabled; document.querySelector( '.hdr-all' ).style.color = isDisabled ? 'grey' document.querySelector( '.hdr-group-family' ).style.color = isDisabled ? 'grey' isDisabled = v.in.jurisdiction.all ? true : false; idJurisdictionUS.disabled = isDisabled; idJurisdictionEP.disabled = isDisabled idJurisdictionGB.disabled = isDisabled; idJurisdictionWO.disabled = isDisabled; idJurisdictionAU.disabled = isDisabled; idWoCWO.disabled = isDisabled; idWoCAU.disabled = isDisabled; let clr = isDisabled ? 'grey' document.querySelector( '.hdr-us' ).style.color = clr; document.querySelector( '.hdr-ep' ).style.color = clr; document.querySelector( '.hdr-gb' ).style.color = clr; document.querySelector( '.hdr-wo' ).style.color = clr; document.querySelector( '.hdr-au' ).style.color = clr;
//--------------------------------------------------------- function setupTabs() //--------------------------------------------------------- let x = idClaims.querySelectorAll( 'div.item' ); for ( let i=x.length-1; x>=0; i-- ) x[i].parentNode.removeChild( x[i]
for ( let i=2; i<(nrClaims+2); i++ ) { // 20 claims for ( let j=0; j<nrQueries; j++ ) { // 10 queries let idx = nrQueries*(i-2) + j; let row = idx + 2; let bcClaimRow = '#99e6ff'; if ( j>0 ) bcClaimRow = (row%2==0) ? '#dddddd' '#f2f2f2';
let al = document.createElement( 'div' al.className = 'item'; if ( j == 0 ) al.innerHTML = 'Claim '+ (i-1); al.style.gridArea = row+'/1 / span 1/span 1'; al.style.backgroundColor = bcClaimRow; al.style.fontWeight= 'bold'; al.style.padding = '2px'; idClaims.appendChild( al let a2 = document.createElement( 'div' a2.className = 'item'; a2.setAttribute( 'claim', i-2 a2.setAttribute( 'query', j ); a2.innerHTML = '<button class="query-btn" index="' idx '">Send</button>'; a2.style.gridArea = row+'/2 / span 1/span 1'; a2.style.backgroundColor = bcClaimRow; a2.style.padding = '2px'; idClaims.appendChild( a2 let a3 = document.createElement( 'div' a3.className = 'item'; a3.innerHTML = 'Query '+ (j+1) +':'; a3.style.gridArea = row+'/3 / span 1/span 1'; a3.style.backgroundColor = bcClaimRow; a3.style.padding = '2px'; idClaims.appendChild( a3 let a4 = document.createElement( 'div' a4.className = 'item'; a4.setAttribute( 'claim', i-2 a4.setAttribute( 'query', j ); a4.innerHTML = '<input class="query" type="text" style="width:100%;">'; a4.style.gridArea = row+'/4 / span 1/span 1'; a4.style.backgroundColor = bcClaimRow; a4.style.padding = '2px'; idClaims.appendChild( a4 ); let cl = document.createElement( 'div' cl.className = 'item'; let h = '<center><form class="query-context" index="' + idx
+ h += '<input type="radio" name="radio" value="1" checked><label>1</label>'; h += '<input type="radio" name="radio" value="2"><label>2</label>'; h += '<input type="radio" name="radio" value="3"><label>3</label></form></center>'; cl.innerHTML = h; cl.setAttribute( 'claim', i-2 cl.setAttribute( 'query', j ); cl.style.gridArea = row+'/5 / span 1/span 1'; cl.style.backgroundColor = bcClaimRow; cl.style.padding = '2px'; idClaims.appendChild( cl
let s = document.createElement( 'div' s.className = 'item'; s.innerHTML = '<input class="query-stem" type="checkbox" style="width:100%;">'; s.setAttribute( 'claim', i-2 s.setAttribute( 'query', j ); s.style.gridArea = row+'/6 / span 1/span i'; s.style.backgroundColor = bcClaimRow; s.style.padding = '2px'; idClaims.appendChild( s
let r = document.createElement( 'div' r.className = 'item'; r.innerHTML = '<span class="query-results" style="width:100%;">O</span>'; r.setAttribute( 'claim', i-2 r.setAttribute( 'query', j ); r.setAttribute( 'index', idx r.style.gridArea = row+'/7 / span 1/span i'; r.style.backgroundColor = bcClaimRow; r.style.padding = '2px'; r.style.textAlign = 'center'; idClaims.appendChild( r );
let c = document.createElement( 'div' c.className = 'item'; c.innerHTML = '<input class="query-show" type="checkbox" style="width:100%;">'; r.setAttribute( 'claim', i-2 r.setAttribute( 'query', j ); c.style.gridArea = row+'/8 / span 1/span i'; c.style.backgroundColor = bcClaimRow; idClaims.appendChild( c
//------------------------------------------------------------- function permutate( list, idx, s, p ) { //------------------------------------------------------------- for ( let i=O; i<list[idx].length; i++) let txt = s; if ( idx>O ) txt += txt += list[idx][i]; if ( idx < list.length-1 w = permutate( list, idx+1, txt, p else p.push( txt
return p;
//---------------------------------------------------------- function parseGroup( txt ) { //--------------------------------------------------------- if ( txt == ) return txt; let grp = txt.match( /group: ?(\d+) ?(.*)/i if ( grp == null ) return txt; let proximityValue = parseInt( grp[l] if ( Number.isNaN( proximityValue ) ) return txt; let s = grp[2].replace( / {2,}/g, let x = s.split( /\) and \(/ig ); if ( x.length == 1 ) return txt; let permList =[]; for ( let i=0; i<x.length; i++ x[i] = x[i].replace( ) /[\(\)]/g, ).trim(); s = x[i].split( / or /ig permList.push( s txt = let p = permutate( permList, 0, , [] for ( let i=0; i<p.length; i++ ) if ( i>0 ) txt += ' OR txt + p[i] + + proximityValue; } return txt;
//--------------------------------------------------------- function formatDate( txt ) { //--------------------------------------------------------- let dt = new Date( txt ); let m = dt.getMonth() + 1; if ( m < 10 ) m = 0' + m; let day = dt.getDate(; if ( day < 10 ) day = '0' + day;
txt = dt.getFullYear() + + m + + day;
return txt;
//--------------------------------------------------------- function parseFullQuery( rec ) { //--------------------------------------------------------- rec.txt = rec.context = parseGroup( rec.context rec.query = parseGroup( rec.query
if ( rec.query != )
if ( rec.context == ) rec.txt = rec.query; else rec.txt = + rec.context + AND + rec.query +
let epd = v.in.priority.replace( /-/g,
let jurisdiction = []; if ( !v.in.jurisdiction.all if ( v.in.jurisdiction.us ) jurisdiction.push( 'US' if ( v.in.jurisdiction.ep ) jurisdiction.push( 'EP' if ( v.in.jurisdiction.gb ) jurisdiction.push( 'GB' if ( v.in.jurisdiction.wo && !v.in.woc.wo ) jurisdiction.push( 'WO' if ( v.in.jurisdiction.au && !v.in.woc.au ) jurisdiction.push( 'AU'
if ( v.in.searchengine == 'patent' )
let jTxt = ''; if ( jurisdiction.length > 0 )
let txt = ''; while ( jurisdiction.length > 0 ) if ( txt != '' ) txt += ' OR txt += jurisdiction.pop(; jTxt = 'jurisdiction:(' + txt
+ if ( epd != '' ) jTxt += ' AND pub date:[19000101 TO ' + epd + ']';
else if ( v.in.jurisdiction.all && epd != '' ) jTxt = 'pub date:[19000101 TO
+ epd +
let wTxt = if ( !v.in.jurisdiction.all && epd != '' && ( v.in.woc.wo || v.in.woc.au
) let txt = ''; if ( v.in.woc.wo && v.in.woc.au ) txt = '(WO OR AU)'; else if ( v.in.woc.wo ) txt = 'WO'; else txt += 'AU';
wTxt = 'jurisdiction:' + txt; wTxt += AND earliest priority date:[19000101 TO + epd + '] wTxt += AND pub date:[' + epd +' TO 20990101]';
if ( jTxt != '' && wTxt != '' ) rec.txt += ' AND ((' + jTxt + ') OR (' + wTxt
else if ( jTxt != '' ) rec.txt += ' AND '+ jTxt; else if ( wTxt != '' ) rec.txt += ' AND '+ wTxt;
else { // scholarly epd = v.in.priority; if ( epd != '' ) { rec.txt += ' AND date published:[1900-01-01 TO '+ formatDate( epd ) + ']
return rec;
//--------------------------------------------------------- function sendContext( n, context ) //--------------------------------------------------------- let rec = { txt:'', context:context, query:'', isStem:false, contextVal:n+1, isShow:false }; mode = 'context'; index = n; rec.isStem = document.querySelector( '#idContextStem' + (n+1) ).checked; idResults = document.querySelector( '.results.ctx-context' + (n+1)
rec = parseFullQuery( rec );
doLens( rec.txt, rec.isStem
/--------------------------------------------------------- function grabQuery~nput( idx ) { //--------------------------------------------------------- let rec = { txt:'', context:'', query:'', isStem:false, contextVal:1, isShow:false };
let x = document.querySelectorAll( 'input.query' rec.query = x[idx].value.trim(;
x = x[idx].parentNode.nextElementSibling; rec.contextVal = x.querySelector( 'input:checked' ).value;
rec.context = idContextl.value.trim(); if ( rec.contextVal == '2' ) rec.context = idContext2.value.trim(; else if ( rec.contextVal == '3' ) rec.context = idContext3.value.trim(;
x = x.nextElementSibling; rec.isStem = x.querySelector( '.query-stem' ).checked; x = x.nextElementSibling; idResults = x.querySelector( '.query-results' )
x = x.nextElementSibling; rec.isShow = x.querySelector( '.query-show' ).checked; rec = parseFullQuery( rec return rec; }
//-------------------------------------------------- function onQueryBtn() --------------------------------------------------- mode = 'query'; index = parseInt( this.getAttribute( 'index'
let rec = grabQueryInput( index
doLens( rec.txt, rec.isStem
--------------------------------------------------- function onInputChange() --------------------------------------------------- if ( this.nodeName == 'INPUT' && this.type == 'radio' let idx = parseInt( this.parentNode.getAttribute( 'index' v.out[idx] = []; let x = document.querySelectorAll( '.query-results' x[idx].style.color = ''; x[idx].textContent = '0';
if ( idWoCWO.checked ) idJurisdictionWO.checked = true; if ( idWoCAU.checked ) idJurisdictionAU.checked = true;
doJurisdiction(; doSave(;
idClearContext.addEventListener( 'click', function()
let isOk = confirm( 'Clear & Reset ALL CONTEXT statements & settings ?' if ( isOk == false ) return;
if ( !event.ctrlKey )
idContextl.value = idContext2.value = idContext3.value =
idContextSteml.checked = false; idContextStem2.checked = false; idContextStem3.checked = false; let x = document.querySelector( '.ctx-contextl.results' ); x.textContent = '0'; x.style.color = x = document.querySelector( '.ctx-context2.results' ); x.textContent = '0'; x.style.color = ''; x = document.querySelector( '.ctx-context3.results' ); x.textContent = '0'; x.style.color
v.in.context[0].results = 0; v.in.context[1].results = 0; v.in.context[2].results = 0;
for ( let i=0; i<200; i++ ) v.out[i] =
doSave(;
idClearClaims.addEventListener( 'click', function()
let isOk = confirm( 'Clear & Reset ALL QUERY statements & settings ?' if ( isOk == false ) return;
if ( !event.ctrlKey ) let x = document.querySelectorAll( 'input.query' for ( let i=0; i<200; i++ ) x[i].value = x = document.querySelectorAll( 'form.query-context' for ( let i=0; i<200; i++ ) x[i].reset; x = document.querySelectorAll( 'input.query-stem' for ( let i=0; i<200; i++ ) x[i].checked = false; x = document.querySelectorAll( '.query-results' ); for ( let i=0; i<200; i++ ) x[i].textContent = '0', x[i].style.color = x = document.querySelectorAll( 'input.query-show' ); for ( let i=0; i<200; i++ ) x[i].checked = false; for ( let i=0; i<200; i++ ) v.out[i] = doSave(;
,// idThesaurus.addEventListener( 'click', function() ,// window.open( url thesaurus
,// idLens.addEventListener( 'click', function() -// let url = url lens + 'search/' + v.in.searchengine + '/structured'; window.open( url
,// idLensSyntax.addEventListener( 'click', function() -// window.open( url lens syntax
,// id~con.addEventListener( 'click', function() ,// if ( idTabStatements.classList.contains( 'active' document.querySelector( '.main-tab-body' ).scrollTop = 0; else if ( idTabList.classList.contains( 'active' ) )
document.querySelector( '.main-tab-body' ).scrollTop = 0; else if ( idTabSTS.classList.contains( 'active' idSTS.scrollTop = 0 else idLog.scrollTop = 0
//--------------------------------------------------------- function doChangeSearchEngine( previous ) { //--------------------------------------------------------- let engine = previous ? 'Patent' 'Scholar'; let isOk = confirm( 'Changing to '+ engine + ' will clear all results! Continue ?' if ( isOk == false ) { idSearchPatent.checked = ( previous == 0 idSearchScholar.checked = ( previous != 0
return;
let x = document.querySelector( '.ctx-contextl.results' ); x.textContent = '0'; x.style.color = x = document.querySelector( '.ctx-context2.results' ); x.textContent = '0'; x.style.color = ''; x = document.querySelector( '.ctx-context3.results' ); x.textContent = '0'; x.style.color
v.in.context[0].results = 0; v.in.context[1].results = 0; v.in.context[2].results = 0; x = document.querySelectorAll( '.query-results' for ( let i=0; i<200; i++ ) { x[i].textContent = '0'; x[i].style.color = v.out[i] = doShowListEmpty(); doJurisdiction(; doSave(; }
//--------------------------------------------------------- function init () //--------------------------------------------------------- idVersion.textContent = chrome.runtime.getManifest().version;
idSave.addEventListener( 'click', doSaveFile ); idLoad.addEventListener( 'click', function() { idLoadFile.click(; }
idSendContextl.addEventListener( 'click', (=>{ sendContext( 0, idContextl.value.trim() ); } ); idSendContext2.addEventListener( 'click', (=>{ sendContext( l, idContext2.value.trim() ); } ); idSendContext3.addEventListener( 'click', (=>{ sendContext( 2, idContext3.value.trim() ); } );
idSearchPatent.addEventListener( 'click', ()=> { doChangeSearchEngine( 1 ); idSearchScholar.addEventListener( 'click', (=> { doChangeSearchEngine( 0 );
setupTabs(); let x = document.querySelectorAll( '.query-btn' for ( let i=0; i<x.length; i++ ) x[i].addEventListener( 'click', onQueryBtn
let ti = document.querySelectorAll( '.tabtem' for ( let i=0; i<ti.length; i++ ) { ti[i].addEventListener( 'click', function() for ( let j=0; j<ti.length; j++ ) ti[j].classList.remove( 'active' this.classList.add( 'active' );
document.querySelector( '.statements-grid-container' ).style.display = 'none'; idList.style.display = 'none'; document.querySelector( '.sis-grid-container' ).style.display = 'none'; document.querySelector( '.log-grid-container' ).style.display = 'none';
if ( idTabStatements.classList.contains( 'active' document.querySelector( '.statements-grid container' ).style.display = ''; else if ( idTabList.classList.contains( 'active' idList.style.display = '
else if ( idTabSTS.classList.contains( 'active' document.querySelector( '.sis-grid-container' ).style.display = else document.querySelector( '.log-grid-container' ).style.display =
if ( idTabList.classList.contains( 'active' ) ) doList(; else if ( idTabSTS.classList.contains( 'active' ) ) doSS();
x = document.querySelectorAll( '.main-hdr input, #idContext input, #idClaims input' for ( let i=0; i<x.length; i++ ) { x[i].addEventListener( 'keyup', on~nputChange )
x[i].addEventListener( 'change', on~nputChange )
x[i].addEventListener( 'click', on~nputChange )
doLoad(;
init();
An alternate example of computer implemented instructions for enabling a computer system, in accordance with the invention, follows below:
// VAR.JS Patent Search Tool v11 09 Aug 2021 ,//
const url api = 'https://www.lens.org/lens/api/search/patent'; const url lens = 'https://www.lens.org/lens/'; const url-lens-init = url-lens + 'search/patent/structured'; const url_lenssyntax = 'https://support.lens.org/help-resources/basic-help/search-syntax/';
const url_google patents = 'https://patents.google.com/'; const url_googlexhr = url google patents + 'xhr/query?url='; const url_google patents syntax = 'https://support.google.com/faqs/answer/7049475';
const url-thesaurus power = 'https://www.powerthesaurus.org/' const url thesaurus_onelook = 'https://onelook.com/';
const context default = { txt:' , size: [ 0, 0, 0, 0] };
const results default = results: 0, size:0, docs:[], list:[] }; var query default = txt:', isUpdated:false, context:0, eng:[ results_default, results_default, results_default, results default };
const ENGGOOGLEPATENT = 0; const ENGGOOGLESCHOLAR = 1; const ENGLENSPATENT = 2; const ENG_LENSSCHOLAR = 3;
const DEFAULTPROXIMITY = 10;
var v = { name: len: 4, context: [], query: [], epd: '', synInput: syn: [], maxResults: 1000, isGroupFamilies: true, useEPD: false, useStem: true, curTab: 'Input', useLimit: false, limit: 'US', isGoogle: true, isScholar: false, engIdx: ENGGOOGLE PATENT, log: '', version: 1, crc: 'oK'
for ( let i=0; i<3; i++ ) v.context[i] = context_default; for ( let i=0; i<v.len; i++ ) v.query.push( querydefault ); var contextBackgroundColor = [ '#eeeeee', '#ff7396', '#00b32d', '#4ca6ff' ]; var contextInput, contextSize; var queryInput, queryOptions, queryResult, querySize; var mode = 'context'; var whereTwister; var log = ''; var resultsFrom = 0; var resultsMax = 1000; var resultsSize = 0; var lens args = ''; var google args; var atGooglePage = 0; var totalGooglePages = 0; var googleSize; var curIdx = 0; var idSynTextArea; var isRunAll = false; var limitList = var resultsList; var tabs; lib.mirrorIDs(; idVersion.innerHTML = lib.manifest.version;
// INDEX.JS Patent Search Tool v11 09 Aug 2021 ,//
//------------------------------------------------------------- function onSearchDone( totalResults ) { //------------------------------------------------------------- stopWait(); log += '<span style="color:blue;"> [ ' totalResults + ]</span>'; let ref = 'https://patents.google.com/?';
if ( v.engIdx == ENGGOOGLEPATENT ) ref += google args; else if ( v.engIdx == ENGGOOGLESCHOLAR ) ref += google args; else if ( v.engIdx == ENGLENSPATENT ) ref = 'https://www.lens.org/lens/search/patent/structured?' + lens args; else if ( v.engIdx == ENGLENS_SCHOLAR ) ref = 'https://www.lens.org/lens/search/scholar/list?' + lensargs; ref = ref.replace( /\"/g, '%22' ref = ref.replace( /%3D/g, ref = ref.replace( /%26/g, '&' let oc = 'gotoSearch( ' + ref +
8 61 8 log += '<button class="log-click" ref="' + ref + '" style="margin-left:1Opx;"> &# ; </button>'; log =</div>'; dumpLog();
if ( mode == 'query' )
v.query[curIdx].eng[v.engIdx].isUpdated = true; drawResultsButton();
doSave(;
if ( !isRunAll ) return;
curIdx++; while ( curIdx < v.len && v.query[curIdx].txt.trim() == '' ) curIdx++; if ( curIdx == v.len curIdx--; isRunAll = false; } else doQueryRun( 'all'
//------------------------------------------------------------- function doClearStatement() //------------------------------------------------------------- let idx = parseInt( this.getAttribute( 'idx' let s = '.qaim' + idx; v.q[idx] = lib.clone( query default document.querySelector( s+'.input' ).value = document.querySelector( s+'.size' ).innerHTML = document.querySelector( s+'.results' ).innerHTML =
' document.querySelector( s+'.syntax' ).innerHTML =
' document.querySelector( s+'.syntax' ).name = doSave(;
//------------------------------------------------------------- function logRun( x ) { //------------------------------------------------------------- let engine = v.isGoogle ? 'Google' : 'Lens'; let clr = v.isGoogle ? 'green' : '#OdcafO'; let typ = [ 'Patents', 'Scholar', 'Patents', 'Scholarly' ][v.engIdx]; let d = lib.date( '', 'MMM' ) + ' @ ' + lib.time(; log = '<div>'; log += '<span>' + d + '</span>' + '<br>'; log += '<span style="color:' + clr + '; margin-left:10px;">' + engine + ' ' + typ
+ '</span>'; log += '<span>: ' + x.q + '<span style="width:30px; padding-right:20px;"> </span>' + x.p + '</span>'; doSave(;
//------------------------------------------------------------- function doContextRun() //------------------------------------------------------------- isRunAll = false; curIdx = parseInt( this.getAttribute( 'idx' mode = '';
limitList = if ( v.useLimit ) limitList = v.limit.split( '
doSave(;
contextSize[curIdx].textContent =
v.context[curIdx].size[v.engIdx] = 0; let context = v.context[curIdx].txt.trim(); if ( context == ') contextSize[curIdx].textContent = '0'; return; } mode = 'context'; let x = v.isGoogle ? buildGoogleQuery( context, '' ) : buildLensQuery( context, '' logRun( x );
whereTwister = contextSize[curIdx]; showWait(; doSave(;
if ( v.isGoogle ) doGoogleDownload( x )
else doLensExport( x )
// - - - - - - - - - - - - - ----- - - - - - - - - - - - - - function doQueryRun( arg ) {
if ( arg != 'all' ) { isRunAll = false; curIdx = parseInt( this.getAttribute( 'idx'
stopWait();
whereTwister = querySize[curIdx]; whereTwister.textContent =
mode = '';
v.maxResults = parseInt( idMaxResults.value
limitList = if ( v.useLimit ) limitList = v.limit.split(
' doSave(;
queryResult[curIdx].textContent = '0';
v.query[curIdx].eng[v.engIdx].size = 0; curContext = v.query[curIdx].context; let context = curContext == 0 ? ' : v.context[curContext-1].txt.trim(; let query = v.query[curIdx].txt.trim(; if ( context == '' && query == '' )
whereTwister.textContent = '0'; return; } mode = 'query'; let x = v.isGoogle ? buildGoogleQuery( context, query ) buildLensQuery( context, query ); logRun( x
showWait(; doSave(;
if ( v.isGoogle ) doGoogleDownload( x else doLensExport( x
------------------------------------------------------ function doRunAll() { ------------------------------------------------------ isRunAll = true; curIdx = 0; doQueryRun( 'all'
------------------------------------------------------ function setQueryContext() ------------------------------------------------------ let idx = parseInt( this.getAttribute( 'idx' let value = parseInt( this.selectedIndex );
queryOptions[idx].parentNode.style.backgroundColor = contextBackgroundColor[value]; v.query[idx].context = value; doSave(;
------------------------------------------------------ function setup() ------------------------------------------------------ idEPD.removeAttribute( 'disabled' )
v.useEPD = idUseEPD.checked; if ( !v.useEPD ) idEPD.setAttribute( 'disabled', '' )
idSearchContext.innerHTML = ''; let h = '<table style="width:100%; padding-top:10px;">'; h += '<tr style="font-weight:bold; font-variant:small-caps; text-align:center;"><th style="width:20px;"> </th><th style="padding-left:30px; text-align:left;">Search Context:</th><th style="width:30px;"> </th><th style="width:50px;"> </th><th style="width:60px;">Size</th></tr>'; for ( let i=0; i<3; i++ ) { h += '<tr class="context-row" idx="'+i+'" style="background-color:'
+ contextBackgroundColor[i+1] + '; text-align:center;">'; h += '<td style="text-align:right; padding-left:2px; font-weight:500;">'
+ String.fromCharCode(65+i) + ':</td>'; h += '<td><input class="context-input" type="text" idx="'+i+''" style="padding left:5px; font-size:10pt; width:99%;"></td>'; h += '<td class="context-trash" idx="'+i+'" style="text-align:center;"><i class="fas fa-eraser fa-sm"></i></td>'; h += '<td><button class="lib-gray context-run" idx="'+i+'">Run</button></td>'; h += '<td class="context-size" idx="'+i+'">0</td>'; h += '</tr>';
h += '</table>'; idSearchContext.innerHTML = h;
idSearchQueries.innerHTML = ''; h = '<table style="width:100%; padding-top:10px;">'; h += '<tr style="font-weight:bold; font-variant:small-caps; text-align:center;"><th style="width:20px;"> </th><th style="padding-left:30px;text-align:left;">Search Queries: '; h += '<span style="padding-left:20px; font-weight:500; color:#fd7el4;">Size:&nbsp;</span><input id="idLen" type="number" size="2" value="3" style="width:50px; margin:2px;">'; h += '<button id="idCompare" class="lib-yellow" style="margin-left:20px;"><i class="fa fa-eye" style="font-size:.7rem"></i> Compare Results</button>'; h += '</th>'; h += '<th style="width:20px;"> </th><th style="width:50px;"><button id="idRunAll" class="lib-gray" style="font-size:.7rem;">Run All</button></th><th style="width:60px;">Context</th><th style="width:60px;">Results</th><th style="width:60px;">Size</th></tr>';
for ( let i=0; i<v.len; i++ )
let bc = (i%2==0) ? '#dddddd' : '#eeeeee'; h += '<tr class="query-row" idx="' + i + '" style="background-color:' + bc
+ text-align:center;">'; h += '<td style="text-align:right; padding-left:2px; font weight:500;">'+(i+1)+':</td>'; h += '<td><input class="query-input" type="text" idx="'+i+'" style="padding left:5px; font-size:10pt; width:99%;"></td>'; h += '<td class="query-trash" idx="'+i+''"><i class="fas fa-eraser fa sm"></i></td>'; h += '<td><button class="lib-gray query-run" idx="'+i+'" style="font size:.7rem;">Run</button></td>'; h += '<td>'; h += '<select class="query-select" idx="'+i+'">'; h += '<option name="query-option" value="0">None</option>'; h += '<option name="query-option" value="1">A</option>'; h += '<option name="query-option" value="2">B</option>'; h += '<option name="query-option" value="3">C</option>'; h += '</select>'; h += '</td>'; h += '<td class="query-results" style="color:#d90036; font-weight:500;">0</td>'; h += r<td class="query-size" style="padding-left:15px; color:#2626ff; font weight:500;">0</td>'; h += '</tr>';
h += '</table>'; idSearchQueries.innerHTML = h;
contextnput = lib.query( '.context-input' contextSize = lib.query( '.context-size' )
query~nput = lib.query( '.query-input' ); queryOptions = lib.query( '.query-select' queryOptions.onChange( setQueryContext );
queryResult = lib.query( '.query-results' querySize = lib.query( '.query-size' idLen.value = v.len; idLen.addEventListener( 'change', function() v.len = parseInt( idLen.value ); if ( v.len < 2 ) v.len = idLen.value = 2; let gap = v.query[v.engIdx].length - v.len; while ( gap > 0
) v.query[v.engIdx].push( query default ), gap--;
doSave(); setup();
idCompare.addEventListener( 'click', doCompareResults idRunAll.addEventListener( 'click', doRunAll );
lib.query( '.context-input' ).onKey( function( let idx = parseInt( this.getAttribute( 'idx' v.context[idx].txt = this.value.trim(; doSave();
lib.query( 'button.context-run' ).click( doContextRun
lib.query( 'td.context-trash' ).click( function() let idx = parseInt( this.getAttribute( 'idx' contextInput[idx].value = v.context[idx].txt = doSave();
lib.query( 'td.context-trash' ).rClick( function() event.preventDefault(); let idx = parseInt( this.getAttribute( 'idx' contextSize[idx].textContent = v.context[idx].size[v.engIdx] = '0'; doSave();
lib.query( '.query-input' ).onKey( function() let idx = parseInt( this.getAttribute( 'idx' v.query[idx].txt = this.value.trim(); doSave();
lib.query( 'button.query-run' ).click( doQueryRun
lib.query( 'td.query-trash' ).click( function() let idx = parseInt( this.getAttribute( 'idx' queryInput[idx].value = v.query[idx].txt = doSave();
lib.query( 'td.query-trash' ).rClick( function() event.preventDefault(); let idx = parseInt( this.getAttribute( 'idx' querySize[idx].textContent = v.query[idx].eng[v.engIdx].size = '0'; queryResult[idx].textContent = v.query[idx].eng[v.engIdx].results = '0'; doSave();
for ( let i=0; i<3; i++) contextInput[i].value = v.context[i].txt; contextSize[i].textContent = v.context[i].size[v.engIdx];
for ( let i=0; i<v.len; i++) queryInput[i].value = v.query[i].txt; queryResult[i].textContent = v.query[i].eng[v.engIdx].results; querySize[i].textContent = v.query[i].eng[v.engIdx].size; let ctx = v.query[i].context; queryOptions[i].parentNode.style.backgroundColor = contextBackgroundColor[ctx]; queryOptions[i].selectedIndex = ctx; idEPD.value = v.epd; doSave(; doSynonyms(; drawResultsU; updateStatsU;
// ----------------------------------------------------- function doClearResults( f ) { ------------------------------------------------------ idOutput.innerHTML = ''; idTabOutput.clickU; for ( let i=0; i<v.len; i++) v.q[i].size = 0; v.q[i].list = []; document.querySelector( '.qaim'+i+'.results' ).innerHTML = document.querySelector( '.qaim'+i+'.size' ).innerHTML =
doSaveU;
------------------------------------------------------ function doReset( f ) { ------------------------------------------------------ idUseContext.checked = true; idSynonyms.checked = true; idStem.checked = true; idFamily.checked = true; idUseEPD.checked = false; idEPD.value = ''; idMaxResults.value = 1000; idOutput.innerHTML = idTabOutput.clickU; let prox = f ? 8 : 20; cur~dx = 0; for ( let i=0; i<v.len; i++){ v.q[i].q = v.q[i].qName = v.q[i].prox = prox; v.q[i].proxChecked = true; v.q[i].size = 0; v.q[i].list = []; document.querySelector( '.qaim'+i+'.input' ).value = document.querySelector( '.qaim'+i+'.prox' ).value = prox; document.querySelector( '.qaim'+i+'.check' ).checked = true; document.querySelector( '.qaim'+i+'.results' ).innerHTML = document.querySelector( '.qaim'+i+'.size' ).innerHTML = document.querySelector( '.qaim'+i+'.syntax' ).innerHTML = document.querySelector( '.qaim'+i+'.syntax' ).name =
doSaveU;
// ----------------------------------------------------- function doClearStatements( f ) { ------------------------------------------------------ cur~dx = 0; for ( let i=0; i<v.len; i++){ v.q[i].q = v.q[i].qName = document.querySelector( '.qaim'+i+'.input' ).value = document.querySelector( '.qaim'+i+'.syntax' ).innerHTML = document.querySelector( '.qaim'+i+'.syntax' ).name =
doSaveU;
idUseEPD.addEventListener( 'change', function() // - - - - - - - - - - - - - - - - - - - - - - - - - v.useEPD = idUseEPD.checked; idEPD.disabled = !v.useEPD; doSave(; } ); idEPD.addEventListener( 'change', function() v.epd = idEPD.value; doSave(;
}-); idStem.addEventListener( 'click', function()
v.useStem = !v.useStem; doSave(; updateStats(;
}-); idFamily.addEventListener( 'click', function()
v.isGroupFamilies = !v.isGroupFamilies; doSave(; updateStatsU;
}-); idMaxResults.addEventListener( 'change', function()
v.maxResults = parseInt( idMaxResults.value doSaveU;
}-); idLimit.addEventListener( 'keyup', function()
v.limit = idLimit.value; doSaveU;
}-); idUseLimit.addEventListener( 'change', function()
v.useLimit = idUseLimit.checked; idLimit.disabled = !idUseLimit.checked doSaveU;
}; ----------------------------------------------- function setEngine() ------------------------------------------------------ if ( v.isGoogle )
v.engIdx = v.isScholar ? ENG GOOGLE SCHOLAR : ENGGOOGLEPATENT; else v.engIdx = v.isScholar ? ENGLENSSCHOLAR : ENGLENSPATENT; drawResultsU;
------------------------------------------------------ function setType () ------------------------------------------------------ idType.selectedIndex = v.isScholar ? 1 0;
} idType.addEventListener( 'change', function( {
v.isScholar = idType.selectedIndex; setEngine(); doSave(; setup()
I );
idName.addEventListener( change', function()
v.name = idName.value.trim(); doSave(;
//------------------------------------------------------------- function drawResultsButton() //------------------------------------------------------------- let c = v.query[curIdx].eng[v.engIdx].isUpdated ? 'lib-yellow' 'lib-lightgray'; if ( idCompare ) idCompare.className = c; if ( idCompare2 ) idCompare2.className = c;
/------------------------------------------------------------- function drawEngineButton() //------------------------------------------------------------- setEngine(); idEngine.className = v.isGoogle ? 'lib-green' : 'lib-cyan'; idEngineText.textContent = v.isGoogle ? 'Google' : 'Lens';
idStem.style.display = v.isGoogle ? 'none' : ''; //idFamily.style.display = v.isGoogle ? 'none'
//------------------------------------------------------------- function updateStats() //-------------------------------------------------------------
idStem.className = v.useStem ? 'lib-green' : 'lib-lightgray'; idFamily.className = v.isGroupFamilies ? 'lib-green' : 'lib-lightgray';
drawEngineButton(; drawResultsButton(; setType(;
//------------------------------------------------------------- function toggleEngine() //------------------------------------------------------------- v.isGoogle = !v.isGoogle; drawEngineButton(; doSaveU; setup();
idEngine.addEventListener( 'click', toggleEngine
idEngine.addEventListener( 'contextmenu', ()=> {
if ( event.ctrlKey && event.altKey ) lib.clearSave(; else if ( v.isGoogle ) { if ( event.altKey ) window.open( url google patents syntax else window.open( url google patents + 'advanced' } else if ( event.altKey ) window.open( url lens syntax else window.open( url lens init
idClearLog.addEventListener( 'click', function() v.log = idLog.innerHTML = doSaveU; } ); idLoadFile.addEventListener( 'click', function() { idLoadFileInput.click(; } idSaveFile.addEventListener( 'click', doSaveFile idIcon.addEventListener( 'click', ()=> { document.documentElement.scrollTop = 0; let bcr = document.body.firstElementChild.getBoundingClientRect(; //idTabsTop.style.marginTop = (bcr.height+5) + 'px'; setupTabsU; doLoadU;
// SYN.JS Patent Search Tool v11 09 Aug 2021 ,//
//------------------------------------------------------------- function addTo( w, list, f ) { //------------------------------------------------------------- if ( f || list.indexOf( w ) == -1 ) list.push( w
return list;
//------------------------------------------------------------- function fixSyn( w, list ) { //------------------------------------------------------------- let txt = '
if ( w[0] == '!' w = w.slice( 1 let idx = findSynonym( w if ( idx = -1 )
for ( let j=0; j<v.syn[idx].list.length; j++) if ( j>0 ) txt += ' OR '; txt += v.syn[idx].list[j]; if ( list ) list = addTo( v.syn[idx].list[j], list
else
if (list list addTa( w, list
else txt =W; if ( list ) list = addTo( w, list
if ( list ) return lisr; else return rxr;
------------------------------------------------------ functian ridySynanyms( e)[ ------------------------------------------------------ e.prevenrDefaulr() ler rxr = 'w far ( ler i=0; i<v.syn.lengrh; i++ rxr -- = v.syn[i].name +- '\nl far (le j=i; j<v.syn[i].lisT.lengrh; lt )
if ( j> )xlist; rxr -v= v.syn[i].lisr[j];
r tx t ; \n
} idSynTextArea.textContent = txt;
// ------------------------------------------------------------- function findSynonym( name ) { //------------------------------------------------------------- for ( let i=0; i<v.syn.length; i++ ) { if ( v.syn[i].name == name ) return i; }
for ( let i=0; i<v.syn.length; i++) if ( v.syn[i].list.indexOf( name ) != -1 ) return i; }
return -1;
//------------------------------------------------------------- function parseSynonyms () //------------------------------------------------------------- v.syn = []; let lines = v.syn~nput.split( '\n'
let w = ''; let list = for ( let i=0; i<lines.length; i++ )
let txt = lines[i].trim(; if ( txt == '' || txt[0] == '#' ) continue;
let terms = txt.split( for ( let j=0; j<terms.length; j++ let s = terms[j].trim(; if ( s == '' ) continue; if ( s == '=' && w == '' ) break; else if ( w == '' ) w = s; else if ( s != '=' ) list.push( s
if ( w != '' & list.length > 0 list.sort(; list.unshift( w let x = { name:w, list:list }; let idx = findSynonym( w ); if ( idx == -1 ) v.syn.push( x else v.syn[idx] = x; w sr='; list = []
doSave(; doSynonyms(;
//------------------------------------------------------------- function doSynonyms () //------------------------------------------------------------- idSynonyms.innerHTML = ''; idSynTextArea = document.createElement( 'textarea' idSynTextArea.style.height = '250px'; idSynTextArea.style.width = '100%'; idSynTextArea.textContent = v.syn~nput; idSynonyms.appendChild( idSynTextArea ); idSynTextArea.addEventListener( 'keyup', function() v.synnput = this.value; doSave(); } ); let d = document.createElement( 'div' let h = '<table><tr>'; h += '<td style="padding-left:10px;"><button id="idParseSynonyms" class="lib red">Parse</button></td>'; h += '<td style="padding-left:10px;">Number Synonyms: </td>'; h += '<td><span style="font-weight:bold">' + v.syn.length + '</span></td>'; h += '<td style="padding-left:10px;"><button id="idThesaurusPower" class="lib blue">&#8635 Power Thesaurus</button></td>'; h += '<td style="padding-left:10px;"><button id="idThesaurusOneLook" class="lib teal">&#8635 OneLook Thesaurus</button></td>'; h += '</tr></table>'; d.innerHTML = h; idSynonyms.appendChild( d document.querySelector( '#idParseSynonyms' ).addEventListener( 'click', parseSynonyms document.querySelector( '#idParseSynonyms' ).addEventListener( 'contextmenu', tidySynonyms ); document.querySelector( '#idThesaurusPower' ).addEventListener( 'click', function() window.open( url thesaurus power } ); document.querySelector( '#idThesaurusOneLook' ).addEventListener( 'click', function() window.open( url thesaurusonelook } ); h = '<b>Entires:</b><br>'; h += '<table style="padding-left:50px; min-width:50%;">'; for ( let i=0; i<v.syn.length; i++ ) { let bc = i%2==0 ? '#bfcfff' : '#99b3ff'; h += '<tr style="font-weight:500; background-color:' + bc +' h += '<td style="padding-left:5px;">' + (i+1) + '</td>'; h += '<td style="padding-left:5px;"><button class="lib-gray syn-item">' v.syn[i].name + '</button></td>'; let txt = ''; for ( let j=1; j<v.syn[i].list.length; j++ ) txt += '+ v.syn[i].list[j]; h += '<td style="padding-left:5px;">' + txt.trim() + '</td>'; h += '</tr>'; } h += '</table>'; d = document.createElement( 'div' d.style.marginLeft = '50px'; d.innerHTML = h; idSynonyms.appendChild( d lib.query( '.syn-item' ).click( function() window.open( url thesauruspower + this.textContent + '/synonyms' } );; lib.query( '.syn-item' ).rClick( function( event.preventDefault(); window.open( url thesaurusonelook + 'thesaurus/?s=' + this.textContent
// PARSE.JS Patent Search Tool v11 09 Aug 2021 ,//
//------------------------------------------------------------- function parseOR( txt, list ) //------------------------------------------------------------- if ( txt.indexOf( ', ' ) != -1 ) { // a,b,c = (a OR b OR c) let a = txt.split( ',' txt = for ( let i=0; i<a.length; i++ if ( i>0 ) txt += ' OR txt += fixSyn( a[i] ); // handle la if ( list ) list = fixSyn( a[i], list ); // add to list
else { // just add single word if ( list ) list = fixSyn( txt, list ); // handle !txt txt = fixSyn( txt
if ( list ) return list; else return txt; }
// ------------------------------------------------------------- function permutate( list, _txt, idx, w ) { //------------------------------------------------------------- for ( let i=0; i<list[idx].length; i++
) let txt = txt; if ( idx>0 ) txt += txt += list[idx][i]; if ( idx < list.length-1 ) w = permutate( list, txt, idx+1, w else w.push( txt
return w;
//------------------------------------------------------------- function parseProximityList( w ) { //------------------------------------------------------------- let list = []; for ( let i=0; i<w.length; i++ )
if ( w[i] == ' ) continue; let x = parseOR( w[i], [] list.push( x
list = permutate( list, '', 0, []
return list;
//------------------------------------------------------------- function isNext( txt, idx, name ) { //------------------------------------------------------------- txt = txt.slice( idx ); let len = name.length; if ( txt.length < len ) return 0; if ( txt.slice( 0, len ).toLowerCase() == name ) return 1;
return 0;
//------------------------------------------------------------- function parseQuery( txt ) //------------------------------------------------------------- if ( txt == ' ) return ''; if ( txt[0] == '=' ) // use exact statement after = return { exact: txt.slice( 1 ).trim() ;
let useProx = false; let proximity = -1; let op = 'AND'; let field = ; // fulltext let q = let w = let curW = let isExact = false;
for ( let i=0; i<txt.length; i++ )
if ( txt[i] == ' ' ) { // end of word if ( isExact ) curW += else if ( curW != ' )
w.push( curW ), curW = '
//------------- else if ( txt[i] == ' ' ) { "" if ( isExact )
w.push( curW+'\"' curW = ''; isExact = false; if ( i == txt.length-1 q.push( { op:op, w:w, p:proximity, f:field } ), w = useProx = false, proximity = -1; else if ( curW != '' ) w.push( curW isExact = true; curW =
/------------- else if ( txt[i] == '@' ) { // field if ( curW != '' ) w.push( curW if ( w.length > 0 ) q.push( { op:op, w:w, p:proximity, f:field } ), w =
[]; if ( curW != op = 'AND', curW = useProx = false, proximity = -1;
field= if ( isNext( txt, ++i, 'cpc' field = !v.isGoogle ? 'classification cpc' 'cpc', i+=3; else if ( isNext( txt, i, 'ipc' ) ) field = !v.isGoogle ? 'classification ipcr' 'cpc', i+=3; else if ( isNext( txt, i, 'pn' ) )
field = !v.isGoogle ? 'pub num' '', i+=2; else if ( isNext( txt, i, 'ap' ) )
field = !v.isGoogle ? 'applicant' 'assignee', i+=2; else if ( isNext( txt, i, 'a' ) )
field = !v.isGoogle ? 'abstract' 'ab', i+=1l; else if ( isNext( txt, i, 'c' ) )
field = !v.isGoogle ? 'claim' : 'cl', i+=1l; else if ( isNext( txt, i, 'i' ) )
field = !v.isGoogle ? 'inventor' : 'inventor', i+=1l; else if ( isNext( txt, i, 't' ) )
field = !v.isGoogle ? 'title' 'ti', i+=1;
/------------- else if ( txt[i] == '&' txt[i] == ' ' ) { //AND OR if ( curW != '' ) w.push( curW ), curW = ''; q.push( { op:op, w:w, p:proximity, f:field } field = w = []; op = (txt[i] == '&') ? 'AND' : 'OR'; useProx = false, proximity = -1;
/------------- else if ( txt[i] == '~' ) { // Proximity if ( curW != '' ) w.push( curW ); if ( w.length > 0 ) q.push( { op:op, w:w, p:proximity, f:field } ), w =
[]; if ( curW != '' ) op = 'AND', curW = '', field= proximity = DEFAULT_PROXTMTTY; let s = while ( txt[i+1]>='0' && txt[i+1]<='9' && i+1<txt.lengrth-1 ) S txt[++i]; if ( s != '' ) proximity = parsent( s useProx = true;
/------------- else { curW += txt[i]; if ( i == txt.length-1 )
w.push( curW ), curW = q.push( { op:op, w:w, p:proximity, f:field } ), w = useProx = false, proximity = -1;
} if ( !!v.isGoogle ) return q;
let s = '('; for ( let i=0; i<q.length; i++) if (i > 0) s += ') ' + q[i].op
+ if ( q[i].f == 'classification cpc' ) s s += doLensField( q, i ); if ( q[i].f == 'classification cpc' s += ') OR '+ doLensField( q, i, 'classification_ipcr' )+
s ))
return s;
// GOOGLE.JS Patent Search Tool v11 09 Aug 2021 ,//
//------------------------------------------------------------- function onGoogleOk( r ) { //------------------------------------------------------------- stopWait(); let qeng = v.query[cur~dx].eng[v.eng~dx]; let s = r.responseText != ' ? JSON.parse( r.responseText
) if ( s == '' s.results.user error ) { whereTwister.textContent = '0'; if ( mode == 'query' ) { v.context[cur~dx].size[v.eng~dx] = 0; } else if ( mode == 'query' qeng.size = 0; qeng.results = 0; qeng.docs =
let err = 'Error: '+ (s== '') ? 'Blank Response!' : s.status; log += '<span style="color:red;"> { Error: '+ err +' 1</span>'; log ='</div> dumpLog(); lib.modal.alert( err, { ms: 1000, noOk:true }
return;
let totalResults = s.results.total num results;
if ( mode == 'context' ) { v.context[curdx].size[v.eng~dx] = totalResults; whereTwister.textContent = totalResults; onSearchDone( totalResults
return;
let len = s.results.cluster[0].result ? s.results.cluster[0].result.length: 0;
if ( resultsFrom == 0 ) { totalGooglePages = s.results.totalnum pages; whereTwister.textContent = qeng.size = totalResults; whereTwister = queryResult[cur~dx]; v.query[curdx].eng[v.eng~dx].docs =
let isDone = true; if ( len > 0 ) { isDone = false; let result = s.results.cluster[0].result; for ( let i=0; i<len; i++ ) { let rec = { title: '', id:'' ; if ( v.isScholar
) rec.title = result[i].scholar.title; rec.id = result[i].scholar.id;
else rec.title = result[i].patent.title; rec.id = result[i].patent.id; rec.pn = result[il].patent.publication number;
qeng.docs.push( rec
if ( ++resultsFrom >= v.maxResults ) break;
if ( resultsFrom >= totalResults || resultsFrom >= v.maxResults ) isDone = true; if ( ++atGooglePage == totalGooglePages ) isDone = true;
whereTwister.textContent = qeng.results = qeng.docs.length;
if ( isDone ) { doSave(); onSearchDone( totalResults } else showWait(); let url = url google xhr + google args + '%26num%3D' googleSize '%26page%3D' + (atGooglePage+1); grabUrl( 'POST', url, onGoogleOk
//------------------------------------------------------------- function doGoogleDownload( x ) { //------------------------------------------------------------- showWait(; let args = 'q=' + x.q + x.p; args = args.replace( / /g, '%2B' args = args.replace( /\&/g, '%26' args = args.replace( /\=/g, '%3D'
google args = args; atGooglePage = 0; totalGooglePages = 0;
resultsFrom = 0;
googleSize = (mode == 'context') ? 10 : 100; if ( v.isScholar ) googleSize = 25; // workaround for BUG in GOOGLE SCHOLAR !! let url = url google xhr + args + '%26num%3D' + googleSize; grabUrl( 'POST', url, onGoogleOk
//------------------------------------------------------------- function doGoogleField( q, idx ) { //------------------------------------------------------------- let txt = ''; if ( q[idx].p != -1 ) { // proximity let pList = parseProximityList( q[idx].w for ( let i=0; i<pList.length; i++ )
if ( i>0 ) txt += ' OR ';
if ( pList[i].indexOf( ' ' ) != -1 )
let w = pList[i].split( ' '
let n = parsent( q[idx].p ) /w.length; n = Math.ceil( n */ let n = q[idx].p; txt += '('; for ( let j=0; j<w.length; j++) if ( j>0 ) txt += 'NEAR' + n
+ txt += w[j];
txt + )'
else txt += pList[i];
else for ( let i=0; i<q[idx].w.length; i++ if ( i>0 ) txt += ' AND let w = q[idx].w[i]; if ( w.indexOf( ' ) != -1 ) { // a_b = (ab OR "a b"~l) let adj = w.split( txt += + adj[0] + adj[1] V OR ( + adj[0] + ADJ + adj[1]
else txt += parseOR( w
return txt;
//------------------------------------------------------------- function formGoogleQuery( x ) { //------------------------------------------------------------- if ( x == ' ) return x; if ( x.exact ) return x.exact;
let txt = let s = for ( let i=0; i<x.length; i++ let bool = 'AND'; if ( x[i].op != ' ) bool = x[i].op; if (i > 0 txt += ' + bool +
let field = doGoogleField( x, i if ( x[i].f != ' ) { txt += x[i].f + = + field; } txt += ( + field + )';
return txt;
//------------------------------------------------------------- function buildGoogleQuery( context, query ) { //------------------------------------------------------------- v.isGoogle = true; let x = { q:', p: '
let p = parseQuery( context x.q = formGoogleQuery( p
if (query != ' ) { p = parseQuery( query let q = formGoogleQuery( p )
if ( context == ' ) x.q = q; else x.q = x.q + ' ' + q;
if ( v.useEPD && v.epd = ) x.p += '&before=publication:' v.epd.replace( /-/g, if ( !v.isGroupFamilies ) x.p += '&dups=language';
if ( v.isScholar ) x.p = '&patents=false&scholar'; return x;
// LENS.JS Patent Search Tool v11 09 Aug 2021 ,//
//------------------------------------------------------------- function grabJSON( url, onOk, size, from ) { //------------------------------------------------------------- let fields = '"LENS TD","TTTLE"'; if ( !v.isScholar ) fields += ',"DTSPLAY KEY"';
let payload = '{"size":' + size + ',"from":' + from; payload += ',"format":"JSON","fields":[' + fields + '],"async":false}';
grabUrl( 'POST', url, onOk, payload, [ 'content-type', 'application/json' ]
//------------------------------------------------------------- function onLensOk( r ) { //------------------------------------------------------------- stopWait(); let s = JSON.parse( r.responseText if ( !v.isScholar && s.status != 'OK NORESULTS' && s.status != 'OK' whereTwister.textContent = '0'; if ( mode == 'query' ) { v.context[cur~dx].size[v.eng~dx] = 0; } else if ( mode == 'query' v.query[cur~dx].eng[v.eng~dx].size = 0; v.query[curdx].eng[v.eng~dx].results = 0; v.query[cur~dx].eng[v.eng~dx].docs =
let err = 'Error: '+ s.status; log += '<span style="color:red;"> { Error: '+ err +' 1</span>'; log ='</div> dumpLog(); lib.modal.alert( err, { ms: 1000, noOk:true }
return -1;
ler results = v.isScholar ? s : s.resulrs.docs; let roalResuls = v.isScholar ? s.lengrh : s.results.docsMached; let len = v.isScholar ? s.length : s.results.docsExported;
if ( mode == 'context' ) { v.context[curdx].size[v.eng~dx] = totalResults; whereTwister.textContent = v.context[curdx].size[v.eng~dx] = totalResults; onSearchDone( totalResults
return;
if ( resultsFrom == 0 whereTwister.textContent = v.query[cur~dx].eng[v.eng~dx].size = totalResults; whereTwister = queryResult[cur~dx]; v.query[curdx].eng[v.eng~dx].docs =
if ( v.query[curTdx].eng[v.engdx].docs.length + len > v.maxResults len = v.maxResults-v.query[curdx].eng[v.eng~dx].docs.length;
for ( let i=0; i<len; i++ ) { let id = v.isScholar ? results[i].lensid : results[i].lens~d; let x = { id: id, title:results[i].title }; if ( !v.isScholar ) x.pn = results[i].displayKey; v.query[curdx].eng[v.eng~dx].docs.push( x ); if ( resultsFrom++ >= v.maxResults ) break; } whereTwister.textContent v.query[cur~dx].eng[v.eng~dx].results =v.query[curdx].eng[v.engdx].docs.length; if ( resultsFrom >= totalResults || resultsFrom >= v.maxResults doSave(); onSearchDone( totalResults } else showWait(); let typ = v.isScholar ? 'scholar' : 'patent'; let url = urllens + 'export/' + typ + lens args; grabJSON( url, onLensOk, 1000, resultsFrom
//------------------------------------------------------------- function doLensExport( x ) { /------------------------------------------------------------- let args = 'q=' + x.q + x.p; args = args.replace( / /g, '%20' lensargs = args;
resultsFrom = 0; let typ = v.isScholar ? 'scholar' : 'patent'; let url = url-lens + 'export/' + typ + '?' + lens args; let size = ( mode == 'context' ) ? 10 : 1000; grabJSON( url, onLensOk, size, 0 showWait(;
//------------------------------------------------------------- function onAPT( r ) { //------------------------------------------------------------- isWait = -1; let s = JSON.parse( r.responseText document.querySelector( '.claim'+cur~dx+'.size' ).innerHTML = s.size; doExport();
//------------------------------------------------------------- function fixLensCPC( w ) { //------------------------------------------------------------- w = w.replace( /\//g, '%2F'
return w;
//------------------------------------------------------------- function doLensField( q, idx, override field ) { //------------------------------------------------------------- let txt = ''; let field = overridefield ? overridefield q[idx].f; if ( field != ) txt += field + ':'; txt += '('; if ( q[idx].p != -1 ) { // proximity let w = q[idx].w; let pList = parseProximityList( w for ( let i=0; i<pList.length; i++) if ( i>0 ) txt += ' OR '
if ( pList[i].indexOf( ) != -1 ) txt += '" pList[i] q[idx].p; else txt += pList[i];
else for ( let i=0; i<q[idx].w.length; i++ )
if ( i>0 ) txt += ' AND '; let w = fixLensCPC( q[idx].w[i] ); if ( w.indexOf( ' ) != -1 ) { // a b = (ab OR "a b"~l) let adj = w.split( txt (' + adj[0] + adj[1] + ' OR '+ adj[0] + ' + adj[1] '"~1)'; else txt += parseOR( w return txt;
//------------------------------------------------------------- function buildLensQuery( context, query ) { //------------------------------------------------------------- v.isGoogle = false;
let x = { q:'', p:' };
if ( context != ' ) { x.q = parseQuery( context if ( x.q.exact ) x.q = x.q.exact; } if (query != if ( context != '' ) x.q ' AND
let qx = parseQuery( query ); if ( qx.exact ) qx = qx.exact; x.q += qx;
if ( v.useEPD && v.epd != '' ) x.p += '&publishedDate.to=' v.epd; x.p += v.isGroupFamilies ? '&f=true' '&f=false'; x.p += v.useStem ? '&st=true' : '&st=false'; x.p += '&e=false&l=en';
if ( v.useLimit ) { for ( let i=0; i<limitList.length; i++) x.p += '&fj.must=' + limitList[i].toUpperCase(; }
return x;
// RESULTS.JS Patent Search Tool v11 09 Aug 2021 ,//
//------------------------------------------------------------- function doOpenDoc( item, useGoogle ) { //------------------------------------------------------------- if ( v.isGoogle || (!v.isGoogle && useGoogle) let url = url google patents; if ( v.isScholar ) url += 'scholar/' + item.id; else { let pn = item.pn.replace( /[ ,\/]/g, url += 'patent/' + pn + '/en'
window.open( url
else let engine = v.isScholar ? 'scholar/article' 'patent'; let url = url-lens + engine + ''+ item.id; window.open( url
// ------------------------------------------------------------- function doForwardResults() //------------------------------------------------------ let isCopy = event.ctrlKey ? true : false; let txt = for ( let i=0; i<resultsList.length; i++
) if ( i>0 ) { if ( isCopy ) txt += '\n'; else if ( !v.isGoogle ) txt= '%200R%20' else txt =
txt resultsList[i];
if ( isCopy lib.copy( txt lib.modal.alert( 'Copyied to Clipboard!', {ms:800} } else let url = url google patents + '?q=' + txt; if ( !v.isGoogle ) { txt = txt.replace( /[ ,\/]/g, let url = url-lens + 'list?q=pub num:(' + txt ')&st=true&f=true';
window.open( url
//------------------------------------------------------------- function drawResults() //------------------------------------------------------------- let list = v.query[curIdx].eng[v.engIdx].list;
let h = '<table style="font-size:9pt;">' h '<tr style="background-color:#bfdfff;text-align:center; font-weight:bold;">'; h '<td style="width:10px;"> </td>' if ( !v.isScholar ) { h += '<td style="width:120px;">Patents ( <span style="color:green">' + list.length + '</span> )</td>'; h += '<td style="text-align:left; padding-left:10px;">Title</td>';
else h = <td style="text-align:left; padding-left:10px;">Title ( <span style="color:green">' + list.length + '</span> )</td>';
h += '<td style="color:red; min-width:20px;">&sum;</td>';
for ( let i=0; i<v.len; i++ ) { let query = v.query[i].eng[v.engIdx]; if ( query.size > 0 )
h += '<td style="min-width:40px;">' + (i+1) + '</td>';
h +='</tr>';
limitList = v.limit.toUpperCase().split( '
resultsList = []; for ( let i=0; i<list.length; i++ )
if ( v.useLimit && !v.isScholar let cc = list[i].pn.slice( 0, 2 ).toUpperCase(; if ( libFind( limitList, cc ) == -1 ) continue;
let bc = i%2==0 ? 'white' : '#eeeeee'; let c = (list[i].cnt == (v.len-1)) ? '#b30000' : 'black'; h '<tr style="background-color:' + bc + '; color:' +c '; text align:center;">'; h '<td style="font-size:6pt;">' + (i+1) + '</td>' if ( !v.isScholar ) { let s = list[i].pn.match( /(\D\D) ?(\d+\/? ?\d+) ?(\D\d?\d?)/ )
s = s[1] + ' ' + s[2].replace( / /g, '' ) ' ' 3]; resultsList.push( s ); h += '<td class="goto" idx="' + i +'" style="text-align:left; padding left:5px;">' + s + '</td>' } let extra = v.isScholar ? 'class="goto" h += '<td ' + extra + 'idx="' + i +'" style="text-align:left; padding left:5px;">' + list[i].title + '</td>'; h += '<td style="color:#ff794c;">' + list[i].cnt + '</td>' for ( let j=O; j<v.len; j++ ) { let query = v.query[j].eng[v.engIdx]; if ( query.size > 0
) h += '<td>' + list[i].q[j] + '</td>';
h += '</tr>';
h += '</table>'; let engine = v.isGoogle ? 'Google' : 'Lens'; let bh = '<button id="idCompare2" class="lib-yellow" style="margin-left:20px;"><i class="fa fa-eye" style="font-size:.7rem"></i> Compare Results</button>'; if ( !v.isScholar )
bh += '<button id="idForward" class="lib-blue" style="margin-left:20px;"><i class="fa fa-share" style="font-size:.7rem"></i> Forward Results to '+ engine + '</button>'; idOutput.innerHTML = bh + h; drawResultsButton(;
idCompare2.addEventListener( 'click', doCompareResults if ( !v.isScholar ) idForward.addEventListener( 'click', doForwardResults
lib.query( 'td.goto' ).rClick( function( e e.preventDefault(; let idx = parseInt( this.getAttribute( 'idx' doOpenDoc( list[idx], e.ctrlKey
//------------------------------------------------------------- function doCompareResults() //------------------------------------------------------------- isRunAll = false; tabs[1].click(); doSave(;
let arg = v.isScholar ? 'title' : 'pn'; let list =[]; for ( let i=0; i<v.len; i++) let docs = v.query[i].eng[v.engIdx].docs; for ( let j=0; j<docs.length; j++) let title = docs[j].title; let pn = !v.isScholar ? docs[j].pn let val = v.isScholar ? title pn; let id = docs[j].id; if ( libFind( list, arg, val ) == -1 let x = { title: title, id:id, cnt:0, q:[] }; if ( !v.isScholar ) x.pn = pn; for ( let k=0; k<v.len; k++ ) x.q.push( 0 list.push( x
lib.sort( list, arg
// build comparison for ( let i=0; i<list.length; i++ )
let val = list[i][arg];
for ( let j=0; j<v.len; j++ )
let query = v.query[j].eng[v.engIdx]; if ( query.size == 0 ) continue; let idx = libFind( query.docs, arg, val if ( idx = -1
) list[i].q[j] = 1; list[i].cnt++; } } } lib.sort( list, 'cnt', 1 v.query[curIdx].eng[v.engIdx].list = list; v.query[curIdx].eng[v.engIdx].isUpdated = false; doSave(; drawResults(;
* MISC.JS Patent Search Tool v11 09 Aug 2021
------------------------------------------------------ function afterLoad() ------------------------------------------------------ idName.value = v.name; idEPD.value = v.epd; idUseEPD.checked = v.useEPD; idLimit.value = v.limit; idLimit.disabled = !v.useLimit; idUseLimit.checked = v.useLimit; idMaxResults.value = v.maxResults; idLog.innerHTML = log = v.log; dumpLog();
let idx = [ 'Input', 'Results', 'Synonymns', 'Log', 'Help' ].indexOf( v.curTab tabs[idx].click();
setup(); doSave(;
------------------------------------------------------ function doLoad() ------------------------------------------------------ lib.getStorage( ( stor, len )=> { if ( len > 0 ) v = stor; afterLoad();
------------------------------------------------------ function doSave() ------------------------------------------------------ v.log = idLog.innerHTML; lib.setStorage( v
------------------------------------------------------ function onError( r ) { ------------------------------------------------------ doWait( 'stop' ); idLog.innerHTML += '\n<b>ERROR</b>: ' + r.responseText;
} ----------------------------------------------- function grabUrl( method, url, onOk, body, params ) { -(----------------------------------------------- ler x = new XMLHrrpRequesrU; x.onreadystatechange = function() if ( this.readyState == 4
) if ( this.status == 200 ) onOk( this else onError( this
x.open( method, url, true if ( params )
for ( let i=0; i<params.length; i+=2 let head = params[i]; let val = params[i+1]; x.setRequestHeader( head, val
//x.withCredentials = true; // use cookies x.send( body
/------------------------------------------------------------- function grabXHR( qParams, onOk ) { //------------------------------------------------------------- //let payload = '{"size":10,"from":0}'; let url = url api + qParams; //grabUrl( 'POST', url, onOk, payload, [ 'content-type', 'application/json' ] grabUrl( 'POST', url, onOk
//------------------------------------------------------------- function dumpLog() { //------------------------------------------------------------- let ih = idLog.innerHTML; idLog.innerHTML = ''; idLog.innerHTML = ih + log; lib.query( '.log-click', idLog ).click( function() let ref = this.getAttribute( 'ref' ); if ( ref.indexOf( 'google.com' ) != -1 ) ref = ref.replace( /%2B/ig, window.open( ref
doSave(; log =
//------------------------------------------------------------- function libFind( list, arg, val ) { //------------------------------------------------------------- if ( !val ) { val = arg; arg = } for ( let i=0; i<list.length; i++ )
let item = list[i]; if (arg != '') item = item[arg]; if ( item == val ) return i;
return -1;
var clk = 0; var clkState = 'stop'; const twister = [ '|', '/', '-', '\\', '|', '/', '-', '\\', '|' ];
//------------------------------------------------------------- function stopWait() //------------------------------------------------------------- clkState = 'stop';
//------------------------------------------------------------- function showWait() clkState = 'show'; function doWait() ------------------------------------------------------ if ( clkState == 'stop' ) return; let s = twister[clk++]; if (clk > 8 ) clk = 0; let txt = whereTwister.textContent.trim(); if ( twister.indexOf( txt.slice(-1) ) != -1 ) txt = txt.slice( 0, -1 ).trim(; txt = (txt + ' ' + s).trim(); whereTwister.textContent = txt; setnterval( doWait, 300
//------------------------------------------------------------- function setupTabs() //------------------------------------------------------------- tabs = lib.query( '.tab'
tabs.click( function() let x = lib.query( '.tab.active' )[0]; x.classList.remove( 'active' ); let ref = x.getAttribute( 'ref' lib.query( ref )[0].style.display = 'none';
this.classList.add( 'active' ); ref = this.getAttribute( 'ref' lib.query( ref )[0].style.display =
v.curTab = this.textContent; doSave();
// STORAGE
//--------------------------------------------------------- readFile = function( fileObject, onload ) { //--------------------------------------------------------- let reader = new FileReader(; reader.onload = onload; reader.readAsText( fileObject
//------------------------------------------------------------------ function doSaveFile () //------------------------------------------------------------------ let name = idName.value.replace( /\.json/i, '' ).trim(; if ( name == ) return;
doSave(;
let vJson = JSON.stringify( v let content = [ vJson ]; let typ = { type: 'application/json' ; // text/html name = name + '.json';
let blob = new Blob( content, typ, name
let a = document.createElement( 'a' a.download = name; a.rel = 'noopener'; a.href = URL.createObjectURL( blob setTimeout( function () { URL.revokeObjectURL( a.href ); }, 2e4 ); // 20s a.click();
}
idLoadFileInput.addEventListener( 'input, function ( e ) {
let files = event.target.files; if ( files.length != 1 ) return; readFile( files[O], function( r ) { let stor = JSON.parse( r.currentTarget.result if ( stor.crc == 'oK' ) { //idName.value = f.name.replace( '.json', v = stor; afterLoad(; idLoadFile.value = null;
}, false
<!DOCTYPE html> <html lang="en"> <head>
<title>Patent Search Tool</title> <!-- --------------------------------------------------------------- --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=l"> <!-- --------------------------------------------------------------- --> <link rel="stylesheet" href="inc/fontawesome.all.min.css"></link> <style>
.lib-red { color:white; background-color: #dc3545 } .lib-green { color:white; background-color: #198754 } .lib-blue { color:white; background-color: #Od6efd } .lib-yellow { color:black; background-color: #ffc107 } .lib-cyan { color:white; background-color: #OdcafO } .lib-gray { color:white; background-color: #6c757d } .lib-lightgray { color:white; background-color: #bbbbbb .lib-teal { color:white; background-color: #20c997 } .lib-orange { color:white; background-color: #fd7el4 }
//--bs-blue: #Od6efd; //--bs-indigo: #6610f2; //--bs-purple: #6f42c1; //--bs-pink: #d63384; //--bs-light: #f8f9fa; 2 12 5 29 //--bs-dark: # ; */
button border-radius:.2rem; padding:3px 5px; cursor:pointer; border:0;
.sm-text 3 font-size:.6rem; } .md-text 3 font-size:.8rem; } .title-text 3 font-size:.9rem; font-family:Tahoma; font-weight:bold; font-variant: small-caps; color:white;
td.help-table 3 padding-left:20px; }
body 3 margin:0; padding:0; font-size:.7rem; }
.tab { padding:Opx 2px; margin:0; border:lpx solid gray; border-bottom-style: none; border-radius:.2rem .2rem 0 0; text-align:center; font-size:.8rem; cursor: pointer;
.tab.active background-color:#d90036; color:white;
.main display: grid; grid-template-columns: lfr; grid-template-rows: 2rem 1.7rem 90%; gap: Opx Opx; height: 100vh; width: 100%; overflow-y:hidden;
.main-navbar grid-area: 1/1 / span 1/span 1; display: grid; grid-template-columns: 30px auto auto; grid-template-rows: auto; 22 2 2 22 background-color:# ; padding:0 5px;
.main-tabs grid-area: 2/1 / span 1/span 1; display: grid; grid-template-columns: 50px 60px 80px 50px 50px auto; grid-template-rows: auto; padding-top:5px; margin:0 10px 0 10px; justify-self: bottom; border-bottom: 1px solid gray;
.main-tab-window grid-area: 3/1 / span 1/span 1; display: grid; grid-template-columns: lfr; grid-template-rows: auto; margin:0 10px;
.log-window display: grid; grid-template-columns: auto; grid-template-rows: auto lfr;
margin:2px; padding:5px 20px;
</style> </head> <body>
<div class="main"> <div class="main-navbar"> <div style="text-align:left;"> <img id="idIcon" class="my-0 px-0 py-0" src="inc/icon.png" width="25px" style="margin-top:3px;"> </div>
<div style="text-align:left; margin-top:7px;"> <span style="margin-top:3px;"> <span class="title-text" style="margin-top:-5px;">&nbsp;Patent Search Tool&nbsp;</span> <span class="sm-text" style="color:#777777;">v</span><span id="idVersion" style="color:red;">X</span> </span> </div> <!-- ----- --> <div> <span style="padding-left:5px; font-weight:500; color:#ffb973;">Name:&nbsp;</span> <input id="idName" type="text" style="width:100px; margin:2px; font-size:.7rem;"> <button id="idLoadFile" class="lib-lightgray" style="margin:O; padding:lpx 3px; color:black; font-size:.7rem;"> <i class="fa fa-folder-open"></i> </button> <input type="file" id="idLoadFile~nput" style="display:none;" accept="application/json"> <button id="idSaveFile" class="lib-lightgray" style="margin:O; padding:lpx 3px; color:black; font-size:.7rem;"> <i class="fa fa-save"></i> </button> <!-- ----- --> <button id="idEngine" class="btn lib-green" style="margin-left:10px;"><i class="fa fa-search" style="font-size:.7rem"></i> <span id="idEngineText">Google</span></button> <select id="idType"> <option value="O">Patent</option> <option value="1">Scholar</option> </select> <button id="idStem" class="lib-lightgray" style="margin-left:5px; padding:lpx 3px; color:black; font-size:.7rem;"> <i class="fa fa-share-alt"></i> </button> <!-- --------------- -- > <button id="idFamily" class="lib-lightgray" style="margin-left:5px; padding:lpx 3px; color:black; font-size:.7rem;"> <i class="fa fa-users"></i> </button> <span style="padding-left:5px; color:#ffb973;"> <input id="idUseEPD" type="checkbox"> PD: <input id="idEPD" type="date" style="margin-top:3px; font-size:.7rem;" disabled> </span> <!-- --------------- -- > <span style="padding-left:5px;"></span> <input id="idUseLimit" type="checkbox"> <span style="font-weight:500; color:#ffb973;">Limit:</span> <input id="idLimit" type="text" size="10" value="US" disabled style="width:100px; margin:2px; font-size:.7rem;"> <!-- --------------- -- > <span style="padding-left:5px; font-weight:500; color:#ffb973;">Max.:&nbsp;</span> <input id="idMaxResults" type="number" size="6" value="100" step="100" style="width:60px; margin:2px; font-size:.7rem;"> </div> <!-- --------------- -- > </div> <!-- ------------------------------------- --> <div class="main-tabs"> <div class="tab active" ref="#idnput" style="grid-area:1/1/span 1/span 1;">Tnput</div> <div class="tab" ref="#idOutput" style="grid-area:1/2/span 1/span 1;">Results</div> <div class="tab" ref="#idSynonyms" style="grid-area:1/3/span 1/span 1;">Synonymns</div> <div class="tab" ref="#idLogWindow" style="grid-area:1/4/span 1/span 1;">Log</div> <div class="tab" ref="#idHelp" style="grid-area:1/5/span 1/span 1;">Help</div> </div> <!-- ------------------------------------- --> <div class="main-tab-window"> <div id="id~nput" style=" font-size:9pt; width:100%; background-color:#faf9ed;"> <div id="idSearchContext"></div> <div id="idSearchQueries"></div> </div> <!-- ---------------------------------- --> <div id="idOutput" style="display:none; padding:5px 20px; margin:2px; background color:#d6fObd; overflow-y:auto;"> </div>
<!-- ---------------------------------- -- > <div id="idSynonyms" style="display:none; padding:5px 20px; margin:2px; background color:#f7eeff;"> </div> <!-- ---------------------------------- --> <div id="idLogWindow" class="log-window" style="display:none; overflow-y:hidden; background-color:#8091a9"> <div style="grid-area: 1/1 span 1/span 1; padding-left:10px;"> <span style="font-weight:bold;">Log&nbsp;&nbsp;&nbsp;</span> <button id="idClearLog" class="lib-lightgray" style="margin:0; padding:2px 4px; color:black; font-size:.6rem;"> <i class="fa fa-eraser"></i> </button> </div> <div id="idLog" style="grid-area: 2/1 span 1/span 1; border-top:1px solid black; background-color:#f4faff; padding:5px; font-size:8pt; height:98%; width:99%; overflow-y:auto;"> </div> </div> <!-- ---------------------------------- --> <div id="idHelp" style="display:none; padding:5px 20px; margin:2px; background color:#f6fff6; overflow-y:auto;"> <!-- --------------- -- > <hl> Major Help update coming soon ............... </hl> <style> #idHelp > h2 { font-size:14pt; color:black; padding: 5px 0; font-variant: small-caps; </style> <h2>Use</h2> <div style="padding-left:20px"> <P> <img class="my-0 px-0 py-O" src="inc/icon.png" width="20px"> Click on Icon to <span style="color:blue">Scroll to Top</span> </p> <P> <ul> <li> <b>Search Context</b>: provides a common context to help reduce and focus the results of each search statement, ie. "Search Context A" AND "Search Query 1". </li> <li> <b>Stem</b>: word stemming, eg. 'acidic' or 'acidity' is stemmed 'acid' to include more matches. (Lens only) <li> <b>Family</b>: Group by similar families (reduces results). </li> <li> <b>PD</b>: use as latest "Publication Date" limit </li> <li> <b>Limit</b>: limit Jurisdictions eg. US EP WO = United States & Europe & WIPO<br> <span style="padding-left:20px;">&ndash;</span> During Run: limits results;<br> <span style="padding-left:20px;">&ndash;</span> During Compare: limits comparsion results. </li> <li> <b>Max.</b>: maximum number of search statement results to retrieve. Default is 1000. Larger numbers require multiple passes and hence are slower! (eg. Google returns 100 results per pass. Thus requires 10 passes to return 1000 results) </li> <!-- --------- -- > <li> <b>Size</b>: number of Search Query statements to use. </li> <!-- --------- -- > <li> <P> <button class="lib-gray">Run</button><br> <span style="padding-left:20px;">&ndash;</span> Use <span style="color:red; font-weight:400;">Click</span> to retrieve search results for CURRENT search statement<br> <span style="padding-left:20px;">&ndash;</span> Use <span style="color:red; font-weight:400;">R-Click</span> to retrieve search results for ALL search statements ie. Run all search statements!<br>
<span style="padding-left:20px;">&ndash;</span> Use <span style="color:red; font weight:400;">Click + Shift-key</span> = build search statement only<br> <span style="padding-left:20px;">&ndash;</span> Use <span style="color:red; font weight:400;">Click + Ctrl-key</span> = quick run (returns 10 results) used to find results size fast </p> </li> <li> <P> <button class="lib-lightgray"><i class="fa fa-eraser" style="font-size:.7rem"></i></button><br> <span style="padding-left:20px;">&ndash;</span> Use <span style="color:red; font-weight:400;">Click</span> to clear search statement results.<br> <span style="padding-left:20px;">&ndash;</span> Use <span style="color:red; font-weight:400;">Click + Ctrl-Key</span> to clear search statements!<br> </p> </li> <!-- --------- -- > <li> <P> <button class="lib-yellow"><i class="fa fa-eye" style="font-size:.7rem"></i> Compare Results</button><br> <span style="padding-left:20px;">&ndash;</span> <span style="color:red; font-weight:400;">Click</span> to "compare and table" results of each search statement.<br> <span style="padding-left:40px;">&#8227;</span> then Use <span style="color:red; font-weight:400;">Right-Click</span> on a Patent number in the <span style="color:blue;">compare table</span> to open this patent in the CURRENT selected Search Engine</span><br> <span style="padding-left:40px;">&#8227;</span> or Use <span style="color:red; font weight:400;">Right-Click + Ctrl-key</span> on a Patent number in the <span style="color:blue;">compare table</span> to open this patent in the OTHER Search Engine.</span><br> <span style="padding-left:20px;">&ndash;</span> Use <button class="lib-blue"><i class="fa fa-share" style="font-size:.7rem"></i> Forward</button> button that appears above the <span style="color:blue;">compare table</span> <br> <span style="padding-left:40px;">&ndash; <span style="color:red; font-weight:400;">Left-Click </span> to forward list of patent results to the current search engine</span><br> <span style="padding-left:40px;">&ndash; <span style="color:red; font-weight:400;">Left-Click
+ Ctrl-Key</span> to copy list to clipboard</span><br> </p> </li> <!-- --------- -- > <li> <P> <button class="lib-cyan"><i class="fa fa-search" style="font-size:.7rem"></i> Lens</button> or <button class="lib-green"><i class="fa fa-search" style="font-size:.7rem"></i> Google Patents</button> <br> <span style="padding-left:20px;">&ndash; <span style="color:red; font-weight:400;">Left-Click</span> to toggle between Lens & Google Patents and the current search engine.<br> <span style="padding-left:20px;">&ndash; <span style="color:red; font-weight:400;">Right-Click</span> to goto current search engine web page. <br> <span style="padding-left:20px;">&ndash; <span style="color:red; font-weight:400;">Right-Click + Alt-Key</span> to goto current search engine Help - Search Syntax web page. </p> </li> <!-- --------- -- > </ul> </p> </div> <!-- --------------------- --> <hr> <h2>Syntax</h2> <div style="padding-left:20px">
<table class="help-table" style="font-size:7pt; font-family:courier new;"> <tr style="font-weight:bold; text-align:center; background-color:#bbbbbb; border-bottom:2px solid black!important;"> <th style="">Operators</th> <th style="color:green;">Description</th> </tr> <!-- ----- --> <tr> <td>&</td><td>AND; breaks to new sub-statement ie. AND ( ... )</td> </tr> <!-- ----- --> <tr> <td>|</td><td>OR; breaks to new sub-statement ie. OR ( ... )</td> </tr> <!-- ----- --> <tr> <td>~</td><td>use Proximity; breaks to new sub-statement ie. AND ( )</td> </tr> <!-- ----- --> <tr> <td>""</td><td>exact phrase eg. "block chain"</td> </tr> <!-- ----- --> <tr> <td>!</td><td>replace with equivalent synonyms if recorded in Synonyms Tab</td> </tr> <!-- ----- --> <tr> <td>=</td><td>use exact statement after the equals sign</td> </tr> <!-- ----- --> <tr> <td>_</td><td>adjacent operator eg. block_chain is equivalent to: blockchain OR (block NEAR chain)</td> </tr> <!-- ----- --> <tr> <td>@a</td><td>use <b>Abstract</b> field</td> </tr> <!-- ----- --> <tr> <td>@c</td><td>use <b>Claim</b> field</td> </tr> <!-- ----- --> <tr> <td>@t</td><td>use <b>Title</b> field</td> </tr> <!-- ----- --> <tr> <td>@pn</td><td>use <b>Patent Number</b> field</td> </tr> <!-- ----- --> <tr> <td>@ap</td><td>use <b>Applicant</b> field</td> </tr> <!-- ----- --> <tr> <td>@i</td><td>use <b>Tnventor</b> field</td> </tr> <!-- ----- --> <tr> <td>@cpc</td><td>use <b>CPC</b> field</td> </tr> <!-- ----- --> <tr> <td>@ipc</td><td>use <b>TPC</b> field</td> </tr> </table>
<table class="help-table" style="font-size:7pt; font-family:courier new;">
<tr style="font-weight:bold; text-align:center; background-color:#bbbbbb; border-bottom:2px solid black!important;"> <th style="">Statement</th> <th style="color:blue;">Lens</th> <th style="color:green;">Google</th> </tr> <!-- ----- --> <tr> <td>a b</td> <td>a AND b</td> <td>a AND b</td> </tr> <!-- ----- --> <tr> <td>a,b</td> <td>a OR b</td> <td>a OR b</td> </tr> <!-- ----- --> <tr> <td>a b | c d</td> <td>(a AND b) OR (c AND d)</td> <td>(a AND b) OR (c AND d)</td> </tr> <!-- ----- --> <tr> <td>a,b | c,d</td> <td>(a OR b) OR (c OR d)</td> <td>(a OR b) OR (c OR d)</td> </tr> <!-- ----- --> <tr> <td>a,b ~ c,d</td> <td>(a OR b) AND "c d"~10</td> <td>(a OR b) AND (c NEAR10 d)</td> </tr> <!-- ----- --> <tr> <td>a,b | ~5 c d</td> <td>(a OR b) OR "c d"~5</td> <td>(a OR b) OR (c NEAR5 d)</td> </tr> <!-- ----- --> <tr> <td>test debug & @c ~3 scan virus</td> <td>(test AND debug) AND claims:("scan virus"~3)</td> <td>(test AND debug) AND (CL=(scan NEAR3 virus))</td> </tr> <!-- ----- --> <tr> <td>@a authorisee entry</td> <td>abstract:(authorise OR approve OR grant AND entry)</td> <td>ab=(authorise OR approve OR grant AND entry)</td> </tr> </table> <!-- --------------- -- > </div> <!-- --------------------- --> <hr> <h2>Synonyms Tab</h2> <div style="padding-left:20px"> <p>Add Synonyms to replace single words with the correspoinding list of synonyms.</p> One entry per line with format: <span style="margin-left:10px; padding:O 5px; background-color:#eeeeee;"> <b>Word</b> = synonym synonym2 ... synonymN </span> <div style="padding-left:40px;"> Tf proximity is unchecked in: synonym OR synonym2 OR ... synonymN.<br> Tf proximity is checked: results in permutation of the combination of synonyms. </div> <p style="margin:O">Example syntax for <u>Proximity Tab:</u></p>
<p style="margin:O; padding:O 20px;"><b>authorise</b> = grant approve<br> <b>test</b> = try discover</p> <P> <button class="lib-blue">Parse</button> <br> <span style="color:red; font-weight:400;">Click</span> to parse synonymn entries in the tab.<br> <span style="padding-left:20px;"></span>Resulting entries will appear in a table below.<br> <span style="padding-left:20px;"></span>Each entry can be clicked to open in an external Thesaurus for further values inquiry. </p> <!-- --------------- -- > <img src="inc/synonyms.png" width="500" style="margin-left:100px;"> </div> <!-- --------------------- --> <h2>Synonyms</h2> <div style="padding-left:20px"> <p>Text: <span style="padding:O 5px; background-color:#eeeeee; font-weight:bold">!test cricket</span> replaces <b>test</b> with any corresponding synonyms available, eg. <span style="color:red">((test OR try) AND cricket)</span>; if no synonyms then just <span style="color:green">(test AND cricket)</span> </p> <span style="padding-top:10px;">Text: <span style="padding:O 5px; background-color:#eeeeee; font-weight:bold">!authorise & !test</span> </span> <div style="margin:O; padding:O 40px;"> if proximity is unchecked: <span style="color:red"> authorisee OR grant OR approve) AND (test OR try OR discover) </span> <br>if proximity is checked with value of 5: <span style="color:green"> authorisese test"~5 OR authorisee discover"~5 OR authorisee try"~5 OR "approve test"~5 OR "approve discover"~5 OR "approve try"~5 OR "grant test"~5 OR "grant discover"~5 OR "grant try"~5) </span> </div> <span style="margin-top:5px;">Text: <span style="padding:O 5px; background-color:#eeeeee; font-weight:bold"> standards,regulatory compliance !test </span> </span> <div style="margin:O; padding:O 40px;"> if proximity is unchecked: <span style="color:red"> (standards OR regulatory) AND (compliance) AND (test OR try OR discover) </span> <br>if proximity is checked with value of 5: <span style="color:green"> (("standards compliance test"~5 OR "standards compliance discover"~5 OR "standards compliance try"~5 OR "regulatory compliance test"~5 OR "regulatory compliance discover"~5 OR "regulatory compliance try"~5)) </span> </p> </div> </div> <!-- --------------------- --> <hr> <h2>Example: Google Patents</h2> <div style="padding-left:20px"> <p> </p> </div> <!-- -------------- > <hr> <h2>Example: The Lens</h2> <div style="padding-left:20px"> <p> </p> </div>
<!-- ---------------------------------- -->
</div> <!-- -------------- > </div><!-- main-window -- > </div><!-- main -- >
<script type="text/javascript" src="lib. js"></script> <script type="text/javascript" src="var. js"></script> <script type="text/javascript" src="misc. js"></script> <script type="text/javascript" src="syn. js"></script> <script type="text/javascript" src="parse. js"></script> <script type="text/javascript" src="resuts. js"></script> <script type="text/javascript" src="google. js"></script> <script type="text/javascript" src="lens.js"></script> <script type="text/javascript" src="index.js"></script>
</body> </html>
It is to be understood that the terminology employed above is for the purpose of description and should not be regarded as limiting. The described embodiments are intended to be illustrative of the invention, without limiting the scope thereof. The invention is capable of being practised with various modifications and additions as will readily occur to those skilled in the art.
Various substantially and specifically practical and useful exemplary embodiments of the claimed subject matter, are described herein, textually and/or graphically, including the best mode, if any, known to the inventors for carrying out the subject matter defined in the summary portion. Variations (e.g., modifications and/or enhancements) of one or more embodiments described herein might become apparent to those of ordinary skill in the art upon reading this application. The inventors expect skilled artisans to employ such variations as appropriate, and the inventors intend for the subject matter to be practiced other than as specifically described herein. Accordingly, as permitted by law, the subject matter includes, and covers all equivalents of the subject matter and all improvements to the subject matter.
Moreover, every combination of the above-described elements, activities, and all possible variations thereof are encompassed by the subject matter unless otherwise clearly indicated herein, clearly and specifically disclaimed, or otherwise clearly contradicted by context.
The use of any and all examples, or exemplary language (e.g., "such as") provided herein, is intended merely to better illuminate one or more embodiments and does not pose a limitation on the scope of any subject matter unless otherwise stated. No language in the specification should be construed as indicating any non-defined subject matter as essential to the practice of the subject matter defined in the summary.
Thus, regardless of the content of any portion (e.g., title, field, background, summary, description, abstract, drawing figure, etc.) of this application, unless clearly specified to the contrary, such as via explicit definition, assertion, or argument, or clearly contradicted by context, with respect to any claim, whether of this application and/or any claim of any application claiming priority hereto, and whether originally presented or otherwise:
a) there is no requirement for the inclusion of any particular described or illustrated characteristic, function, activity, or element, any particular sequence of activities, or any particular interrelationship of elements; b) no characteristic, function, activity, or element is "essential"; ) c) any elements can be integrated, segregated, and/or duplicated; d) any activity can be repeated, any activity can be performed by multiple entities, and/or any activity can be performed in multiple jurisdictions; and e) any activity or element can be specifically excluded, the sequence of activities can vary, and/or the interrelationship of elements can vary.
The use of the terms "a", "an", "said", "the", and/or similar referents in the context of describing various embodiments (especially in the context of the following claims) are to be construed to cover both the singular and the plural, unless otherwise indicated herein or clearly contradicted by context. The terms "comprising," "having," "including," and "containing"' are to be construed as open-ended terms (i.e., meaning "including, but not limited to,") unless otherwise noted.
Moreover, when any number or range is described herein, unless clearly stated otherwise, that number or range is approximate. Recitation of ranges of values herein are merely intended to serve as a shorthand method of referring individually to each separate value falling within the range, unless otherwise indicated herein, and each separate value and each separate subrange defined by such separate values is incorporated into the specification as if it were individually recited herein. For example, if a range of 1 to 10 is described, that range includes all values therebetween, such as for example, 1.1, 2.5, 3.335, 5,6.179, 8.9999, etc., and includes all subranges therebetween, such as for example, Ito 3.65, 2.8 to 8.14, 1.93 to 9, etc

Claims (8)

EDITORIAL NOTE 2021107326 THERE IS ONE PAGE OF CLAIMS ONLY CLAIMS
1. A computerized data mining- and information mining system.
2. A computerized data mining- and information mining method.
3. A computer program product to computerize a data mining- and information mining system in accordance with a method.
4. A computerized active screen component object to datamine and information mine, in accordance with a method.
5. A computerized data mining- and information mining system, substantially as herein described and illustrated.
6. A computerized data mining- and information mining method, substantially as herein described and illustrated.
7. A computer program product for computerizing a data mining- and information mining system in accordance with a method, substantially as herein described and illustrated.
8. A computerized active screen component object to datamine and information mine, substantially as herein described and illustrated.
EDITORIAL NOTE Aug 2021
2021107326
THERE ARE SIX PAGES OF DRAWINGS ONLY
Figure 1
Figure 2
Figure 3
Figure 4
Figure 5
Figure 6
AU2021107326A 2021-08-25 2021-08-25 A data- and information mining system and method Active AU2021107326A4 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU2021107326A AU2021107326A4 (en) 2021-08-25 2021-08-25 A data- and information mining system and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
AU2021107326A AU2021107326A4 (en) 2021-08-25 2021-08-25 A data- and information mining system and method

Publications (1)

Publication Number Publication Date
AU2021107326A4 true AU2021107326A4 (en) 2021-12-16

Family

ID=78948977

Family Applications (1)

Application Number Title Priority Date Filing Date
AU2021107326A Active AU2021107326A4 (en) 2021-08-25 2021-08-25 A data- and information mining system and method

Country Status (1)

Country Link
AU (1) AU2021107326A4 (en)

Similar Documents

Publication Publication Date Title
US11841908B1 (en) Extraction rule determination based on user-selected text
US11907271B2 (en) Distinguishing between fields in field value extraction
US11409758B2 (en) Field value and label extraction from a field value
US11741086B2 (en) Queries based on selected subsets of textual representations of events
US11068452B2 (en) Column-based table manipulation of event data to add commands to a search query
US10877963B2 (en) Command entry list for modifying a search query
US11354308B2 (en) Visually distinct display format for data portions from events
US10067931B2 (en) Analysis of documents using rules
US20210365523A9 (en) Interactive table-based query construction using interface templates
US20180157704A1 (en) Enforcing Dependency Between Pipelines
US7152205B2 (en) System for multimedia document and file processing and format conversion
US8219901B2 (en) Method and device for filtering elements of a structured document on the basis of an expression
US20070078872A1 (en) Apparatus and method for parsing unstructured data
US20120192151A1 (en) Software development tool
US20050108267A1 (en) Universal parsing agent system and method
AU2021107326A4 (en) A data- and information mining system and method
US7873902B2 (en) Transformation of versions of reports
AU2021221737A1 (en) A data- and information mining system and method
US20050210375A1 (en) Apparatus, method, and program for integrating documents
CN112632147B (en) Data differentiation comparison method, system and storage medium

Legal Events

Date Code Title Description
FGI Letters patent sealed or granted (innovation patent)