(57)【要約】【課題】単語およびフレーズの認識と、単語およびフレーズに対する値を利用した解析を行うこと。【解決手段】解析装置１００は、単語またはフレーズが登録された、複数の登録項目を有する辞書を基にして、複数の登録項目それぞれに関するインデックスを生成する。解析装置１００は、インデックスに、複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定する。【選択図】図１
2018180808.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
単語またはフレーズが登録された、複数の登録項目を有する辞書を基にして、前記複数の登録項目それぞれに関するインデックスを生成し、
前記インデックスに、前記複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語またはフレーズを抽出する
処理を実行させる解析プログラム。
【請求項２】
前記辞書に登録されたフレーズそれぞれは、複数の単語で構成され、かつ、独立した意味を持つ請求項１に記載の解析プログラム。
【請求項３】
前記フラグを設定する処理は、前記文字データについて、前記複数の登録項目それぞれの存否を示すインデックスを生成する請求項１または２に記載の解析プログラム。
【請求項４】
前記インデックスは、前記複数の登録項目それぞれについて、前記文字データ中の位置に関する情報を含む請求項１、２または３に記載の解析プログラム。
【請求項５】
コンピュータが実行する解析方法であって、
単語またはフレーズが登録された、複数の登録項目を有する辞書を基にして、前記複数の登録項目それぞれに関するインデックスを生成し、
前記インデックスに、前記複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語またはフレーズを抽出する
処理を実行する解析方法。
【請求項６】
単語またはフレーズが登録された、複数の登録項目を有する辞書を基にして、前記複数の登録項目それぞれに関するインデックスを生成し、前記インデックスに、前記複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定する設定部と、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語またはフレーズを抽出する抽出部と
を有する解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析プログラム等に関する。
【背景技術】
【０００２】
対象文書を形態素解析し、単語単位に分割する従来技術（従来技術１）が知られている。従来技術１では、たとえば、形態素解析に用いられる辞書に日本語のフレーズ（熟語）を登録した場合、フレーズが分割候補として最適であると判定したときに、該当するフレーズが出力される。
【０００３】
しかし、従来技術１では、英語のフレーズを登録すると、無条件にスペースで分割され、フレーズは出力されない。たとえば、従来技術１では、形態素解析に用いられる辞書に「White  House」を登録しても、最適な分割候補が「White」と「House」と判定され、意味を持つまとまり「White  House」が、最適な分割候補として判断されない。
【０００４】
また、対象文書を、単語単位に符号化する従来技術（従来技術２）が知られている。従来技術２では、対象文書群を形態素解析し、対象文書群を単語単位に符号化するとともに、単語の存在有無に関する転置インデックスを生成する。たとえば、従来技術２では、複数回出現する各単語を符号化し、転置インデックスを生成している。
【０００５】
一方、別の従来技術（従来技術３）として、特許文献１に開示の技術が存在する。特許文献１では、対象文献中からフレーズを収集し、共出現統計値を取得することが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−４８６８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術では、英単語及び独立した意味を持つフレーズを形態素解析に用いられる辞書に登録しても、意味単位に英単語やフレーズを分割できないという問題がある。
【０００８】
たとえば、従来技術１では、複数回出現する英単語やフレーズを辞書に登録しても、分割出力される英単語やフレーズは意味単位の区切りとは必ずしもなっていない。このため、従来技術２にて生成された転置インデックスに対応付けられている英単語やフレーズは、検索の際に十分に役立つとは限らない。
【０００９】
また、特許文献１では、対象案件からフレーズを直接収集し、その共起関係を見る場合、共起関係に基づき良好フレーズのみを抽出する作業が必要となる。更に、特許文献１では、「off」や「out」等のストップワードを、「take off」や「take out」など、他の単語と一体化して取り扱う処理も必要である。
【００１０】
１つの側面では、本発明は、単語及び独立した意味を持つフレーズの識別と、単語およびフレーズに対する、符号割当てや、転置インデックスの生成を行うことができる解析プログラム、解析方法および解析装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
第１の案では、コンピュータに下記の処理を実行させる。コンピュータは、辞書に登録された単語またはフレーズを基にして、複数の登録項目それぞれを絞り込むためのインデックスを生成する。コンピュータは、インデックスに、複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定する。
【発明の効果】
【００１２】
単語および独立した意味を持つフレーズの識別と、単語およびフレーズに対する符号割当てや、転置インデックスの生成を行うことができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本実施例に係る解析装置の処理の一例を説明するための図である。
【図２】図２は、本実施例に係る解析装置の構成を示す機能ブロック図である。
【図３】図３は、文字列データのデータ構造の一例を示す図である。
【図４】図４は、辞書データのデータ構造の一例を示す図である。
【図５】図５は、配列データのデータ構造の一例を示す図である。
【図６】図６は、インデックスのデータ構造の一例を示す図である。
【図７】図７は、インデックスのハッシュ化を説明するための図である。
【図８】図８は、インデックスデータのデータ構造の一例を示す図である。
【図９】図９は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。
【図１０】図１０は、単語またはフレーズを抽出する処理の一例を説明するための図（１）である。
【図１１】図１１は、単語またはフレーズを抽出する処理の一例を説明するための図（２）である。
【図１２】図１２は、解析装置の設定部の処理手順を示すフローチャートである。
【図１３】図１３は、解析装置の抽出部の処理手順を示すフローチャートである。
【図１４】図１４は、解析装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する解析プログラム、解析方法および解析装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１５】
図１は、本実施例に係る解析装置の処理の一例を説明するための図である。図１に示すように、解析装置は、文字列データ１４０ａから、分割候補となる単語及び意味あるフレーズを抽出する場合に、下記の処理を実行する。たとえば、文字列データ１４０ａは、英語で記載された文書のデータであるものとする。
【００１６】
解析装置は、文字列データ１４０ａと、辞書データ１４０ｂとを比較する。辞書データ１４０ｂは、分割候補となる単語およびフレーズを定義したデータである。本実施例では一例として、フレーズを構成する複数の単語の間に存在するスペースを「△」で示す。
【００１７】
解析装置は、文字列データ１４０ａを先頭から走査し、辞書データ１４０ｂに定義された単語またはフレーズにヒットした文字列を抽出し、配列データ１４０ｃに格納する。
【００１８】
配列データ１４０ｃは、文字列データ１４０ａに含まれる文字列のうち、辞書データ１４０ｂに定義された単語またはフレーズを有する。各単語、フレーズの区切りには、＜ＵＳ（unit  separator）＞を登録する。たとえば、解析装置は、文字列データ１４０ａと、辞書データ１４０ｂとを比較により、辞書データ１４０ｂに登録された「white」、「White△House」、「white△hunter」が順にヒットした場合には、図１に示す配列データ１４０ｃを生成する。
【００１９】
解析装置は、配列データ１４０ｃを生成すると、配列データ１４０ｃに対応するインデックス１４０ｄを生成する。インデックス１４０ｄは、文字と、オフセットとを対応づけた情報である。オフセットは、配列データ１４０ｃ上に存在する該当する文字の位置を示すものである。たとえば、文字「w」が、配列データ１４０ｃの先頭からｎ１文字目に存在する場合には、インデックス１４０ｄの文字「w」に対応する行（ビットマップ）において、オフセットｎ１の位置にフラグ「１」が立つ。
【００２０】
また、本実施例におけるインデックス１４０ｄは、単語またはフレーズの「先頭」、「末尾」、＜ＵＳ＞の位置も、オフセットと対応づける。たとえば、単語「white」の先頭は「w」、末尾は「e」となる。単語「white」の先頭「w」が、配列データ１４０ｃの先頭からｎ２文字目に存在する場合には、インデックス１４０ｄの先頭に対応する行において、オフセットｎ２の位置にフラグ「１」が立つ。単語「white」の末尾「e」が、配列データ１４０ｃの先頭からｎ３文字目に存在する場合には、インデックス１４０ｄの「末尾」に対応する行において、オフセットｎ３の位置にフラグ「１」が立つ。
【００２１】
フレーズ「White△House」の先頭は「W」、末尾は「e」となる。フレーズ「White△House」の先頭「W」が、配列データ１４０ｃの先頭からｎ４文字目に存在する場合には、インデックス１４０ｄの「先頭」に対応する行において、オフセットｎ４の位置にフラグ「１」が立つ。フレーズ「White△House」の末尾「e」が、配列データ１４０ｃの先頭からｎ５文字目に存在する場合には、インデックス１４０ｄの「末尾」に対応する行において、オフセットｎ５の位置にフラグ「１」が立つ。
【００２２】
また、「＜ＵＳ＞」が、配列データ１４０ｃの先頭からｎ６文字目に存在する場合には、インデックス１４０ｄの「＜ＵＳ＞」に対応する行において、オフセットｎ６の位置にフラグ「１」が立つ。
【００２３】
解析装置は、インデックス１４０ｄを参照することで、文字列データ１４０ａに含まれる単語およびフレーズを構成する文字の位置、文字の先頭、末尾、区切り（＜ＵＳ＞）を把握することができる。また、インデックス１４０ｄから判断可能な先頭から末尾までに含まれる文字列は、意味ある一つの文字列（フレーズ）であると言える。
【００２４】
解析装置は、インデックス１４０ｄを基にして、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、文字列データ１４０ａから、分割可能な単語またはフレーズを抽出する。図１に示す抽出結果１４０ｅには、単語「White」、意味あるフレーズ「White△House」、「white△hunter」が抽出されている。
【００２５】
上記のように、解析装置は、文字列データ１４０ａおよび辞書データ１４０ｂを基にして、辞書データ１４０ｂの登録項目に関するインデックス１４０ｄを生成し、各登録項目について、先頭と末尾とを判別可能なフラグを設定する。そして、解析装置は、インデックス１４０ｄを利用することで、文字列データ１４０ａから複数の分割可能な単語またはフレーズを抽出する。たとえば、インデックス１４０ｄは、辞書データ１４０ｂに定義された意味ある文字列のかたまりがそれぞれ、先頭・末尾のフラグにより、識別可能となっており、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、分割可能な単語またはフレーズを抽出している。このため、単語及び独立した意味を持つフレーズを認識でき、単語およびフレーズに対する値を利用した解析を行うことができる。
【００２６】
たとえば、単語およびフレーズに対する値を利用した解析の一例としては、解析装置が抽出した単語、およびフレーズを処理単位として、文字列データのベクトル化を行うこと処理が上げられる。
【００２７】
また、本実施例に係る解析装置は、インデックス１４０ｄを用いて、文字列データ１４０ａから、単語およびフレーズを抽出しており、特許文献１のような共出現統計値を算出してない。このため、計算コストを削減することも可能である。なお、背景事情として、意味単位としてのフレーズ辞書を準備しようとすると、辞書のサイズが大きくなりすぎるため、従来では意味単位としてのフレーズに対応した符号化はなされていない。
【００２８】
図２は、本実施例に係る解析装置の構成を示す機能ブロック図である。図２に示すように、解析装置１００は、通信部１１０と、入力部１２０と、表示部１３０と、記憶部１４０と、制御部１５０とを有する。
【００２９】
通信部１１０は、ネットワークを介して、他の外部装置と通信を行う処理部である。通信部１１０は、通信装置に対応する。たとえば、解析装置１００は、外部装置から、文字列データ１４０ａ、辞書データ１４０ｂ等を受信して、記憶部１４０に格納しても良い。
【００３０】
入力部１２０は、各種の情報を解析装置１００に入力するための入力装置である。たとえば、入力部１２０は、キーボードやマウス、タッチパネル等に対応する。
【００３１】
表示部１３０は、制御部１５０から出力される各種の情報を表示するための表示装置である。たとえば、表示部１３０は、液晶ディスプレイやタッチパネルに対応する。
【００３２】
記憶部１４０は、文字列データ１４０ａ、辞書データ１４０ｂ、配列データ１４０ｃ、インデックスデータ１４５、抽出結果１４０ｅを有する。記憶部１４０は、（Flash  Memory）などの半導体メモリ素子や、ＨＤＤ（Hard  Disk  Drive）などの記憶装置に対応する。
【００３３】
文字列データ１４０ａは、処理対象となる文書のデータである。図３は、文字列データのデータ構造の一例を示す図である。図３に示すように、文字列データ１４０ａは、たとえば、英語で記載されたものとなる。図３に示す例では、単語間のスペース「△」の図示を省略する。
【００３４】
辞書データ１４０ｂは、分割候補となる単語またはフレーズを定義する情報である。辞書データ１４０ｂに含まれるフレーズは、複数の単語から構成され、一つの意味あるフレーズとなる。図４は、辞書データのデータ構造の一例を示す図である。図４に示すように、この辞書データ１４０ｂは、単語・フレーズと、品詞と、活用形とを対応づける。このうち、単語・フレーズは、分割候補となる単語またはフレーズを示すものである。品詞は、「単語・フレーズ」の欄に格納された単語の品詞を示すものである。活用形は、「単語・フレーズ」の欄に格納された単語の各活用形を示すものである。
【００３５】
配列データ１４０ｃは、文字列データ１４０ａに含まれる文字列のうち、辞書データ１４０ｂに定義された単語またはフレーズを有する。図５は、配列データのデータ構造の一例を示す図である。図５に示す例では、配列データ１４０ｃは、各単語、各フレーズが＜ＵＳ＞により分けられている。なお、配列データ１４０ｃの上側に示す数字は、配列データ１４０ｃの先頭「０」からのオフセットを示す。
【００３６】
インデックスデータ１４５は、図１で説明したインデックス１４０ｄに対応するデータである。後述するように、インデックス１４０ｄは、ハッシュ化され、インデックスデータ１４５として、記憶部１４０に格納される。
【００３７】
抽出結果１４０ｅは、後述する制御部１５０の処理により、文字列データ１４０ａから抽出される、分割候補となる単語及び意味あるフレーズの抽出結果を示すものである。
【００３８】
制御部１５０は、設定部１５０ａおよび抽出部１５０ｂを有する。制御部１５０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などによって実現できる。また、制御部１５０は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによっても実現できる。
【００３９】
設定部１５０ａは、文字列データ１４０ａおよび辞書データ１４０ｂを基にして、配列データ１４０ｃを生成し、配列データ１４０ｃを基にして、インデックスデータ１４５を生成する処理部である。
【００４０】
設定部１５０ａが、文字列データ１４０ａと辞書データ１４０ｂとを基にして、配列データ１４０ｃを生成する処理の一例について説明する。設定部１５０ａは、文字列データ１４０ａと、辞書データ１４０ｂとを比較する。設定部１５０ａは、文字列データ１４０ａを先頭から走査し、辞書データ１４０ｂに登録された単語・フレーズにヒットした文字列を抽出し、配列データ１４０ｃに格納する。設定部１５０ａは、ヒットした文字列を配列データ１４０ｃに格納し、次にヒットした文字列を配列データ１４０ｃに格納する場合には、先の文字列の次に＜ＵＳ＞を設定し、設定した＜ＵＳ＞の次に、次にヒットした文字列を格納する。設定部１５０ａは、上記処理を繰り返し実行することで、配列データ１４０ｃを生成する。
【００４１】
設定部１５０ａは、配列データ１４０ｃを生成した後に、配置インデックス１４０ｄを生成する。設定部１５０ａは、配列データ１４０ｃを先頭から走査し、文字とオフセット、文字列の先頭とオフセット、文字列の末尾とオフセット、＜ＵＳ＞とオフセットとを対応づけることで、インデックス１４０ｄを生成する。
【００４２】
図６は、インデックスのデータ構造の一例を示す図である。図６に示すように、インデックス１４０ｄは、各文字、△（スペース）、＜ＵＳ＞、先頭、末尾に対応するビットマップ２１〜３２を有する。たとえば、文字「w」、「h」、「i」、「t」、「e」、「△（スペース）」、「o」、「u」、「s」に対応するビットマップを、ビットマップ２１〜２９とする。図６では、他の文字に対応するビットマップの図示は省略する。
【００４３】
＜ＵＳ＞に対応するビットマップをビットマップ３０とする。文字の「先頭」に対応するビットマップをビットマップ３１とする。文字の「末尾」に対応するビットマップをビットマップ３２とする。
【００４４】
たとえば、図５に示した配列データ１４０ｃにおいて、文字「w」が、配列データ１４０ｃのオフセット「６、１２、２４」に存在している。このため、設定部１５０ａは、図６に示すインデックス１４０ｄのビットマップ２１のオフセット「６、１２、２４」にフラグ「１」を立てる。配列データ１４０ｃは、他の文字、＜ＵＳ＞についても同様に、フラグを立てる。
【００４５】
図５に示した配列データ１４０ｃにおいて、各単語、フレーズの文字の先頭が、配列データ１４０ｃのオフセット「６、１２、２４」に存在している。このため、設定部１５０ａは、図６に示すインデックス１４０ｄのビットマップ３１のオフセット「６、１２、２４」にフラグ「１」を立てる。
【００４６】
図５に示した配列データ１４０ｃにおいて、各単語、フレーズの文字の末尾が、配列データ１４０ｃのオフセット「１０、２２」に存在している。このため、設定部１５０ａは、図６に示すインデックス１４０ｄのビットマップ３２のオフセット「１０、２２」にフラグ「１」を立てる。
【００４７】
設定部１５０ａは、インデックス１４０ｄを生成すると、インデックス１４０ｄのデータ量を削減するために、インデックス１４０ｄをハッシュ化することで、インデックスデータ１４５を生成する。
【００４８】
図７は、インデックスのハッシュ化を説明するための図である。ここでは一例として、インデックスにビットマップ１０が含まれるものとし、かかるビットマップ１０をハッシュ化する場合について説明する。
【００４９】
たとえば、設定部１５０ａは、ビットマップ１０から、底２９のビットマップ１０ａと、底３１のビットマップ１０ｂを生成する。ビットマップ１０ａは、ビットマップ１０に対して、オフセット２９毎に区切りを設定し、設定した区切りを先頭とするフラグ「１」のオフセットを、ビットマップ１０ａのオフセット０〜２８のフラグで表現する。
【００５０】
設定部１５０ａは、ビットマップ１０のオフセット０〜２８までの情報を、ビットマップ１０ａにコピーする。設定部１５０ａは、ビットマップ１０ａの２９以降のオフセットの情報を下記の様に処理する。
【００５１】
ビットマップ１０のオフセット「３５」にフラグ「１」が立っている。オフセット「３５」は、オフセット「２８＋７」であるため、設定部１５０ａは、ビットマップ１０ａのオフセット「６」に「（１）」を立てる。なお、オフセットの１番目を０としている。ビットマップ１０のオフセット「４２」にフラグ「１」が立っている。オフセット「４２」は、オフセット「２８＋１４」であるため、設定部１５０ａは、ビットマップ１０ａのオフセット「１１」にフラグ「（１）」を立てる。
【００５２】
ビットマップ１０ｂは、ビットマップ１０に対して、オフセット３１毎に区切りを設定し、設定した区切りを先頭とするフラグ「１」のオフセットを、ビットマップ１０ｂのオフセット０〜３０のフラグで表現する。
【００５３】
ビットマップ１０のオフセット「３５」にフラグ「１」が立っている。オフセット「３５」は、オフセット「３０＋５」であるため、設定部１５０ａは、ビットマップ１０ｂのオフセット「４」に「（１）」を立てる。なお、オフセットの１番目を０としている。ビットマップ１０のオフセット「４２」にフラグ「１」が立っている。オフセット「４２」は、オフセット「３０＋１２」であるため、設定部１５０ａは、ビットマップ１０ｂのオフセット「１２」にフラグ「（１）」を立てる。
【００５４】
設定部１５０ａは、上記処理を実行することで、ビットマップ１０からビットマップ１０ａ、１０ｂを生成する。このビットマップ１０ａ，１０ｂが、ビットマップ１０をハッシュ化した結果となる。ここでは、ビットマップ１０の長さが０〜４３である場合について説明したが、ビットマップ１０の長さが４３以上になる場合でも、ビットマップ１０に設定されたフラグ「１」を、ビットマップ１０ａおよびビットマップ１０ｂで表現することができる。
【００５５】
設定部１５０ａは、図６に示した各ビットマップ２１〜３２に対してハッシュ化を行うことで、インデックスデータ１４５を生成する。図８は、インデックスデータのデータ構造の一例を示す図である。たとえば、図６に示したインデックス１４０ｄのビットマップ２１に対して、ハッシュ化を行うと、図８に示したビットマップ２１ａおよびビットマップ２１ｂが生成される。図６に示したインデックス１４０ｄのビットマップ２２に対して、ハッシュ化を行うと、図８に示したビットマップ２２ａおよびビットマップ２２ｂが生成される。図６に示したインデックス１４０ｄのビットマップ３０に対して、ハッシュ化を行うと、図８に示したビットマップ３０ａおよびビットマップ３０ｂが生成される。図８において、その他のハッシュ化されたビットマップに関する図示を省略する。
【００５６】
図２の説明に戻る。抽出部１５０ｂは、インデックスデータ１４５を基にしてインデックス１４０ｄを生成し、インデックス１４０ｄを基にして、複数の分割可能な単語または、意味あるフレーズを抽出する処理部である。
【００５７】
まず、抽出部１５０ｂが、インデックスデータ１４５を基にして、インデックス１４０ｄを生成する処理の一例について説明する。図９は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。ここでは一例として、ビットマップ１０ａとビットマップ１０ｂとを基にして、ビットマップ１０を復元する処理について説明する。ビットマップ１０、１０ａ、１０ｂは、図７で説明したものに対応する。
【００５８】
ステップＳ１０の処理について説明する。抽出部１５０ｂは、底２９のビットマップ１０ａを基にして、ビットマップ１１ａを生成する。ビットマップ１１ａのオフセット０〜２８のフラグの情報は、ビットマップ１０ａのオフセット０〜２８のフラグの情報と同様となる。ビットマップ１１ａのオフセット２９以降のフラグの情報は、ビットマップ１０ａのオフセット０〜２８のフラグの情報の繰り返しとなる。
【００５９】
ステップＳ１１の処理について説明する。抽出部１５０ｂは、底３１のビットマップ１０ｂを基にして、ビットマップ１１ｂを生成する。ビットマップ１１ｂのオフセット０〜３０のフラグの情報は、ビットマップ１０ｂのオフセット０〜３０のフラグの情報と同様となる。ビットマップ１１ｂのオフセット３１以降のフラグの情報は、ビットマップ１０ｂのオフセット０〜３０のフラグの情報の繰り返しとなる。
【００６０】
ステップＳ１２の処理について説明する。抽出部１５０ｂは、ビットマップ１１ａとビットマップ１１ｂとのＡＮＤ演算を実行することで、ビットマップ１０を生成する。図９に示す例では、オフセット「０、５、１１、１８、２５、３５、４２」において、ビットマップ１１ａおよびビットマップ１１ｂのフラグが「１」となっている。このため、ビットマップ１０のオフセット「０、５、１１、１８、２５、３５、４２」のフラグが「１」となる。このビットマップ１０が、復元されたビットマップとなる。抽出部１５０ｂは、他のビットマップについても同様の処理を繰り返し実行することで、各ビットマップを復元し、インデックス１４０ｄを生成する。
【００６１】
抽出部１５０ｂは、インデックス１４０ｄを生成した後に、インデックス１４０ｄを基にして、分割可能な単語またはフレーズを抽出する。図１０および図１１は、単語またはフレーズを抽出する処理の一例を説明するための図である。図１０および図１１に示す例では、文字列データ１４０ａに「White△House・・・」が含まれており、係る文字列データ１４０ａの１番目の文字から順に、該当する文字のビットマップを、インデックス１４０ｄから読み出して、下記の処理を実行する。
【００６２】
ステップＳ２０について説明する。抽出部１５０ｂは、インデックス１４０ｄから、先頭のビットマップ３１、末尾のビットマップ３２、文字「ｗ」のビットマップ２１を読み出す。抽出部１５０ｂは、先頭のビットマップ３１と文字「ｗ」のビットマップ２１とのＡＮＤ演算を実行することで、文字の先頭位置を特定する。先頭のビットマップ３１と文字「ｗ」のビットマップ２１とのＡＮＤ演算の結果をビットマップ３１Ａとする。ビットマップ３１Ａでは、オフセット「６、１２、２４」にフラグ「１」が立っており、オフセット「６、１２、２４」が、単語またはフレーズの先頭であることを示す。
【００６３】
抽出部１５０ｂは、末尾のビットマップ３２と文字「ｗ」のビットマップ２１とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字「ｗ」のビットマップ２１とのＡＮＤ演算の結果をビットマップ３２Ａとする。ビットマップ３２Ａには、フラグ「１」が立っていないため、「ｗ」に末尾候補が存在しないことを示す。
【００６４】
ステップＳ２１について説明する。抽出部１５０ｂは、文字「ｗ」のビットマップ２１を左に１つシフトすることで、ビットマップ２１Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｈ」のビットマップ２２を読み出す。抽出部１５０ｂは、ビットマップ２１Ａとビットマップ２２とのＡＮＤ演算を実行することで、文字列「ｗｈ」に対応するビットマップ５０を生成する。
【００６５】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈ」のビットマップ５０とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈ」のビットマップ５０とのＡＮＤ演算の結果をビットマップ３２Ｂとする。ビットマップ３２Ｂには、フラグ「１」が立っていないため、文字列「ｗｈ」に末尾候補が存在しないことを示す。
【００６６】
ステップＳ２２について説明する。抽出部１５０ｂは、文字列「ｗｈ」のビットマップ５０を左に一つシフトすることで、ビットマップ５０Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｉ」のビットマップ２３を読み出す。抽出部１５０ｂは、ビットマップ５０Ａとビットマップ２３とのＡＮＤ演算を実行することで、文字列「ｗｈｉ」に対応するビットマップ５１を生成する。
【００６７】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉ」のビットマップ５１とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉ」のビットマップ５１とのＡＮＤ演算の結果をビットマップ３２Ｃとする。ビットマップ３２Ｃには、フラグ「１」が立っていないため、文字列「ｗｈｉ」に末尾候補が存在しないことを示す。
【００６８】
ステップＳ２３について説明する。抽出部１５０ｂは、文字列「ｗｈｉ」のビットマップ５１を左に一つシフトすることで、ビットマップ５１Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｔ」のビットマップ２４を読み出す。抽出部１５０ｂは、ビットマップ５１Ａとビットマップ２４とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔ」に対応するビットマップ５２を生成する。
【００６９】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔ」のビットマップ５２とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔ」のビットマップ５２とのＡＮＤ演算の結果をビットマップ３２Ｄとする。ビットマップ３２Ｄには、フラグ「１」が立っていないため、文字列「ｗｈｉｔ」に末尾候補が存在しないことを示す。
【００７０】
ステップＳ２４について説明する。抽出部１５０ｂは、文字列「ｗｈｉｔ」のビットマップ５２を左に一つシフトすることで、ビットマップ５２Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｅ」のビットマップ２５を読み出す。抽出部１５０ｂは、ビットマップ５２Ａとビットマップ２５とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔｅ」に対応するビットマップ５３を生成する。
【００７１】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔｅ」のビットマップ５３とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔｅ」のビットマップ５３とのＡＮＤ演算の結果をビットマップ３２Ｅとする。ビットマップ３２Ｅには、フラグ「１」が立っているため、文字列「ｗｈｉｔｅ」に末尾候補「ｅ」が存在することを示す。抽出部１２０ｂは、ステップ２０で判定した先頭の文字「ｗ」から、ステップ２４で判定した末尾の文字「ｅ」までの文字列「ｗｈｉｔｅ」を分割候補の文字列として抽出する。
【００７２】
ステップＳ２５について説明する。抽出部１５０ｂは、文字列「ｗｈｉｔｅ」のビットマップ５３を左に一つシフトすることで、ビットマップ５３Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「△（スペース）」のビットマップ２６を読み出す。抽出部１５０ｂは、ビットマップ５３Ａとビットマップ２６とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔｅ△」に対応するビットマップ５４を生成する。
【００７３】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔｅ△」のビットマップ５４とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔｅ△」のビットマップ５４とのＡＮＤ演算の結果をビットマップ３２Ｆとする。ビットマップ３２Ｆには、フラグ「１」が立っていないため、文字列「ｗｈｉｔｅ△」に末尾候補が存在しないことを示す。
【００７４】
ステップＳ２６について説明する。抽出部１５０ｂは、文字列「ｗｈｉｔｅ△」のビットマップ５４を左に一つシフトすることで、ビットマップ５４Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｈ」のビットマップ２２を読み出す。抽出部１５０ｂは、ビットマップ５４Ａとビットマップ２２とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔｅ△ｈ」に対応するビットマップ５５を生成する。
【００７５】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈ」のビットマップ５５とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈ」のビットマップ５５とのＡＮＤ演算の結果をビットマップ３２Ｇとする。ビットマップ３２Ｇには、フラグ「１」が立っていないため、文字列「ｗｈｉｔｅ△ｈ」に末尾候補が存在しないことを示す。
【００７６】
ステップＳ２７について説明する。抽出部１５０ｂは、文字列「ｗｈｉｔｅ△ｈ」のビットマップ５５を左に一つシフトすることで、ビットマップ５５Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｏ」のビットマップ２７を読み出す。抽出部１５０ｂは、ビットマップ５５Ａとビットマップ２７とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔｅ△ｈｏ」に対応するビットマップ５６を生成する。
【００７７】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏ」のビットマップ５６とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏ」のビットマップ５６とのＡＮＤ演算の結果をビットマップ３２Ｈとする。ビットマップ３２Ｈには、フラグ「１」が立っていないため、文字列「ｗｈｉｔｅ△ｈｏ」に末尾候補が存在しないことを示す。
【００７８】
ステップＳ２８について説明する。抽出部１５０ｂは、文字列「ｗｈｉｔｅ△ｈｏ」のビットマップ５６を左に一つシフトすることで、ビットマップ５６Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｕ」のビットマップ２８を読み出す。抽出部１５０ｂは、ビットマップ５６Ａとビットマップ２８とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔｅ△ｈｏｕ」に対応するビットマップ５７を生成する。
【００７９】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏｕ」のビットマップ５７とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏｕ」のビットマップ５７とのＡＮＤ演算の結果をビットマップ３２Ｉとする。ビットマップ３２Ｉには、フラグ「１」が立っていないため、文字列「ｗｈｉｔｅ△ｈｏｕ」に末尾候補が存在しないことを示す。
【００８０】
ステップＳ２９について説明する。抽出部１５０ｂは、文字列「ｗｈｉｔｅ△ｈｏｕ」のビットマップ５７を左に一つシフトすることで、ビットマップ５７Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｓ」のビットマップ２９を読み出す。抽出部１５０ｂは、ビットマップ５７Ａとビットマップ２９とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔｅ△ｈｏｕｓ」に対応するビットマップ５８を生成する。
【００８１】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏｕｓ」のビットマップ５８とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏｕｓ」のビットマップ５８とのＡＮＤ演算の結果をビットマップ３２Ｊとする。ビットマップ３２Ｊには、フラグ「１」が立っていないため、文字列「ｗｈｉｔｅ△ｈｏｕｓ」に末尾候補が存在しないことを示す。
【００８２】
ステップＳ３０について説明する。抽出部１５０ｂは、文字列「ｗｈｉｔｅ△ｈｏｕｓ」のビットマップ５８を左に一つシフトすることで、ビットマップ５８Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「ｅ」のビットマップ２５を読み出す。抽出部１５０ｂは、ビットマップ５８Ａとビットマップ２５とのＡＮＤ演算を実行することで、文字列「ｗｈｉｔｅ△ｈｏｕｓｅ」に対応するビットマップ５９を生成する。
【００８３】
抽出部１５０ｂは、末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏｕｓｅ」のビットマップ５３とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３２と文字列「ｗｈｉｔｅ△ｈｏｕｓｅ」のビットマップ５９とのＡＮＤ演算の結果をビットマップ３２Ｋとする。ビットマップ３２Ｋには、フラグ「１」が立っているため、文字列「ｗｈｉｔｅ△ｈｏｕｓｅ」に末尾候補「ｅ」が存在することを示す。抽出部１２０ｂは、ステップ２０で判定した先頭の文字「ｗ」から、ステップ３０で判定した末尾の文字「ｅ」までの文字列「ｗｈｉｔｅ△ｈｏｕｓｅ」を分割候補の文字列として抽出する。
【００８４】
抽出部１５０ｂは、ステップＳ２０〜ステップＳ３０までの処理を実行することで、単語「ｗｈｉｔｅ」と、意味あるフレーズ「Ｗｈｉｔｅ△Ｈｏｕｓｅ」を抽出する。抽出部１５０ｂは、抽出した単語およびフレーズの情報を、抽出結果１４０ｅとして記憶部１４０に格納する。
【００８５】
次に、本実施例に係る解析装置１００の処理手順の一例について説明する。図１２は、解析装置の設定部の処理手順を示すフローチャートである。図１２に示すように、解析装置１００の設定部１５０ａは、文字列データ１４０ａと辞書データ１４０ｂの単語・フレーズとを比較する（ステップＳ１０１）。
【００８６】
設定部１５０ａは、ヒットした単語・フレーズを配列データ１４０ｃに登録する（ステップＳ１０２）。設定部１５０ａは、配列データ１４０ｃを基にして、インデックス１４０ｄを生成する（ステップＳ１０３）。設定部１５０ａは、インデックス１４０ｄをハッシュ化し、インデックスデータ１４５を生成する（ステップＳ１０４）。
【００８７】
図１３は、解析装置の抽出部の処理手順を示すフローチャートである。図１３に示すように、解析装置の抽出部１５０ｂは、ハッシュ化されたインデックスデータ１４５からインデックス１４０ｄを復元する（ステップＳ２０１）。
【００８８】
抽出部１５０ｂは、文字列データ１４０ａの先頭から１番目の文字のビットマップを第１ビットマップに設定し、先頭から２番目の文字のビットマップを第２ビットマップに設定する（ステップＳ２０２）。
【００８９】
抽出部１５０ｂは、第１ビットマップと先頭ビットマップとを「ＡＮＤ演算」し、演算結果に「１」が存在する場合に、第１ビットマップに対応する文字を先頭文字として特定する（ステップＳ２０３）。
【００９０】
抽出部１５０ｂは、第１ビットマップと末尾ビットマップとを「ＡＮＤ演算」し、演算結果に「１」が存在する場合に、第１ビットマップに対応する文字を、末尾文字として特定し、分割候補を抽出する（ステップＳ２０４）。
【００９１】
抽出部１５０ｂは、文字列データ１４０の終端に到達した場合には（ステップＳ２０５，Ｙｅｓ）、抽出結果１４０ｅを記憶部１４０に保存する（ステップＳ２０６）。一方、抽出部１５０ｂは、文字列データ１４０の終端に到達していない場合には（ステップＳ２０５，Ｎｏ）、ステップＳ２０７に移行する。
【００９２】
抽出部１５０ｂは、第１ビットマップを左に一つシフトする（ステップＳ２０７）。抽出部１５０ｂは、第１ビットマップと第２ビットマップとを「ＡＮＤ演算」したビットマップを新たな第１ビットマップに設定する（ステップＳ２０８）。
【００９３】
抽出部１５０ｂは、第２ビットマップの文字の次の文字に対応するビットマップを、新たな第２ビットマップに設定し（ステップＳ２０９）、ステップＳ２０３に移行する。
【００９４】
次に、本実施例に係る解析装置１００の効果について説明する。解析装置１００は、文字列データ１４０ａおよび辞書データ１４０ｂを基にして、辞書データ１４０ｂの登録項目に関するインデックス１４０ｄを生成し、各登録項目について、先頭と末尾とを判別可能なフラグを設定する。そして、解析装置１００は、インデックス１４０ｄを利用することで、文字列データ１４０ａから複数の分割可能な単語またはフレーズを抽出する。たとえば、インデックス１４０ｄは、辞書データ１４０ｂに定義された意味ある文字列のかたまりがそれぞれ、先頭・末尾のフラグにより、識別可能となっており、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、分割可能な単語またはフレーズを抽出している。このため、単語及び独立した意味を持つフレーズを認識でき、単語およびフレーズに対する値を利用した解析を行うことができる。
【００９５】
また、解析装置１００が生成するインデックス１４０ｄには、複数の登録項目それぞれについて、文字列データ１４０から生成された配列データ１４０ｃのオフセットの情報を含んでおり、分割可能な単語、フレーズの位置を特定することができる。
【００９６】
次に、上記実施例に示した解析装置１００と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図１４は、解析装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【００９７】
図１４に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る読み取り装置２０４と、有線または無線ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７とを有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【００９８】
ハードディスク装置２０７は、設定プログラム２０７ａ、抽出プログラム２０７ｂを有する。ＣＰＵ２０１は、設定プログラム２０７ａ、抽出プログラム２０７ｂを読み出してＲＡＭ２０６に展開する。
【００９９】
設定プログラム２０７ａは、設定プロセス２０６ａとして機能する。抽出プログラム２０７ｂは、抽出プロセス２０６ｂとして機能する。
【０１００】
設定プロセス２０６ａの処理は、設定部１５０ａの処理に対応する。抽出プロセス２０６ｂの処理は、抽出部１５０ｂの処理に対応する。
【０１０１】
なお、各プログラム２０７ａ、２０７ｂについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくても良い。たとえば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ３００が各プログラム２０６ａ、２０７ｂを読み出して実行するようにしても良い。
【０１０２】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１０３】
（付記１）コンピュータに、
単語またはフレーズが登録された、複数の登録項目を有する辞書を基にして、前記複数の登録項目それぞれに関するインデックスを生成し、
前記インデックスに、前記複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語またはフレーズを抽出する
処理を実行させる解析プログラム。
【０１０４】
（付記２）前記辞書に登録されたフレーズそれぞれは、複数の単語で構成され、かつ、独立した意味を持つことを特徴とする付記１に記載の解析プログラム。
【０１０５】
（付記３）前記フラグを設定する処理は、前記文字データについて、前記複数の登録項目それぞれの存否を示すインデックスを生成する付記１または２に記載の解析プログラム。
【０１０６】
（付記４）前記インデックスは、前記複数の登録項目それぞれについて、前記文字データ中の位置に関する情報を含む付記１、２または３に記載の解析プログラム。
【０１０７】
（付記５）コンピュータが実行する解析方法であって、
単語またはフレーズが登録された、複数の登録項目を有する辞書を基にして、前記複数の登録項目それぞれに関するインデックスを生成し、
前記インデックスに、前記複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語またはフレーズを抽出する
処理を実行する解析方法。
【０１０８】
（付記６）前記辞書に登録されたフレーズそれぞれは、複数の単語で構成され、かつ、独立した意味を持つことを特徴とする付記５に記載の解析方法。
【０１０９】
（付記７）前記フラグを設定する処理は、前記文字データについて、前記複数の登録項目それぞれの存否を示すインデックスを生成する付記５または６に記載の解析方法。
【０１１０】
（付記８）前記インデックスは、前記複数の登録項目それぞれについて、前記文字データ中の位置に関する情報を含む付記５、６または７に記載の解析方法。
【０１１１】
（付記９）単語またはフレーズが登録された、複数の登録項目を有する辞書を基にして、前記複数の登録項目それぞれに関するインデックスを生成し、前記インデックスに、前記複数の登録項目それぞれについて、各項目の先頭と末尾とを判別可能なフラグを設定する設定部と、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語またはフレーズを抽出する抽出部と
を有することを特徴とする解析装置。
【０１１２】
（付記１０）前記辞書に登録されたフレーズそれぞれは、複数の単語で構成され、かつ、独立した意味を持つ付記９に記載の解析装置。
【０１１３】
（付記１１）前記設定部は、前記文字データについて、前記複数の登録項目それぞれの存否を示すインデックスを生成する付記９または１０に記載の解析装置。
【０１１４】
（付記１２）前記インデックスは、前記複数の登録項目それぞれについて、前記文字データ中の位置に関する情報を含む付記９、１０または１１に記載の解析装置。
【符号の説明】
【０１１５】
１００    解析装置
１１０    通信部
１２０    入力部
１３０    表示部
１４０    記憶部
１４０ａ  文字列データ
１４０ｂ  辞書データ
１４０ｃ  配列データ
１４０ｄ  インデックス
１４０ｅ  抽出結果
１４５    インデックスデータ
１５０    制御部
１５０ａ  設定部
１５０ｂ  抽出部
【図１】
2018180808.tif 000003
【図２】
2018180808.tif 000004
【図３】
2018180808.tif 000005
【図４】
2018180808.tif 000006
【図５】
2018180808.tif 000007
【図６】
2018180808.tif 000008
【図７】
2018180808.tif 000009
【図８】
2018180808.tif 000010
【図９】
2018180808.tif 000011
【図１０】
2018180808.tif 000012
【図１１】
2018180808.tif 000013
【図１２】
2018180808.tif 000014
【図１３】
2018180808.tif 000015
【図１４】
2018180808.tif 000016