Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP7702933B2 - 解析装置、解析方法及び解析プログラム - Google Patents
[go: Go Back, main page]

JP7702933B2 - 解析装置、解析方法及び解析プログラム - Google Patents

解析装置、解析方法及び解析プログラム Download PDF

Info

Publication number
JP7702933B2
JP7702933B2 JP2022501600A JP2022501600A JP7702933B2 JP 7702933 B2 JP7702933 B2 JP 7702933B2 JP 2022501600 A JP2022501600 A JP 2022501600A JP 2022501600 A JP2022501600 A JP 2022501600A JP 7702933 B2 JP7702933 B2 JP 7702933B2
Authority
JP
Japan
Prior art keywords
analysis
string
unit
attribute
analysis device
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
JP2022501600A
Other languages
English (en)
Other versions
JPWO2021166271A1 (ja
Inventor
忠賢 千田
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.)
NTT Inc
NTT Inc USA
Original Assignee
Nippon Telegraph and Telephone Corp
NTT Inc USA
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 Nippon Telegraph and Telephone Corp, NTT Inc USA filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2021166271A1 publication Critical patent/JPWO2021166271A1/ja
Application granted granted Critical
Publication of JP7702933B2 publication Critical patent/JP7702933B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/211Syntactic parsing, e.g. based on context-free grammar [CFG] or unification grammars
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Machine Translation (AREA)

Description

