(57)【特許請求の範囲】
【請求項１】
文字列からなるテキストデータを入力する入力手段と、
文字種や単語列のパターンにより定義される文字列分解規則を格納する手段と、
所定の統制用語集を格納する手段と、
前記文字列分解規則に基づき前記統制用語集内の用語をあらかじめ構成要素ごとに切断し、該切断された部分文字列と該部分文字列が含まれる統制用語とを対応付けて保持する部分文字列辞書を作成する手段と、
作成された該部分文字列辞書を格納する手段と、
前記部分文字列辞書を参照し、前記テキストデータ中に出現する前記部分文字列を検索するテキスト検索手段と、
検索された前記部分文字列のうち、共通の統制用語に対応する部分文字列を結合する手段と、
前記結合文字列と前記テキストデータに含まれる文字列との位置関係と、前記結合文字列と前記統制用語との位置関係とに基づき、前記結合文字列の被覆コストを計算する手段と、
前記被覆コストが所定値以下となる結合文字列を選択し、出力する出力手段と、を有することを特徴とする表記ゆれ処理システム。
【請求項２】
請求項１に記載の表記ゆれ処理システムにおいて、
前記被覆コストは、統制用語制限性コスト、結合処理コスト、及び、完成文字列間連接コストに基づいて計算されることを特徴とする表現ゆれ処理システム。
【請求項３】
請求項１に記載表記ゆれ処理システムにおいて、
前記テキスト検索手段は、ハミング距離があらかじめ指定した値以下もしくは、編集距離があらかじめ指定した値以下の近似部分文字列を検索することを特徴とする表記ゆれ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テキスト中に含まれる表記ゆれ単語を、統制用語に変換する手法に関する。
【背景技術】
【０００２】
整備済みの辞書を用いる自然言語処理の多くのアプリケーションでは、様々な表記ゆれの存在が実用面での大きな障害となっている。例えば、バイオメディカル分野の文献では、タンパク質名の省略やニックネーム、また別々の研究者により独立に発見された同一タンパク質の存在が、相互作用情報抽出などのタスクを著しく困難なものとしている。また、医療機関で作成されるカルテや読影レポート、毎月の診療報酬請求書等の書類も、医師・診療科により用語や表現が多種多様であり、文書検索を行う場合、検索漏れが生じる可能性がある。そのため、バイオメディカル分野では、用語の標準化を目的として、UMLS(Unified Medical Language System)、SNOMED、SNOMED-CT (Systematized Nomenclature of Medicine-Clinical Terms)、Gene Ontology、Mesh Term、ICD10（国際疾病分類）など、辞書・シソーラスの整備が精力的に行われている。但し、タイプミスやこれらの辞書でカバーしきれない表記ゆれについては、近似文字列検索技術で補う必要がある。一般に、２つの文字列間の類似度を図る尺度としては、編集距離共通最大部分文字列長、構成文字を要素とするベクトル空間法に基づく類似度が提案されている。また、類似文字列を検索する方法としては、DPマッチによる方法、類似検索による方法、表記ゆれパターンを展開する方法等が知られている。
【０００３】
DPマッチによる方法では、一方の文字列を他方に変換するのに最低限必要な、文字の挿入・削除・置換操作の回数（編集距離）を計算する。編集操作のうち、文字列の長さが等しく、置換操作だけを許した場合の編集距離をハミング距離という。テキストＴ中からパターンＰとの編集距離がk以内の部分文字列を全て取り出す計算量Ｏ(kn)のアルゴリズムが知られている（非特許文献１、非特許文献２）。
類似単語検索により表記ゆれ処理を行う手法として、特開平8-69474、特開2005-11078等が知られている。特開平8-69474では、入力単語の文字単位n-gramと、別に用意した置換候補文字列により置換した文字列のn-gramからベクトルを構成し、類似文書検索等で用いられるベクトル空間法により、類似単語検索を行っている。特開2005-11078でも、部分文字列をベクトル要素とする類似文字列検索を行うが、特徴素としては、特に文字列に限定してはいない。
【０００４】
【特許文献１】特開平8-69474
【０００５】
【特許文献２】特開2005-11078
【非特許文献１】G．Navarro、 A Guided Tour to Approximate String Matching、 ACM Computing Suveys、2001.
【非特許文献２】Dan Gusfield、 “Algorithms on Strings、 Trees、 and Sequences: Computer Science and Computational Biology”、 Cambridge Univ Pr (Sd)、、1997.
【非特許文献３】A．Acho and M．Corasick、 Efficient string matching:an aid to bibliographic search、 Comm．ACM、 18:333-40、 1975
【非特許文献４】G．Navarro、 R．Baeza-Yates、 and J．M． Arcoverde、 Matchsimile:A flexible approximate matching tool for personal names searching、 In Proceedings of the XVI Brazilian Symposium on Databases、 pp228-242、2001
【発明の開示】
【発明が解決しようとする課題】
【０００６】
派生語をあらかじめ登録する方式では、OCR認識後の誤読・不読のパターンを全て生成しておくことは不可能である。また、DPマッチを用いて近時文字列検索を行う方法は、ユーザーが入力した単一単語について、テキスト中の近似文字列もしくは、辞書中の近時文字列を検索するアプリケーションには有効に働くが、数千、数万オーダーの辞書の文字列について同時にDPマッチを行うことは、実行速度の面で現実的ではない。テキストT中から、複数パターンPとの編集距離ｋ以内のパターンを全て探索する問題は、inexact set matching problemと呼ばれる（非特許文献２、３）。suffix treeとDPマッチを組み合わせた非特許文献４）が提案されているが、共通文字列が繰り返し多く現れない限り、suffix treeを構成する効果があまりでない。
【０００７】
また、suffix treeやDPマッチをそのまま用いる手法では、語順の違いを適切に扱うことができない。例えば、統制用語辞書の一つである、磁気レセプト電算処理用診療行為マスターを例にとると、「大塚生食注２０mL」と「生食注（大塚）20mL」は、編集距離は大きいが同一用語である。
【課題を解決するための手段】
【０００８】
上記課題を解決するため、本発明では、以下に述べる手法を考案した。
[1] 統制用語の部分文字列による近似文字列検索
[2] 正規化規則
[3] 同義語定義
[4] 完成度の定義
[1]により、挿入、欠損、だけでなく語順の違いによる表記ゆれを吸収できる。[2]により、半角全角、大文字小文字のほか、「０」ゼロと「Ｏ」オー等の文字認識に起因する表記ゆれを吸収することができる。[3]により、本手法の適用範囲を拡大することができる。[4]により、[1],[2],[3]を入力テキストに適用した結果出現する複数の統制用語の候補の中から、最も可能性の高い用語の組み合わせを選択することができる。
【発明の効果】
【０００９】
本発明により、テキスト中から、誤読、不読、タイプミスや、語単位の転置による表記ゆれを吸収して、適切な統制用語辞書の組み合わせを検索・抽出することができる。
【実施例１】
【００１０】
図１に、本発明における表記ゆれ処理フローを示す。レセプト摘要欄画像をOCRで読み取り、出力結果テキストから、表記ゆれを吸収して、あらかじめ用意した統制用語に相当するものを検索し、統制用語のコードに変換する課題を例として実施例を述べる。摘要欄に出現するテキストは、以下のような特徴を持っている。
１）  各行は、診療行為、調剤行為、薬剤名、医療材料名の羅列
２）  行中の項目数はあらかじめ不明
３）  挿入欠損置換転置による表記ゆれが存在する。
４）  コード化と無関係な文字列が存在する
＜統制用語辞書の前処理＞
まず、ステップ105により、統制用語を構成素に分解する。分解方法として、事前定義した分解規則に従うもの、機械的にn-gramに分解したもの、形態素解析を利用したものなどが考える。事前定義した分解規則に従う方法の例として、括弧の有無、数量・分量を表す表現、ハイフン、スペースの有無、文字種の切れ目等が考えられる。図3に分解規則の例を示す。例えば規則303、304では、アルファベットに続く漢字とカタカナを分解することを示している。また、特定の用語やパターンの場合は分解規則を適用したくない場合もあり得るため、例外規則も設けた。例えば、「Ｓ−Ｍ」、「Ｃ３」等、分解しないことが適当と思われるパターンについては分解を行わないこととした。これは本発明が転置による表記ゆれを吸収する手法であるため、語順を変えた「ＭＳ」や「３Ｃ」にマッチする可能性があるためである。従って、目安としては、語順の変換により別の統制用語に照合する可能性が少ない単位に分解することが望ましい。これは、統制用語を一旦分解した後、転置した文字列の頻度を数えるなどして機械的に行うことも可能である。但し、仮に部分文字列として登録した場合でも、後に述べる動的計画法による最小コスト解の探索手段により、最適解を選択することも可能である。
【００１１】
分解した要素は、その種類に応じて重み付けを行う。図２に、分解要素を重みづけした例を示す。201、204、210は、それぞれ統制用語を表す。202、203は、201を分解規則により分解した際にできる部分文字列をあらわす。この場合、「括弧内の要素とそれ以外は分解」という規則に従い、統制用語を分解している。括弧外の要素である202は、221で示すように重みが最も高い。括弧内の要素である203は、222に示すように重みが相対的に低い。204は、205〜209の要素に分解される。先ほどと異なるのは、208の場合であり、225に示すように重要度が最も低い。これは、「を要する」という言葉があってもなくても、統制用語への変換を判断する際に不要と考えられるためである。このように、特定の用語に関しては、重み定義ファイルを別に用意する。205と206の分解を行うため、「形成術」という単語を登録している。また、図９の901に示すように、切断するパターンを登録してもよい。901は、「活性化部分」という文字列が、「活性化」と「部分」に分解されることを表している。その他、一般的な形態素解析技術により構成語に分解することも考えられる。統制用語210は、211〜215の要素に分解される。211と212は「カタカナ列＋アルファベットは分解」という規則に従って分解され、212と213は、213と214をあわせた「３７５ｍｇ」が数量を表すと判断されるため、その前後と分解される。統制用語のある部分が数量を表すかどうかは、例えば正規表現等を用いて定義する。213と214は数量を表すため、223に示すように、211や212と比べて相対的に重みを低くしている。
【００１２】
分解された部分文字列は、文字列正規化手段106によって正規化される。図5に、正規化規則の一部を示す。正規化処理では、半角はすべて全角に直し、小文字も大文字に変換する。また、ハイフン（規則501）、括弧（規則502,503）、句読点についても、それぞれ一つの標準文字を決め、すべてそれに変換する。504の規則のように、誤読や不読で生じる表記ゆれに対応するため、ゼロ「０」とオー「Ｏ」などのように、文字認識上区別が困難なものを一つの文字に変換することも有効である。これは、入力テキストに適用する正規化規則と同じものにしておく必要がある。
【００１３】
分解された部分文字列は、由来する統制用語を識別するID情報が分かる形で保持しておく。複数の統制用語から同じ部分文字列が生成されることもあるため、文字列対ID情報は、１対多の関係になる。図４に部分文字列辞書の例を示す。例えば402は、「内服」という部分文字列が、ID番号の120000710、610412017の可能性があることを示しており、元の統制用語が「調剤料（内服・浸煎薬薬・屯服）」、「アレルナート内服薬用」であり、統制用語としての完成度が、初期状態で、10％と20％であることを表している。以降、図４で例示したような、拡張・分解処理によって作成された文字列辞書のことを、部分文字列辞書と呼ぶことにする。
＜部分文字列を用いた入力テキストの被覆＞
入力テキストを処理する段階では、上記前処理で作成した部分文字列辞書の要素を、入力テキストに貼り付ける処理を行う。変換対象となる入力文字列に対し、まず手段109により正規化処理を行う。ここで適用する正規化規則は、統制用語に適用するものと正確に一致する必要がある。逆に、入力と統制用語と両方に同じ正規化規則を適用する限り、無意味にならない範囲で、どんな正規化規則も適用可能である。これらの文字列の区別をあいまいにすると、部分文字列と入力テキスト間で、正しくない照合が起こり得るが、後段のコスト最小解探索処理で、正しい解を選択できるようにする。
【００１４】
次に、手段110により、正規化処理済みの入力テキストに、上記部分文字列辞書の要素のうち、可能なものを全て貼り付ける。貼り付け処理には、exact matchを用いるものが最も高速である（exact set matching problemと呼ばれ、線形時間で解けることが知られている）。図６に、入力テキストに部分文字列を貼り付けた初期状態を示す。60は入力テキストの例を表す。このテキストは、「初診（病院）」と「紹介患者加算４」の２つの統制用語の内容に対応するのが正解である。先頭２文字については、IDとして111010070を持つ611がexact matchし、3〜8番目には、異なるIDを持つ部分文字列612がexact matchする。10〜11には、部分文字列615がexact matchする。他にもそれらと交差するように、2〜6に対応する部分文字列613や、6〜8に対応する部分文字列614など、可能なものを全て網羅する。
【００１５】
表記ゆれにたいする頑健性を高めるには、部分文字列と入力テキストの対応処理において、編集距離がk以内の全ての部分文字列を探すk-difference inexact match、もしくはハミング距離がｋ以内の全ての部分文字列を探すk-mismatch inexact matchを実行することが望ましい。前者については、パターンの長さnに対して計算オーダーＯ（ｋｎ）のアルゴリズムが知られているが（非特許文献２）、ｋの値が大き過ぎると、計算コストが高くなると考えられる。それに比べ、k-mismatch inexact matchの方は計算コストが低い。k-mismatch inexact matchは、文字列の置換のみをk回許すものであるため、漢字の異体字や、タイプミス、文字列が一部読めない歯抜けのようなテキストに有効である。図8の801、802、803は歯抜けテキストの例である。それぞれ「？」は、何らかの文字があるが何かは分からないということを示している。このような例は、OCR読み取り結果の形式の一つとして見うけられる。部分文字列の貼り付けのコストが高いかどうかは、文字列が完全一意するか、部分一致するかという一般的な尺度の他に、共通する候補IDをもつ部分文字列が、当該文字列の近くにあるかどうかで判断する。近くにあればあるほど、その文字列の配置コストは低くなる。
＜部分文字列どうしの結合＞
次に、手段111により、テキスト上に配置された部分文字列間の結合処理を行う。図7を用いて、配置済み部分文字列を結合する処理について説明する。基本的には隣接部分文字列間のID集合間の積集合を計算する。積集合が空でない場合、それらを結合した範囲に対応する新たな部分文字列を追加する。例えば712と715に着目すると、111010070という共通IDが存在する。そこで、712と715を結合した、719という部分文字列を追加する。同様に、711と712から、別のIDを積集合とする716を追加する。共通IDの積集合を計算する本処理により、語順の違いを許した文字列照合が可能となる。以上の結合処理を、追加される文字列も含めて、すべての可能な部分文字列の間で実施する。
＜ギャップを許した結合＞
前記結合処理において、隣接部分文字列間のみならず、離れた部分文字列間についても、積集合が空でない組み合わせが存在する。それらの組み合わせに関しては、ギャップの存在による結合コストを課して結合してもよい。結合コストの上限を設けるか、結合文字列間の距離を制限することで、本処理による速度の著しい低下を防ぐことができる。この処理により、無視可能な文字列やタイプミス等によるゴミが挿入している場合にも対処することができる。
＜被覆のコスト＞
以上のような部分文字列間の結合処理を繰り返すことにより、候補コード番号が唯一になる部分文字列や、元の統制用語の文字列をほぼ再現する部分文字列が出現してくる。これらの部分文字列のうち、コストがある閾値以下のものを解として出力する。ただし、それぞれの解候補であるテキストの部分文字列は、テキスト上で重なり合うこともあるため、入力テキストを最も適切に覆う文字列の組み合わせを探索する必要がある（手段112）。この組み合わせパターンの一つを、以降“被覆”と呼ぶことにする。各被覆間で優先順位をつけるため、“被覆のコスト”として、結合処理コスト、統制用語再現性コスト、完成文字列間連接コストを定義し、動的計画法の各組みの中で、上記結合処理を行いながらコストを計算し、最適な被覆を選択する。
統制用語再現性コスト(InnerCompositionCost)
構成途中の部分文字列と、対応する統制用語部分文字列との違いを表す尺度。前処理段階で、統制用語は重要度の異なる複数の部分文字列に分解される。以下の式において、X、Y、Zは統制用語の各パートの部分文字列長、X'、Y'、Z'は、部分文字列中に再現された各部分文字列の長さをあらわし、α、β、γは、あらかじめ決められた重み付けのための定数である．すなわち、統制用語文字列の、重み付け再現率を表す．
-log((αX'+βY'+γZ')/(αX+βY+γZ))
結合処理コスト(InnerGapCost)
IDの一致する部分文字列同士を結合する際のコスト。隣接文字列同士を結合する場合は、ギャップ0のため、結合処理コストも0とする。
定数α´ × Gap文字数
完成文字列間連接コスト（OurterGapCost）
（結合）文字列の集合である被覆を選択する際に、選択した文字列の間に存在するギャップによるコストを表す。言い換えると、被覆で覆うことのできなかったテキストから計算されるコストを表す。先頭もしくは末尾にコメントなど統制用語で覆う必要のない文字列が現れる場合は、コスト[1]を0にすることも考えられる。
[1]非被覆文字列が、テキストの先頭もしくは末尾の場合：
ストップワード以外の文字列長÷入力文字列長
[2]それ以外：
要素間に存在するストップワード以外の文字列数÷入力文字列長
各被覆について、PathCostを以下のように定義した。数式１で表されるように、テキスト位置ｐとｑに関する被覆のPathCostは、ｐとｑの間にあるｔを用いて、再帰的に定義できる。文字列の結合とコストの計算は、テキストの左端から開始し、結合処理、OuterGapCost、InnerGapCost、InnerCompositionCostとPathCostの計算と記録を、テキスト上の位置ごとに左から右に繰り返していくことで、動的計画法の枠組みの中で解くことができる。
【００１６】
【数１】
0004661415.tif 000002
【００１７】
図７の例では、入力の先頭から末尾までのパスはいくつも存在する。そのうちコスト最小のものを選択するが、ここでは、被覆720と被覆721を例としてコストの計算例を示す。
被覆720のコスト = InnerCompostion(0, 8) + InnerGap(0, 8) + OuterGap(9, 12)
= -log((α*3+β*0+α*6)/(α*3+β*3+α*6)) + 2/12
> 0.167
被覆721のコスト = OuterGap(0, 2) + InnerCompsotion(3, 12) + InnerGap(3, 12)
= 2/12 + 0 + 0 = 0.167
従って、コストの低い「紹介患者加算４」を解として出力する。
＜同義パターンの定義＞
表記ゆれの中には、「ＥＳＲ」と「赤血球沈降速度測定」など、字面上の処理では対処できないものも存在する。これらの表記ゆれについては、同義語登録をする必要がある。但し、構成要素単位で同義語を登録しておくと効率的である。統制用語辞書を分解する前に、あらかじめ同義語定義に従って統制用語を拡張しておく。例えば、「入院外」⇔「外来」という同義語定義がされていると、統制用語「療養担当手当（入院外）」から、「療養担当手当金（外来）」という拡張統制用語を定義できる。同様に、「調剤料（麻・向・覚・毒）（入院外）」から、「調剤料（麻・向・覚・毒）（外来）」。このように、同義語の定義は、例えば「入院外」と「外来」など、統制用語の部分文字列単位で定義することで、定義の汎用性を高めることができる。図９は、同義語の定義例を示しており、901は、「直腸鏡」と「Ｅ−直腸」が同義であること、「Ｈｂ」「ヘモグロビン」「ヒトヘモグロビン」が同義であることを示している。
【産業上の利用可能性】
【００１８】
表記ゆれが多く含まれるバイオメディカル分野のテキストから、タンパク名や医療用語などの目的とする統制用語を検索・抽出することができる。
【図面の簡単な説明】
【００１９】
【図１】システム処理フロー。
【図２】統制用語の分解例。
【図３】切断規則の例。
【図４】部分文字列辞書構造例。
【図５】正規化規則例。
【図６】テキストへの貼り付け例。
【図７】テキスト被覆の選択例。
【図８】文字列置換の例。
【図９】同義語定義例。
【符号の説明】
【００２０】
101：文字列重み定義ファイル          109：文字列正規化手段
102：統制用語辞書                    110：近似文字列検索手段
103：同義パターン定義ファイル        111：文字列結合手段
104：辞書の拡張手段                  112：文字列組合せ選択手段
105：文字列切断手段                  113：統制用語出力手段
106：文字列正規化手段                114：文字列コスト表
107：文字列正規化規則
108：部分文字列辞書。
【図１】
0004661415.tif 000003
【図２】
0004661415.tif 000004
【図３】
0004661415.tif 000005
【図４】
0004661415.tif 000006
【図５】
0004661415.tif 000007
【図６】
0004661415.tif 000008
【図７】
0004661415.tif 000009
【図８】
0004661415.tif 000010
【図９】
0004661415.tif 000011