米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 計算機;電気通信 -> 松下電器産業株式会社

発明の名称 構文チェック装置
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開平7−13968
公開日 平成7年(1995)1月17日
出願番号 特願平5−30983
出願日 平成5年(1993)2月19日
代理人 【弁理士】
【氏名又は名称】蔵合 正博
発明者 永 野 正 / 清 野 正 樹 / 高 橋 雅 則 / 森 秀 子
要約 目的
文書に含まれる文法的な誤りの原因や位置を精度よく指摘することによって文書の作成を支援する。

構成
文書は文切り出し部1によって文毎に切り出され、文単位で構文解析部2への送られる。構文解析部2で文全体の解析に失敗した場合、作成された部分的な木(複数)とルール適用の失敗に関する情報が非文分析部5に送られる。非文分析部5ではそれらを組合せたものを引数として誤りを探すための非文分析規則6を適用する。その結果、誤りの種類が特定され、その種類に応じてメッセージ作成部7でユーザへのメッセージを出力する。また、非文分析部5の前に部分木の優先順序をつける優先度処理部9を付加することによって処理を高速に行なう。
特許請求の範囲
【請求項1】 入力された文書を1文ずつ切り出す文切出し部と、切り出された入力文を構文解析規則を用いて構文解析し、入力文に誤りがあって構文解析が失敗した場合にはその時点までの部分木を出力する構文解析部と、構文解析部が出力した部分木から非文分析規則を用いて入力文の誤りを検出する非文分析部と、検出された誤りに対応するメッセージを出力するメッセージ作成部とを備えた構文チェック装置。
【請求項2】 構文解析部が作成した部分木を構成する部分構造の集合の中から、他の部分木に含まれない部分構造に対して高い優先度を与えて非文分析部に送る優先度処理部を備えた請求項1記載の構文チェック装置。
発明の詳細な説明
【0001】
【産業上の利用分野】本発明は、文書処理および自然言語処理における構文チェック装置に関するものである。
【0002】
【従来の技術】従来、文書作成を支援するために誤文を指摘する技術としては、辞書の見出しにない綴りの文字列を未知語として指摘するスペルチェックや、誤った結果の単語の並び方のパターンをマッチングして、文法的な誤りを指摘するものなどがある。
【0003】
【発明が解決しようとする課題】誤りには、スペルミスと文法的誤りとがあるが、ここでは文法的誤りについて考える。単語の並び方のパターンをマッチングして誤りを指摘する方法では、入力がパターンに完全にマッチした場合には指摘することが可能であるが、修飾語句や活用などの影響でパターンが乱されると、マッチできないため誤りを指摘できなくなる。このような誤りを指摘しようとすると、別のパターンを用意しなければならず、ルールの数が膨大になるばかりでなく、また誤ってヒットしてしまう可能性も大きくなる。また、マッチングにヒットした場合には誤りを指摘することができるが、ヒットしない場合には、誤りに関する情報は何も得られない。さらに、語の欠落に対しては、パターンとして記述しにくいので指摘することが難しい。なお、文法的な間違いについて、置換、欠落、追加などのすべての可能性を予測して間違いを指摘することは理論的に可能ではあるが、これらの可能性は組み合わせが膨大であるため、辞書や構文規則のデータが大きくなり、処理時間がかかり過ぎて実用的でなくなる。
【0004】本発明は、このような従来の問題を解決するものであり、文の中の各種の誤りを単なるパターンマッチングに比べて大きく向上させることのできる構文チェック装置を提供することを目的とする。
【0005】
【課題を解決するための手段】本発明は、上記目的を達成するために、入力された文書を1文ずつ切り出す文切出し部と、切り出された入力文を構文解析規則を用いて構文解析し、入力文に誤りがあって構文解析が失敗した場合にはその時点までの部分木を出力する構文解析部と、構文解析部が出力した部分木から非文分析規則を用いて入力文の誤りを検出する非文分析部と、検出された誤りに対応するメッセージを出力するメッセージ作成部とを備えたものである。
【0006】本発明はまた、構文解析部が作成した部分木を構成する部分構造の集合の中から、他の部分木に含まれない部分構造に対して高い優先度を与えて非文分析部に送る優先度処理部を備えたものである。
【0007】
【作用】本発明は、上記構成により、まず入力された文書は、文切り出し部で1文ずつ切り出されて構文解析部に送られる。構文解析部では、切り出された入力文の構文解析を行なう。入力文に誤りがあって構文解析が失敗した場合、解析の過程でできた部分的な構文木(複数)と失敗情報を非文分析部に送る。非文分析部では、これらの構文木に対して誤りを検出するための非文分析規則を次々に適用する。その結果誤りが発見されれば、メッセージ作成部で対応するメッセージを作成し、ユーザに指摘する。非文分析規則によって誤りが発見できなかった場合は、作成された部分木の位置に基づいて、間違いのありそうな場所に関する情報をユーザに提示する。また、優先度処理部は、構文解析部から出力された部分木に対して優先づけを行ない、優先度の高い順に非文分析規則を適用するようにする。
【0008】
【実施例】図1は本発明の一実施例を示す構文チェック装置のブロック図である。1は入力された文書を1文ずつ切り出す文切り出し部、2は切出された入力文を構文解析して、入力文に誤りがあって構文解析が失敗した場合にはその時点までの部分木を出力する構文解析部、3は構文解析に使用される構文解析規則、4は単語情報を保持する単語辞書、5は構文解析部2が出力した部分木から非文原因を検出する非文分析部、6は誤りを探すときの条件を記述した非文分析規則、7は検出された誤りに対応するメッセージを作成するメッセージ作成部、8はメッセージを作成するときに使用されるメッセージ辞書である。9は構文解析部2が構文解析に失敗して、非文分析部5に渡した部分木を構成する部分構造(ノード)の集合のうち、他の部分木に含まれない部分構造に対して高い優先度を与えて非文分析部5に処理させる優先度処理部である。
【0009】次に、上記実施例の動作について説明する。誤文指摘の対象となる文書は、まず文切り出し部1に入力される。文切り出し部1では、区切り記号などをもとに文書を1文ずつに切り出して構文解析部2に送り出す。入力文が構文解析部2に入力されると、構文解析部2は文頭から解析を初め、構文解析規則3と単語辞書4を引きながら構文解析木を成長させる。構文解析規則3の中のある規則が成功した場合、その結果出来た部分木を保存しておく。以降この部分木のことを「成功ゴール」と呼ぶ。成功ゴールは部分木であるから、その部分木に含まれる各単語の品詞や活用形、各枝の範疇や役割、文中における位置などの情報を含む。構文解析のアルゴリズムが同じ部分木を何度も生成しうるものである場合には、全く同じ部分木が重複して登録されないようにチェックする。本実施例では構文解析プログラムであるパーザに範疇を予測しながら木をボトムアップに成長させる構文解析アルゴリズムを用いた例で説明する。解析の途中である範疇が予測されていながらその範疇をルートとする木の生成に失敗することがある。この場合には失敗した範疇名とその文中における位置を保存しておく。以降この範疇名と位置の2つの情報をもつ失敗の痕跡のことを「失敗ゴール」と呼ぶ。なお、本実施例では構文解析部2が文頭から木を成長させていくので、文中に誤りがあると、それ以降の部分では部分木ができない場合もある。大きく成長した木の属性の多くはその木の部分木の中で主要な役割を果たすものの属性が継承される。このようにしてどの部分木にもその木(範疇)としての属性が構造や含まれる単語に応じて登録されているようにできる。構文解析が成功した場合はそこで処理が終る。構文解析が失敗した場合、作成された成功ゴールと失敗ゴールが非文分析部5に送られる。
【0010】非文分析部5では、非文分析規則6を適用する。各非文分析規則6には、(1)幾つかの範疇名(品詞も含む)、(2)それらの間の位置関係、(3)各範疇の成功ゴール/失敗ゴールの区別、の3つを起動条件として記述できる。例えば、英語の冠詞とそれがかかる名詞の単数/複数に関する矛盾を抽出する規則であれば、(1)は冠詞と名詞句主部、(2)はこれらが冠詞、名詞句主部の順序で隣接していること、(3)は両方とも「成功ゴール」であること、となる。"a boys"といった間違いに対してこのルールが適用できる。ここで名詞句主部は、形容詞などの修飾語句がかかっていても部分木として成立するので、「a + sのつく語」といったパターンマッチングではできない「a good boys 」のような形に対しても誤りを検出することができる。また、複数形であるかどうかといった属性は構文解析部2が解析木を作る段階で木の属性として登録されるので、「木の属性」のみに着目することによって、同種の誤りに対しては表層的には違うパターンであっても1つの規則によって誤りを判定でき、規則数の増加を防ぐことができる。
【0011】非文分析部5は、各非文分析規則6の(1)、(2)、(3)の条件に合致する成功ゴールや失敗ゴールの全ての組み合わせを入力から抽出してその規則を適用する。全ての組み合わせを抽出する方法は、部分木を位置やルートの範疇名でソートするなどよく知られているアルゴリズムを使用すればよい。各非文分析規則6の内部では、規則(1)のそれぞれのゴールに対して必要なら属性の検査を行ない、矛盾を抽出する。英語であれば、例えば時制や単数/複数の一致などがチェックされる。なお、属性のチェックを行なわないルールもある。範疇間で矛盾が検出された場合、必要であれば他の矛盾しない解釈がないかどうかがチェックされる。これは多くの場合、文中の位置と範疇名が同じで属性のみ違うものがないかどうかを検査することによって行なう。この検査によって他の矛盾しないような解釈が見つからなければ、誤りの種類(識別子)と関連するゴールをメッセージ作成部7に出力する。
【0012】メッセージ作成部7では、非文分析部5から識別子が送られると、矛盾の種類に応じたメッセージをメッセージ辞書8から取り出す。対応する語句などを入力文や部分木から抽出し、メッセージ内に埋め込むなどの処理を行なって最終的なメッセージを合成する。また、上記の処理でどの非文分析規則6によっても矛盾が検出できなかった場合には、文中において成功ゴールが作成されている範囲をメッセージにしてユーザに提示する。これは非文分析部5が誤りを検出しないまま処理を終了した場合、特別な誤り識別子を生成することによって実現できる。
【0013】次に、以上の動作を実際の例文に基づいて説明する。対象言語は英語とする。以下の説明では、英語の品詞について、名詞をN、一般動詞をV、be動詞をBE、前置詞をP、代名詞をPN、冠詞をDET、形容詞をADJなどと表わすことがある。また、構文解析木が重要な役割を果たすが、そのノードとなる範疇名について、文をS、名詞句をNP、動詞句をVP、不定詞句をINF,名詞句主部をNHなどと表わすことがある。
【0014】"He drank a cold water." という入力文を例として説明すると、これは water(水)という不加算名詞に単数を表わす不定冠詞 "a" がかかっている点が文法的に誤っている。(口語としては"a cup of water"が省略された形、といった解釈もありうるかも知れないが、ここでは文法的な誤りとする。)この文は文切り出し部1によって前後の文から切り離され、構文解析部2に入力される。この入力文は誤りを含んでいるので、構文解析部2では完全な解析に失敗する。しかし、途中まで解析した結果、図2(a)のような部分木ができる。これを成功ゴールと失敗ゴールとして表わしたのが図2(b)である。成功ゴールは範疇名とその支配する範囲が示されている。実際にはさらに内部構造と文法的属性を持つ。失敗ゴールは文中における開始位置と範疇名が示されている。他の図についても成功ゴールと失敗ゴールの記述法は同様とする。
【0015】ここで図3のような構文解析規則があるとする。各規則を適用する際には属性の一致などがチェックされ、条件が満たされなければ失敗する。この規則を図2のような部分木のできる過程に当てはめて説明する。文頭において規則1によってNPが予測され、規則2によってPNが予測されるが、単語"He"の属性がPNであるので予測が満たされ、成功ゴールPNができ、更に成功ゴールNPができる。これによって規則1の次の要素であるVPが予測され、更に規則6によってV(他動詞)が予測され、"drank"が他動詞であることから、成功ゴールVができ、規則6の次の要素であるNPが予測される。さらに規則3によって成功ゴールDETと成功ゴールNHが予測され、かつ作成される。しかし、この段階で、規則3に基づいてNPを作成しようとするとき、属性(加算/不加算)の不一致によって成功ゴールNPの作成は失敗する。このとき、”a”の位置から始まるNPが失敗したという情報が「失敗ゴール」として登録される。ここまでで、図2のような成功ゴールと失敗ゴールができることがわかる。なお、以上の構文解析部2の規則や動作は非文分析を行なう上で重要なもののみを述べたが、多くの言語現象をカバーするようにするためには規則数はこれよりずっと多くする必要があり、1つの単語の品詞や属性も複数ある場合が多いので、成功ゴールや失敗ゴールは上にあげたもの以外にもできる。特に失敗ゴールは非常に多くでき、この時点ではどのゴールが誤りにつながる本質的なものかはわからない。
【0016】以上のようにして作成された図2(b)の成功ゴールと失敗ゴールが非文分析部5に送られる。非文分析部5では、図2(b)において隣合った範疇に対して非文分析規則を適用する。非文分析規則の例を図4に示す。図4の規則Aの引数である隣合った成功ゴールDET,成功ゴールNHの組合せは、入力の中の成功ゴールDET(="a"),成功ゴールNH(="cold water") の部分に適合する。従って、これらを引数として規則Aが適用される。このとき、成功ゴールDETの中には"a" の属性「加算」、「単数」などが登録されている。また成功ゴールNHにはその中の主部である名詞"water" の属性が成功ゴール全体の属性として継承されるので、「不加算」などの属性が成功ゴールに登録されている。規則A内でこれらが参照され、「加算」と「不加算」がそれぞれ検出されたことにより「誤り1」が成立していると判定される。次に他の解釈がないかどうかが調べられるが、"water"には加算名詞であるような別の意味はないことなどがわかり、矛盾しないような別の解釈はないことがわかる。これにより、識別子「誤り1」と成功ゴールDET,成功ゴールNHがメッセージ作成部7に送られることになる。
【0017】メッセージ作成部7では、エラーの種類に対応したメッセージをメッセージ辞書8から取り出し、わかりやすいように成功ゴールの情報をメッセージ内に組み込む。この文の場合は、識別子「誤り1」から「 *と*の加算/不加算が矛盾しています。」というメッセージがメッセージ辞書8から取り出され、これに入力された成功ゴールDETからの単語"a" と、成功ゴールNHからの中心単語"water" とが組み込まれ、「"a" と"water" の加算/不加算が矛盾しています」というメッセージが作成され、ユーザへ出力される。
【0018】次に、"This is pen."という入力文を例として別の動作を簡単に説明する。この場合、"pen" の直前に冠詞"a" が欠落している。このような欠落は単語レベルのパターンマッチングによっては検出できない。構文解析部2における解析結果を図5に示す。なお、失敗ゴールは実際には図中のもの以外にも生成されるがここでは省略する。構文解析部2では、"This is" の後にNPが予測されるが、"pen" だけではNPを構成しえないので、この位置に失敗ゴールNPができる。非文分析部5においては、"pen" の位置の成功ゴールNHと失敗ゴールNPを引数として図4中の規則Bの適用が成功し、「誤り3」が検出され、メッセージ作成部7に送られる。メッセージ作成部7では、「誤り3」に対応するメッセージ「*の前に冠詞が抜けています」がメッセージ辞書8から取り出され、成功ゴールNHから表層の"pen" が抽出されて「"pen" の前に冠詞が抜けています」というメッセージが合成され、ユーザに出力される。
【0019】最後の例として"I went have been to the island." という誤文に対する動作を述べる。これは、最初"I went to the island."と書こうとして途中で"went"を"have been" に直そうとしたが、"went"を消すのを忘れた、という状況を想定している。この場合の分析例を図6に示す。この場合"I went"の直後に予期しない語が来たためにこの位置での予測がすべて失敗する。このため、heve以降では成功ゴールができない。さらに成功ゴールと失敗ゴールを組み合わせても明確な誤りは検出できない。非文分析部5では、このように成功ゴールのできていない場合は、特別な識別子「検出失敗」を作成し、これと成功ゴールのできている範囲をメッセージ作成部7に送る。これを受けてメッセージ作成部7では、解析できない範囲を指摘するメッセージ「"have been to the island."が解析できません」を合成して出力する。このようにして明確な誤りの特徴が抽出できなかった場合にも、誤りの位置に関する情報をユーザに示すことができる。
【0020】次に、優先度処理部9の動作について述べる。構文チェック装置において、構文解析規則や1つ単語に対する品詞や属性の曖昧性が増大すると規則を適用すべき位置の組み合わせが増大し、処理時間がかかる。これに対処するため、優先度処理部9を付加することにより、処理を高速化することができる。この高速化は、「大きい部分木はそれだけその木の作成過程において多くの予測が成功したことになり、その構造がユーザの意図するものである可能性が高い」という性質と、「大きい部分木はそれを構成する小さい部分木の重要な属性を継承する」という構文木の性質を用いて、なるべく早く誤り位置に到達するような部分木の優先づけを行ない、平均的な処理時間を短縮するものである。
【0021】まず、構文解析部2から出力された成功ゴールと失敗ゴールは、一旦優先度処理部9に入力される。優先度処理部では、入力された成功ゴールに対して、その文中における開始位置と終了位置によってグルーピングを行なう。開始位置と終了位置がともに等しい成功ゴール同士は同じグループに属する。グループの中で位置が互いに隣接するものを用いて「列」を作る。グループAとグループBが隣接するとは、グループAの終了位置とグループBの開始位置とが等しいことである。「列」はいくつかの互いに隣接したグループによって生成される。列は文頭を開始位置とし、その終了位置を開始位置とするグループが無いように作る。これに違反するものは列として数えない。列に属するグループの数を以後「優先度」と呼び、この数が小さいことを「優先度が高い」と呼ぶことにする。優先度処理部9はまず最も優先度の高い列を構成するグループに属する成功ゴールのみを抽出する。ここで最も優先度が高い列だけを作成する必要があるが、これにはグループの中で「自分の範囲を完全に含むような範囲を持つ他のグループが存在しないグループ」だけを抽出し、抽出したグループのみを組み合わせて列を作るとよい。この列の中に最も優先度の高いものが全て含まれる。もし最も優先度の高い列が複数存在すれば、それらの全てから成功ゴールを重複しないように抽出する。また、失敗ゴールの中で、その開始位置が抽出した列の中の各グループの開始位置のどれかに一致するものだけを抽出する。なお、どの成功ゴールおよび失敗ゴールを抽出したかは優先度処理部9内に記憶しておく。抽出した成功ゴールと失敗ゴールは非文分析部5に送られる。非文分析部5では、これを入力として上記と同様の処理を行ない、誤りが検出されればユーザにメッセージを出力してこの文に関する処理を終了する。この場合、優先度処理部9もその文に関する処理を終了する。矛盾が検出されずに終った場合は、それを優先度処理部9に通知する。この場合、成功ゴールと失敗ゴールは非文分析部5内に保存しておく。優先度処理部9では、この通知をうけて処理を続行する。まず、前回の優先度の値に1を加えた数を優先度として持つ列ができないかどうかを調べる。そのような列を作成するには、前回の優先度をnとすると、前回作成した列の中で優先度n+1を持つものを全て収集し、さらに前回作成した優先度nを持つ列に対してそれを構成するグループのどれかを2分割することによって得られる列を全て生成すればよい。このようにしてこの優先度の列を作ることができればその列に含まれるグループの中で以前に選択されたことのないグループを抽出し、それらのグループに含まれる成功ゴールと、これらのグループと開始位置が一致する失敗ゴールを非文分析部5に送る。非文分析部5では、新しく入力されたゴールと以前からあったゴールを組み合わせてルールを適用する。ここで、新しく入ってきたゴールが適用規則の引数の1つとして含まれる場合にのみルール適用する。これは以前と全く同じ引数でルールが適用されることを防ぐためである。以後、同様にして優先順位を1つずつ減少させながら矛盾が検出されるまで処理を続ける。なお、矛盾が検出されない場合は特定の(最初の優先度に対する)相対優先度で処理を打ち切ってもよい。
【0022】図7(a)に"The stars are saw at night." という誤文の解析結果を示す。これを例として優先度処理部9の動作を説明する。この文はsaw を過去分詞形"seen"にすれば正しい文となる。図7(a)の成功ゴールをグループに分けたのが図8である。図8において、「自分の範囲を完全に含むような他のグループがないもの」は、グループa,d,eだけである。aとd、dとeはそれぞれ互いに隣接しており、aは文頭を開始位置とし、eの終了位置(文末)を開始位置とするグループはないから、“ade”が最も優先度の高い列の1つになる。a,d,eの組合せで「列」の条件を満たすものは“ade”以外には存在しないから、これが唯一の「優先度3」の列となる。以上のようにして、図7(b)のような成功ゴールと失敗ゴールがまず選択され、非文分析部5に送られる。非文分析部5では、"are" の構成するBEと"saw at night"の構成するVPの間でルールが適用され、VPの属性が過去分詞でないことから誤りが判定される。誤りが判定されたので、ここでこの文に対する処理は終了する。このようにして、非文分析部において適用対象となるゴールを絞り込むことができる。
【0023】以上のように、上記実施例によれば、まず対象となる文に対して、全体として失敗したとしても中間結果として生成された部分的な木が残るように構文解析を行ない、これらの部分的な木についての情報を保持し、それらの木がそれ以上成長できなかった原因を、その木の属性や回りの他の木の属性を参照することによって判断する。具体的には、人間が犯しやすい誤りを木同士の相対位置や木の属性によって記述した規則を用意しておくことによって各種の誤りを検出する。部分木を単位として誤りの探索を行なうので、パターンの乱れは部分木の構造の多様性によって吸収され、単語レベルのマッチングと比較して少ないルールで多くの誤りを検知でき、精度を大きく向上させることができる。
【0024】また、登録された誤り規則にヒットしなかった場合にも、構文解析が失敗したことによりどこかに誤りが含まれているということがわかるため、それまでに生成された木がどの範囲に分布しているかを調べることなどにより、誤りが発生している位置に関する情報をユーザに提供することができる。
【0025】さらに人間の犯しやすい誤りをもとに規則を作成しておくことができるので、すべての置換、欠落、追加の可能性を考えるよりもはるかに探索空間が小さくなり、実用的な分量の辞書や構文規則に対応することができる利点がある。
【0026】
【発明の効果】以上のように、本発明によれば、修飾などのパターンの崩れに左右されずに誤りを指摘することができ、また語の欠落など従来扱えなかった種類の誤りを指摘でき、さらに誤りの検出に失敗した場合でも、誤りの位置に関する情報を出力することができ、構文チェックを大量の規則と語彙に対して高速に実行することができるという効果を有する。




 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013