本発明は、解析装置、解析方法及び解析プログラムに関する。
データをコンピュータで扱える形に変換する構文解析器が知られている。構文解析器は、変換元のパターンを記述する言語(以降、単に言語と呼ぶ)に従ってデータを解析し、変換する。
例えば、構文解析器には、正規表現を拡張した言語でパターンを記述し、バックトラッキングに基づく構文解析アルゴリズムを用いてデータを解析するものがある。また、例えば、PEG(Parsing Expression Grammar)を拡張した言語でパターンを記述するStateful Packrat Parsingと呼ばれる構文解析アルゴリズムを用いて、文脈に依存したパターンを解析する構文解析器が知られている(例えば、非特許文献1及び2を参照)。
KURAMITSU, K. Nez : Open grammar language and tools. (URL: http://nez-peg.github.io/) GIETZEN, J. Pegasus: Super-easy peg parsing for .net. (URL: http://otac0n.com/Pegasus/)
しかしながら、従来の文脈に依存したパターンに対応した構文解析器には、解析に膨大な時間がかかる場合があるという問題がある。例えば、非特許文献1及び2に記載の構文解析器では、データのサイズに対して指数関数時間の動作が必要になる場合がある。
上述した課題を解決し、目的を達成するために、解析装置は、所定の終端記号に変数を対応付けたPEGで記述された文法を基に、第1の文字列の構文解析を行う解析部と、前記第1の文字列の一部であって、前記解析部により前記終端記号に対応することが解析された第2の文字列に所定の属性を付与した要素を、前記変数に追加する追加部と、前記変数から、各属性の最新の要素を抽出する抽出部と、前記抽出部によって抽出された要素が文脈に関する所定の条件に合致するか否かを判定する判定部と、を有することを特徴とする。
本発明によれば、文脈に依存したパターンに対応した構文解析にかかる時間を短縮することができる。
図1は、第1の実施形態に係る表示システムの構成例を示す図である。 図2は、第1の実施形態に係る解析装置の構成例を示す図である。 図3は、V-PEGの構文を示す図である。 図4は、構文解析の入出力を説明する図である。 図5は、parse関数のアルゴリズムを示す図である。 図6は、第1の実施形態に係る解析装置の処理の流れを示すフローチャートである。 図7は、parse関数の処理の流れを示すフローチャートである。 図8は、メモテーブルの一例を示す図である。 図9は、メモテーブルの一例を示す図である。 図10は、メモテーブルの一例を示す図である。 図11は、メモテーブルの一例を示す図である。 図12は、メモテーブルの一例を示す図である。 図13は、メモテーブルの一例を示す図である。 図14は、メモテーブルの一例を示す図である。 図15は、メモテーブルの一例を示す図である。 図16は、メモテーブルの一例を示す図である。 図17は、解析プログラムを実行するコンピュータの一例を示す図である。
以下に、本願に係る解析装置、解析方法及び解析プログラムの実施形態を図面に基づいて詳細に説明する。なお、本発明は、以下に説明する実施形態により限定されるものではない。
[第1の実施形態の構成]
図1は、第1の実施形態に係る表示システムの構成例を示す図である。図1に示すように、表示システムは、解析装置10及び表示装置20を有する。解析装置10は、例えばサーバである。表示装置20は、例えばパーソナルコンピュータである。
解析装置10は、パターンを記述した言語の情報、及び、所定の形式の文字列のデータ(以降、単に文字列と呼ぶ場合がある)の入力を受け付ける。解析装置10の解析部131は、文字列の構文解析を行う。そして、解析装置10の表示制御部135は、構文解析の結果を基にウェブページの情報を生成し、表示装置20に送信する。
表示装置20は、解析装置10から受信したウェブページの情報を基に、ブラウザ等の機能を用いてウェブページを表示する。なお、解析装置10は、表示装置20によるウェブページへのアクセス要求に応じて構文解析処理を始めてもよい。
図1の例では、解析装置10は、JSONのパターンを記述した言語の情報及びJSON形式のデータの入力を受け付ける。解析部131は、JSON形式のデータから人物名を抽出する。表示制御部135は、抽出された人物名を表示するウェブページのレンダリングを行う。
図2は、第1の実施形態に係る解析装置の構成例を示す図である。図2に示すように、解析装置10は、インタフェース部11、記憶部12及び制御部13を有する。
インタフェース部11は、データの入出力のためのインタフェースである。インタフェース部11は、例えばマウスやキーボード等の入力装置を介してデータの入力を受け付ける。また、インタフェース部11は、例えばディスプレイ等の出力装置にデータを出力する。また、インタフェース部11は、他の装置との間でデータの通信を行うためのNIC(Network Interface Card)等の通信インタフェースであってもよい。
記憶部12は、HDD(Hard Disk Drive)、SSD(Solid State Drive)、光ディスク等の記憶装置である。なお、記憶部12は、RAM(Random Access Memory)、フラッシュメモリ、NVSRAM(Non Volatile Static Random Access Memory)等のデータを書き換え可能な半導体メモリであってもよい。記憶部12は、解析装置10で実行されるOS(Operating System)や各種プログラムを記憶する。記憶部12は、例えば文法情報121及び解析結果情報122を記憶する。
文法情報121は、所定のパターンを記述した言語の情報である。例えば、文法情報121は、後述するV-PEGで記述された情報である。なお、文法情報121は、あらかじめ記憶部12に記憶されていてもよいし、解析対象の文字列とともに解析装置10に入力されてもよい。
解析結果情報122は、構文解析の途中経過及び最終的な結果を示す情報である。例えば、解析結果情報122は、後述するPackrat Parsingで用いられるメモテーブルを含むものであってもよい。
制御部13は、解析装置10全体を制御する。制御部13は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)等の電子回路や、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)等の集積回路である。また、制御部13は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、内部メモリを用いて各処理を実行する。また、制御部13は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、制御部13は、解析部131、追加部132、抽出部133、判定部134及び表示制御部135を有する。
解析部131は、所定の終端記号に変数を対応付けたPEGで記述された文法を基に、第1の文字列の構文解析を行う。解析部131は、文法情報121及び解析対象の入力を受け付け、解析結果情報122を出力する。
ここで、本実施形態では、所定の終端記号に変数を対応付けたPEGをV-PEG(Parsing Expression Grammar with Variable Bindings)と呼ぶ。V-PEGにおける文法Gは、G=(N,Σ,R,V,eS)のように表される。Nは非終端記号の有限集合である。Σは終端記号の有限集合である。Rはルールの有限集合である。Vは変数の有限集合である。eSは開始表現である。ルールはA=eのように記述される。ただし、A∈Nである。また、eは図3に示す通りである。図3は、V-PEGの構文を示す図である。
図4は、構文解析の入出力を説明する図である。図4に示すように、解析部131は、V-PEGで記述された情報201と文字列202の入力を受け付ける。そして、解析部131は、解析結果を出力する。ここでは、解析部131は、CSVのパターンをV-PEGで記述した情報の入力を受け付け、最終的な解析結果として、date、name、ageといった項目名と各項目値を対応付けたデータを出力する。
ここで、文脈に依存しないパターンを解析する構文解析手法として、Packrat Parsingが知られている。Packrat Parsingでは、再帰下降構文解析とバックトラッキング及びメモ化が行われる。Packrat Parsingを実装した構文解析器であるPackrat Parserは、文法と対応した解析用のparse関数を有する。parse関数は、Nを非終端記号の集合とし、Iを入力上の位置の集合とすると、以下のように表現される。
parse : N ×I → I
Packrat Parsingでは、終端記号に対応付けられた変数は不要なので、例えばHTMLの文法であれば以下のように記述される。
HTML::=‘<’Name‘>’HTML*‘</’Name‘>’|‘<’Name‘>’
Name::=[a-zA-Z]+
一方、Packrat Parsingを拡張した構文解析手法であるStateful Packrat Parsingは、文脈に依存するパターンを解析する。Stateful Packrat Parsingでは、下記のようにEBNF(Extended Backus-Naur Form)と3つの関数(scope、bind、match)で文法が記述される。
<EBNF>
HTML=scope(‘<’bind(v,Name)‘>’HTML*‘</’match(v,Name)‘>’)|‘<’Name‘>’
Name=[a-zA-Z]+
scope、bind、matchはHTMLファイルのタグの対応関係を調べるために使われる関数である。このとき、開きタグが連続したHTMLファイル(例えば<a><b><c>…)を従来のStateful Packrat Parsing構文解析器の入力として与えると、開きタグの数に比例して処理時間が指数的に遅くなることが知られている。
ここで、実用上必要となる文脈に依存したパターンはいくつかの関数さえあれば表現できることが知られている(例えば、参考文献1を参照)。
参考文献1:KURAMITSU, K. A symbol-based extension of parsing expression grammars and context-sensitive packrat parsing. In Proceedings of the 10thACM SIGPLAN International Conference on Software Language Engineering (New York, NY, USA, 2017), SLE 2017, ACM, pp. 26-37.
そこで、本実施形態では、Stateful Packrat Parsingのように任意の関数を組み込めるようにするのではなく、必要最小限の関数のみ組み込めるようにしたV-PEGを用いて文法が記述される。例えば、V-PEGでは下記のように文法が記述される。
<V-PEG>
HTML=scope(‘<’bind(v,Name)‘>’HTML*‘</’match(v,Name)‘>’)/‘<’Name‘>’
Name=[a-zA-Z]+
この例では、文法Gは以下のように表される。
G=(N,Σ,R,V,eS)
N={HTML,Name}
Σ={‘<’,’>’,’/’,’a’,…,’z’,’A’,…,’Z’}
R:上記のHTMLとNameのルールの集合
V={v}
eS=HTML
EBNFでは、複数の表現が記号「|」により区分されているのに対し、V-PEGでは、複数の表現が記号「/」により区分されている。例えば、上記のV-PEGでは、HTMLの2つの表現「scope(‘<’bind(v,Name)‘>’HTML*‘</’match(v,Name)‘>’)」と「‘<’Name‘>’」が、記号「/」により区分されている。
例えば、α、βという2つの表現がある場合に、EBNFでは、「α|β」のように記述される。一方、V-PEGでは、「α/β」のように記述される。ここで、α|βは文字列がαにマッチした場合であってもβにマッチするか否かを試行する一方で、α/βは文字列がαにマッチした場合、βにマッチするか否かを試行しない。
例えば、本実施形態において、解析部131は、文字列が表現「scope(‘<’bind(v,Name)‘>’HTML*‘</’match(v,Name)‘>’)」にマッチしない場合、「‘<’Name‘>’」にマッチするか否かを解析する。
追加部132は、第1の文字列の一部であって、解析部131により終端記号に対応することが解析された第2の文字列に所定の属性を付与した要素を、変数に追加する。例えば、追加部132は、属性をキーとし、第2の文字列をバリューとするキーバリュー形式の要素を、配列である変数の右端に追加する。追加部132は、文字列及び属性の入力を受け付け、要素又は要素を追加した変数を出力する。
ここで、HTMLの場合を例に挙げると、属性は「開きタグ」及び「閉じタグ」であってもよい。この場合、HTMLの開きタグは、[a-zA-Z]+、すなわち1文字以上の大文字と小文字のアルファベットのみを囲む「<」及び「>」である。一方、HTMLの閉じタグは、[a-zA-Z]+、すなわち1文字以上の大文字と小文字のアルファベットのみを囲む「</」及び「>」である。
例えば、「<a><c></b>」という文字列をHTMLの文法を基に解析する場合、追加部132は、配列である変数Emに(v1,a)、(v2,b)、(v1,c)のような要素を追加する。v1は属性「開きタグ」に対応するキーである。v2は属性「閉じタグ」に対応するキーである。また、追加部132は、新しい要素を配列の右側に追加していく。
抽出部133は、変数から、各属性の最新の要素を抽出する。例えば、抽出部133は、配列のキーが同じである要素のうち、最も右側にある要素を抽出する。例えば、変数Em=[(v1,a),(v2,b),(v1,c)]である場合を考える。この場合、v1がキーである要素が2つあり、抽出部133は、より新しい(v1,c)を抽出する。抽出部133は、抽出前の変数の入力を受け付け、抽出後の変数を出力する。例えば、抽出部133は、変数Em=[(v1,a),(v2,b),(v1,c)]の入力を受け付け、抽出後の変数Em=[(v1,c),(v2,b)]を出力する。
判定部134は、抽出部133によって抽出された要素が文脈に関する所定の条件に合致するか否かを判定する。HTMLの例では、判定部134は、抽出部133によって抽出された要素の文字列と、第1の文字列における閉じタグの中の文字列が一致するか否かを判定する。前述の例では、抽出部133は、要素(v1,c)を抽出する。すなわち、抽出部133によって抽出された要素の文字列はcである。cは開きタグの中の文字列である。一方、文字列「<a><c></b>」は第1の文字列の一例である。この場合、bは閉じタグの中の文字列である。
抽出部133による抽出後の変数が、Em=[(v1,c),(v2,b)]である場合、判定部134は、開きタグと閉じタグの中にある文字列が同じであるか否かを判定する。この場合、開きタグの文字列はcであり、閉じタグの文字列はbであるため、判定部134は、開きタグと閉じタグの中にある文字列が同じでないと判定する。HTMLのシンタックスでは、開きタグと対応する閉じタグの中の文字列は同じであるため、この判定は、HTMLの文脈上の依存関係に基づいたものである。
図5は、parse関数のアルゴリズムを示す図である。本実施形態のparse関数は、図5の1行目に示すように、変数Emに対しfilter関数がかけられる。従来のStateful Packrat Parsingにおけるparse関数(参考文献2を参照)には、filter関数は含まれない。filter関数は、抽出部133が実行する処理を表すものである。本実施形態のparse関数は、もう1つのグローバル変数Eeの記録は行われない。
参考文献2:FORD, B. Packrat parsing:: Simple, powerful, lazy, linear time, functional pearl. In Proceedings of the Seventh ACM SIGPLAN International Conference on Functional Programming (New York, NY, USA, 2002), ICFP’02, ACM, pp. 36-47.
従来のStateful Packrat Parsingにおけるparse関数では、入力上の位置i、非終端記号A及びグローバル変数の全体が記録される。一方、本実施形態のparse関数では、入力上の位置i、非終端記号A及びグローバル変数の一部が記録される。MSはメモテーブルであり、4つ組を引数に取り3つ組(i’,Em’,Ee’)を返す関数である。domはMSの定義域を返す関数である。5行目のkeyと(j,Em’,Ee’)との間にある棒付きの矢印は、MSの要素を置き換えることを示す記号である。
[第1の実施形態の処理]
図6は、第1の実施形態に係る解析装置の処理の流れを示すフローチャートである。図6に示すように、まず、解析装置10は、V-PEGと文字列の入力を受け付ける(ステップS11)。次に、解析装置10は、parse関数を実行し解析を行う(ステップS12)。そして、解析装置10は、解析結果を出力する(ステップS13)。
図7は、parse関数の処理の流れを示すフローチャートである。図7は、図6のステップS12の処理を詳細を示すフローチャートである。ここでは、解析部131が、parse(A,i,Em,Ee)を実行するものとする。変数Emは配列であるものとする。また、iの初期値は0とする。また、Aは例えばHTMLである。
まず、抽出部133は、A,iとEmにfilter関数を適用したものからなる3つ組(A,i,filter(Em))を用意する(ステップS101)。次に、判定部134は、メモテーブルMsの中に(A,i,filter(Em))に対応する要素が存在するか否かを判定する(ステップS102)。
解析部131は、メモテーブルMsの中に(A,i,filter(Em))に対応する要素が存在する場合(ステップS102、Yes)、Msの中の(A,i,filter(Em))に対応する要素を返す(ステップS103)。一方、解析部131は、メモテーブルMsの中に(A,i,filter(Em))に対応する要素が存在しない場合(ステップS102、No)、A=eとしてparse(e,i,Em,Ee)を実行する(ステップS104)。
そして、解析部131は、parse(e,i,Em,Ee)の戻り値(j,E'm,E'e)をメモテーブルMsに記録する(ステップS105)。さらに、解析部131は、parse(e,i,Em,Ee)の戻り値(j,E'm,E'e)を返す(ステップS106)。
[第1の実施形態の効果]
これまで説明してきたように、解析部131は、所定の終端記号に変数を対応付けたPEGで記述された文法を基に、第1の文字列の構文解析を行う。また、追加部132は、第1の文字列の一部であって、解析部131により終端記号に対応することが解析された第2の文字列に所定の属性を付与した要素を、変数に追加する。また、抽出部133は、変数から、各属性の最新の要素を抽出する。また、判定部134は、抽出部133によって抽出された要素が文脈に関する所定の条件に合致するか否かを判定する。このように、解析装置10は、変数に格納された要素のうち、最新でないものを抽出しないようにする。このため、本実施形態によれば、文脈に依存したパターンに対応した構文解析にかかる時間を短縮することができる。本実施形態によれば、従来の技術では指数関数時間で増加していた処理時間を、多項式時間に抑えることができる。
追加部132は、属性をキーとし、第2の文字列をバリューとするキーバリュー形式の要素を、配列である変数の右端に追加する。また、抽出部133は、配列のキーが同じである要素のうち、最も右側にある要素を抽出する。このように、配列を変数として用いることで、最新の要素を容易に抽出することができる。
解析部131は、HTMLの文法を基に第1の文字列の構文解析を行う。また、追加部132は、第1の文字列における開きタグの中の文字列に、開きタグを示す属性を付与した要素を変数に追加する。また、抽出部133は、開きタグを示す属性の要素のうち最新の要素を抽出する。また、判定部134は、抽出部133によって抽出された要素の文字列と、第1の文字列における閉じタグの中の文字列が一致するか否かを判定する。これにより、HTMLのシンタックスに沿った構文解釈ができる。
[Packrat Parsing]
ここで、本実施形態との対比のために、従来のPackrat Parsingを説明する。ここでは、HTMLの文法が以下のように記述されているものとする。
HTML::=‘<’Name‘>’HTML*‘</’Name‘>’|‘<’Name‘>’
Name::=[a-zA-Z]+
解析対象の文字列を「<a><b></a>」とする。また、parse(HTML,i)は、入力上の位置iからHTMLを解析する関数である。また、parse(Name,i)は、入力上の位置iからNameを解析する関数である。parse関数は引数が定まると返り値が一意に定まる。また、Packrat Parsingでは、parse関数の解析結果を全てメモテーブルに記録しておき、parse関数を既に解析した引数で呼び出した際は解析を実施せずに記録した解析結果を返す。
図8から図16は、メモテーブルの一例を示す図である。図8の上段のテーブルには、解析対象の文字列の各文字とその位置が示されている。下段のテーブルは、HTMLの解析結果(H)とNameの解析結果(N)を記録するメモテーブルである。「?」は初期値(例えばNull)である。ここでは、解析装置10aが解析を行うものとする。
まず、解析装置10aは、parse(HTML,0)を実行する。ここで、i=1の位置にある「a」は、終端記号のNameに対応するため、解析装置10aは、parse(Name,1)を実行する。そして、i=2の位置にある「>」はNameにマッチしないため、解析装置10aは、図9に示すように、parse(Name,1)の解析結果として、Nameのテーブルのi=1の位置に2を記録する。
さらに、i=3の位置にある「<」は、終端記号のHTMLに対応するため、解析装置10aは、parse(HTML,3)を実行する。そして、i=4の位置で、解析装置10aはさらにparse(Name,4)を実行する。i=5の位置にある「>」はNameにマッチしないため、解析装置10aは、図10に示すように、parse(Name,4)の解析結果として、Nameのテーブルのi=4の位置に5を記録する。
さらに、i=6の位置にある「<」は、終端記号のNameに対応するため、解析装置10aは、parse(HTML,6)を実行する。そして、i=7の位置で、解析装置10aはさらにparse(Name,7)を実行する。i=7の位置にある「/」はNameにマッチしないため、解析装置10aは、図11に示すように、parse(Name,7)の解析結果として、Nameのテーブルのi=7の位置にfailを記録する。
parse(HTML,6)は、マッチ失敗になったが、次の条件があるため、解析装置10aは次の条件を試行する。解析装置10aは、i=6にバックトラックし、i=7に進んだところでparse(Name,7)を実行する。図11に示すように、i=7の位置の解析結果は既に存在するので、解析装置10aは再度解析はしない。
その結果、図12に示すように、解析装置10aは、parse(HTML,6)の解析結果であるfailを、HTMLのテーブルのi=6の位置に記録する。さらに、解析装置10aは、i=8に進んだところでparse(Name,8)を実行する。parse(Name,8)の結果、i=9の位置にある「>」はNameにマッチしないため、図1に示すように、解析装置10aは、parse(Name,8)の解析結果として、Nameのテーブルのi=8の位置に9を記録する。
さらに、解析装置10aは、parse(HTML,3)がi=9の位置でHTMLに完全にマッチするため、図1に示すように、parse(HTML,3)の解析結果として、HTMLのテーブルのi=3の位置に10を記録する。ここでは、解析装置10aは、仮にi=10の位置を仮定し、i=10の位置ではHTMLマッチしなかったとみなしている。また、図16のように、parse(HTML,10)の解析結果についても、failとして記録される。
解析装置10aは、i=0にバックトラックする。図16に示すように、i=4の位置の解析結果は既に存在するので、解析装置10aは再度解析はしない。そして、解析装置10aは、parse(HTML,0)の解析結果として、HTMLのテーブルのi=0の位置に3を記録する。
この解析結果によれば、「<a>」と「<b></a>」がそれぞれ別々のHTMLということになる。しかしながら、HTMLでは開きかっこと閉じかっこの中の文字列は同一である必要がある。そこで、このような解析結果を回避するために、本実施形態の判定部134は、文脈に関する所定の条件に合致するか否かの判定を行う。さらに、抽出部133による抽出処理により、判定のための処理時間を短縮することができる。
[その他の実施形態]
第1の実施形態では、グローバル変数が配列である場合を例に挙げて説明した。一方で、グローバル変数は配列以外のデータであってもよい。例えば、グローバル変数はスタックであってもよい。
この場合、追加部132は、属性に対応するスタックに、第2の文字列をpushする。そして、抽出部133は、スタックのtopをpopすることによって抽出する。例えば、スタックが、HTMLの開きかっこに対応するものとする。このとき、追加部132は、開きかっこの中の文字列を第2の文字列としてスタックにpushすることで追加する。このため、最新の要素はスタックのtopに存在することになる。
判定部134は、以下のcheck関数を実行することで開きタグと閉じタグの中の文字列が同じであるか否かを判定する。なお、抽出部133は、文字列が閉じタグにマッチした場合にスタックSのtopをpushする。
check(opening_tag):
if S.empty():
return false
closing_tag= S.top()
return opening_tag==closing_tag
[システム構成等]
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、各装置の分散及び統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散又は統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部又は任意の一部が、CPU及び当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[プログラム]
一実施形態として、解析装置10は、パッケージソフトウェアやオンラインソフトウェアとして上記の解析処理を実行する解析プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の解析プログラムを情報処理装置に実行させることにより、情報処理装置を解析装置10として機能させることができる。ここで言う情報処理装置には、デスクトップ型又はノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やPHS(Personal Handyphone System)等の移動体通信端末、さらには、PDA(Personal Digital Assistant)等のスレート端末等がその範疇に含まれる。
また、解析装置10は、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の解析処理に関するサービスを提供する解析サーバ装置として実装することもできる。例えば、解析サーバ装置は、グラフデータを入力とし、グラフ信号処理又はグラフデータの分析結果を出力とする解析サービスを提供するサーバ装置として実装される。この場合、解析サーバ装置は、Webサーバとして実装することとしてもよいし、アウトソーシングによって上記の解析処理に関するサービスを提供するクラウドとして実装することとしてもかまわない。
図17は、解析プログラムを実行するコンピュータの一例を示す図である。コンピュータ1000は、例えば、メモリ1010、CPU1020を有する。また、コンピュータ1000は、ハードディスクドライブインタフェース1030、ディスクドライブインタフェース1040、シリアルポートインタフェース1050、ビデオアダプタ1060、ネットワークインタフェース1070を有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(BASIC Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1100に挿入される。シリアルポートインタフェース1050は、例えばマウス1110、キーボード1120に接続される。ビデオアダプタ1060は、例えばディスプレイ1130に接続される。
ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、解析装置10の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール1093として実装される。プログラムモジュール1093は、例えばハードディスクドライブ1090に記憶される。例えば、解析装置10における機能構成と同様の処理を実行するためのプログラムモジュール1093が、ハードディスクドライブ1090に記憶される。なお、ハードディスクドライブ1090は、SSDにより代替されてもよい。
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ1094として、例えばメモリ1010やハードディスクドライブ1090に記憶される。そして、CPU1020は、メモリ1010やハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して、上述した実施形態の処理を実行する。
なお、プログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、プログラムモジュール1093及びプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール1093及びプログラムデータ1094は、他のコンピュータから、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
10 解析装置
20 表示装置
11 インタフェース部
12 記憶部
13 制御部
121 文法情報
122 解析結果情報
131 解析部
132 追加部
133 抽出部
134 判定部
135 表示制御部

Claims (6)

  1. 文字列をマッチさせるための表現であって、終端記号と非終端記号により属性に対応する部分が示された表現に、第1の文字列がマッチするか否かを解析する解析部と、
    前記第1の文字列が前記表現にマッチした場合、前記第1の文字列の前記属性に対応する部分のうちの非終端記号にマッチする第2の文字列に前記属性を付与した要素を、変数に追加する追加部と、
    前記変数から、各属性の最新の要素を抽出する抽出部と、
    前記抽出部によって抽出された要素が文脈に関する所定の条件に合致するか否かを判定する判定部と、
    を有することを特徴とする解析装置。
  2. 前記追加部は、前記属性をキーとし、前記第2の文字列をバリューとするキーバリュー形式の要素を、配列である前記変数の右端に追加し、
    前記抽出部は、前記配列のキーが同じである要素のうち、最も右側にある要素を抽出することを特徴とする請求項1に記載の解析装置。
  3. 前記追加部は、前記属性に対応するスタックに、前記第2の文字列をpushし、
    前記抽出部は、前記スタックのtopをpopすることによって抽出することを特徴とする請求項1に記載の解析装置。
  4. 前記解析部は、HTMLの文法を基に前記第1の文字列の構文解析を行い、
    前記追加部は、前記第1の文字列における開きタグの中の文字列に、開きタグを示す属性を付与した要素を前記変数に追加し、
    前記抽出部は、開きタグを示す属性の要素のうち最新の要素を抽出し、
    前記判定部は、前記抽出部によって抽出された要素の文字列と、前記第1の文字列における閉じタグの中の文字列が一致するか否かを判定することを特徴とする請求項1から3のいずれか1項に記載の解析装置。
  5. 解析装置によって実行される解析方法であって、
    文字列をマッチさせるための表現であって、終端記号と非終端記号により属性に対応する部分が示された表現に、第1の文字列がマッチするか否かを解析する解析工程と、
    前記第1の文字列が前記表現にマッチした場合、前記第1の文字列の前記属性に対応する部分のうちの非終端記号にマッチする第2の文字列に前記属性を付与した要素を、変数に追加する追加工程と、
    前記変数から、各属性の最新の要素を抽出する抽出工程と、
    前記抽出工程によって抽出された要素が文脈に関する所定の条件に合致するか否かを判定する判定工程と、
    を含むことを特徴とする解析方法。
  6. コンピュータを、請求項1から4のいずれか1項に記載の解析装置として機能させるための解析プログラム。
JP2022501600A 2020-02-21 2020-02-21 解析装置、解析方法及び解析プログラム Active JP7702933B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2020/007268 WO2021166271A1 (ja) 2020-02-21 2020-02-21 解析装置、解析方法及び解析プログラム

Publications (2)

Publication Number Publication Date
JPWO2021166271A1 JPWO2021166271A1 (ja) 2021-08-26
JP7702933B2 true JP7702933B2 (ja) 2025-07-04

Family

ID=77391887

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022501600A Active JP7702933B2 (ja) 2020-02-21 2020-02-21 解析装置、解析方法及び解析プログラム

Country Status (3)

Country Link
US (1) US11947907B2 (ja)
JP (1) JP7702933B2 (ja)
WO (1) WO2021166271A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115576535B (zh) * 2022-11-10 2023-03-31 商飞软件有限公司 一种表达式解析器

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7552116B2 (en) * 2004-08-06 2009-06-23 The Board Of Trustees Of The University Of Illinois Method and system for extracting web query interfaces
JP2012063868A (ja) * 2010-09-14 2012-03-29 Internatl Business Mach Corp <Ibm> 言語処理パーサーを組み合わせて、組み合わせパーサーを生成する方法、並びにそのコンピュータ及びコンピュータ・プログラム
JP5462819B2 (ja) * 2011-03-01 2014-04-02 日本電信電話株式会社 基本木獲得装置、構文解析装置、方法、及びプログラム
US8997233B2 (en) * 2011-04-13 2015-03-31 Microsoft Technology Licensing, Llc Detecting script-based malware using emulation and heuristics
US10055399B2 (en) * 2014-07-11 2018-08-21 Loring G. Craymer, III Method and system for linear generalized LL recognition and context-aware parsing
AU2019337773B2 (en) * 2018-09-11 2024-02-15 Mastercard Technologies Canada ULC Transpilation of fraud detection rules to native language source code

Also Published As

Publication number Publication date
JPWO2021166271A1 (ja) 2021-08-26
WO2021166271A1 (ja) 2021-08-26
US20230071959A1 (en) 2023-03-09
US11947907B2 (en) 2024-04-02

Similar Documents

Publication Publication Date Title
US12141553B2 (en) Programmatically generating evaluation data sets for code generation models
CN108089974B (zh) 利用定义的输入格式来测试应用
CN111459537B (zh) 冗余代码去除方法、装置、设备与计算机可读存储介质
US20230418565A1 (en) Validating and providing proactively generated code suggestions
US9038033B1 (en) Techniques and mechanisms for web application minification
US12014155B2 (en) Constrained prefix matching for generating next token predictions
US10474482B2 (en) Software application dynamic linguistic translation system and methods
US11775290B2 (en) Detection of API backward compatibility across software versions
CN113050808A (zh) 在输入框中突出显示目标文本的方法及装置
US12530527B2 (en) Random token segmentation for training next token prediction models
JP2023152843A (ja) コード説明可能性のためのコードの強化
KR100692172B1 (ko) 종합 문자열 분석기 및 그 분석 방법
JP7702933B2 (ja) 解析装置、解析方法及び解析プログラム
US9292522B2 (en) Method and system for automating the editing of computer files
CN116028028B (zh) 请求函数生成方法、装置、设备及存储介质
CN111459469A (zh) 项目代码初始化方法、装置及设备
CN119045829A (zh) 一种编译方法、装置、电子设备及可读存储介质
JP7800678B2 (ja) 修正装置、修正方法及び修正プログラム
JP7355211B2 (ja) シグネチャ生成装置、シグネチャ生成方法およびシグネチャ生成プログラム
US20150324333A1 (en) Systems and methods for automatically generating hyperlinks
CN114168189A (zh) 一种Vue项目代码的翻译方法、设备及介质
JP7800679B2 (ja) 検証装置、検証方法及び検証プログラム
JP7424393B2 (ja) 推定システム、推定方法及び推定プログラム
Sochor et al. A refinement based algorithm for learning program input grammars
US20240378257A1 (en) Display control device, display control method, and display control program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220602

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230613

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230809

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231003

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231204

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20240130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20240425

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20250624

R150 Certificate of patent or registration of utility model

Ref document number: 7702933

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350