(57)【要約】【課題】インデックスを用いることにより、高速、かつ、ファイルサイズを抑えて解析を行う。【解決手段】解析装置１００は、形態素解析に用いられる辞書に基づき、辞書に登録された形態素それぞれに関するインデックスであって、辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成する。解析装置１００は、インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する。【選択図】図２
2018195030.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する
処理を実行させる解析プログラム。
【請求項２】
前記インデックスを生成する処理は、前記文字データと前記辞書に登録された形態素それぞれとを比較して、前記文字データに含まれる形態素を並べた配列データを生成し、前記配列データの文字のオフセットを示すフラグを設置したビットマップを文字毎に生成することで、前記インデックスを生成することを特徴とする請求項１に記載の解析プログラム。
【請求項３】
前記配列データの文字のうち、先頭の文字のオフセットを示すフラグを設置した先頭ビットマップと、末尾の文字のオフセットを示すフラグを設置した末尾ビットマップとを、前記インデックスに設定する処理を更に実行させることを特徴とする請求項２に記載の解析プログラム。
【請求項４】
前記抽出する処理は、前記文字データに含まれる各文字の組み合わせに対応するビットマップと、前記先頭ビットマップおよび前記末尾ビットマップとをＡＮＤ演算を行うことで、分割可能な単語の先頭位置および末尾位置を判定し、判定結果を基にして、複数の分割可能な単語を抽出することを特徴とする請求項３に記載の解析プログラム。
【請求項５】
コンピュータが実行する解析方法であって、
形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する
処理を実行する解析方法。
【請求項６】
形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成する設定部と、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する抽出部と
を有する解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析プログラム等に関する。
【背景技術】
【０００２】
従来、スペース等のデリミタで区切られたアルファベット表記の文字と異なり、ＣＪＫ（中国語、日本語、韓国語）文字については、形態素の区切りを認識してから、種々の処理を行っている。たとえば、対象文字データから形態素の区切りを解析し、分割可能な単語の文字列を出力する従来技術として、Mecab、Chasen等の形態素辞書とTrie木、および、Double  Arrayがある。
【０００３】
形態素の区切りの解析結果を利用する技術としては、対象文字データをベクトル化するWord2Vec等の技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１４６２７３号公報
【特許文献２】特開平１０−２２２５１１号公報
【特許文献３】特開２０１４−１０６７０７号公報
【特許文献４】国際公開第２００９／０６３９２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、高速、かつ、ファイルサイズを抑えて、形態素の区切りの解析を行うことができないという問題がある。
【０００６】
近年、Word2Vec等の解析など、形態素解析の結果を利用する分野では、形態素の区切り位置の精度の重要性が増している。
【０００７】
この要求に応えるべく、従来技術では、形態素辞書の登録語を増やし、複数の分割可能な単語候補を抽出している。しかし、形態素辞書の登録語を増やした場合、Trie木とDouble  Arrayのサイズが急激に増大し、検索および判定に要する時間が長くなる。
【０００８】
たとえば、ＣＪＫ文字列の「アメリカ先住民族」という形態素の区切りを判定する場合には、単に、「アメリカ先住民」が含まれる、という判定だけでなく、「アメリカ先住民」、「族」のような区切られ方をしないことも合わせて判定する。
【０００９】
また、Word2Vecが対象文字データをベクトル化する場合には、対象文字データの形態素解析の結果が、意味ある文字列の最小単位で区切られていることが前提となっている。このため、Word2Vecの前処理として、対象文字列データを区切る場合、従来の形態素解析による区分は、意味ある文字列の最小単位で区切られておらず、Word2Vecの目的にそぐわない場合がある。
【００１０】
たとえば、固有名詞「三菱東京ＵＦＪ銀行金沢文庫支店」、新語「妖怪ウォッチ」は、それ自体が、意味ある文字列の対象単位であるが、従来の形態素解析では、かかる点を考慮した処理が行われない。たとえば、Mecabで対象文字データ「・・・三菱東京ＵＦＪ銀行金沢文庫支店・・・」を形態素に分割すると、意味あるＣＪＫ文字列「三菱東京ＵＦＪ銀行金沢文庫支店」が、「三菱」、「東京」、「ＵＦＪ」「銀行」、「金沢」、「文庫」、「支店」と分割される。Mecabで対象文字データ「・・・妖怪ウォッチ・・・」を形態素に分割すると、意味あるＣＪＫ文字列「妖怪ウォッチ」が、「妖怪」、「ウォッチ」と分割される。
【００１１】
また、形態素解析にて、固有名詞を未知語として出力することも考えられるが、登録単語をもとに分割されたり、有用な情報が除外されることもあるため、Word2Vecが利用するための形態素解析の結果としては不十分なものとなる。
【００１２】
１つの側面では、本発明は、高速、かつ、ファイルサイズを抑えて、形態素の区切りの解析を行うことができる解析プログラム、解析方法および解析装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
第１の案では、コンピュータに下記の処理を実行させる。コンピュータは、形態素解析に用いられる辞書に基づき、辞書に登録された形態素それぞれに関するインデックスであって、辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成する。コンピュータは、インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する。
【発明の効果】
【００１４】
インデックスを用いることにより、高速、かつ、ファイルサイズを抑えて解析を行うことができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本実施例に係る解析装置の処理の一例を説明するための図である。
【図２】図２は、本実施例に係る解析装置の構成を示す機能ブロック図である。
【図３】図３は、文字列データのデータ構造の一例を示す図である。
【図４】図４は、辞書データのデータ構造の一例を示す図である。
【図５】図５は、配列データのデータ構造の一例を示す図である。
【図６】図６は、インデックスのデータ構造の一例を示す図である。
【図７】図７は、インデックスのハッシュ化を説明するための図である。
【図８】図８は、インデックスデータのデータ構造の一例を示す図である。
【図９】図９は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。
【図１０】図１０は、ＣＪＫ単語を抽出する処理の一例を説明するための図（１）である。
【図１１】図１１は、ＣＪＫ単語を抽出する処理の一例を説明するための図（２）である。
【図１２】図１２は、解析装置の設定部の処理手順を示すフローチャートである。
【図１３】図１３は、解析装置の抽出部の処理手順を示すフローチャートである。
【図１４】図１４は、解析装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する解析プログラム、解析方法および解析装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１７】
図１は、本実施例に係る解析装置の処理の一例を説明するための図である。図１に示すように、解析装置は、文字列データ１４０ａから、分割候補となる単語を抽出する場合に、下記の処理を実行する。たとえば、文字列データ１４０ａは、ＣＪＫ文字で構成された文書のデータであるものとする。ＣＪＫ文字は中国語、日本語または韓国語の文字に対応する。
【００１８】
解析装置は、文字列データ１４０ａと、辞書データ１４０ｂとを比較する。辞書データ１４０ｂは、分割候補となる単語（形態素）を定義したデータである。
【００１９】
解析装置は、文字列データ１４０ａを先頭から走査し、辞書データ１４０ｂに定義された単語にヒットした文字列を抽出し、配列データ１４０ｃに格納する。
【００２０】
配列データ１４０ｃは、文字列データ１４０ａに含まれる文字列のうち、辞書データ１４０ｂに定義された単語を有する。各単語の区切りには、＜ＵＳ（unit  separator）＞を登録する。たとえば、解析装置は、文字列データ１４０ａと、辞書データ１４０ｂとを比較により、辞書データ１４０ｂに登録された「アメリカ」、「アメリカ先住民」、「アメリカ先住民族」が順にヒットした場合には、図１に示す配列データ１４０ｃを生成する。
【００２１】
解析装置は、配列データ１４０ｃを生成すると、配列データ１４０ｃに対応するインデックス１４０ｄを生成する。インデックス１４０ｄは、文字と、オフセットとを対応づけた情報である。オフセットは、配列データ１４０ｃ上に存在する該当する文字の位置を示すものである。たとえば、文字「ア」が、配列データ１４０ｃの先頭からｎ１文字目に存在する場合には、インデックス１４０ｄの文字「ア」に対応する行（ビットマップ）において、オフセットｎ１の位置にフラグ「１」が立つ。
【００２２】
また、本実施例におけるインデックス１４０ｄは、単語の「先頭」、「末尾」、＜ＵＳ＞の位置も、オフセットと対応づける。たとえば、単語「アメリカ」の先頭は「ア」、末尾は「カ」となる。単語「アメリカ」の先頭「ア」が、配列データ１４０ｃの先頭からｎ２文字目に存在する場合には、インデックス１４０ｄの先頭に対応する行において、オフセットｎ２の位置にフラグ「１」が立つ。単語「アメリカ」の末尾「カ」が、配列データ１４０ｃの先頭からｎ３文字目に存在する場合には、インデックス１４０ｄの「末尾」に対応する行において、オフセットｎ３の位置にフラグ「１」が立つ。
【００２３】
また、「＜ＵＳ＞」が、配列データ１４０ｃの先頭からｎ４文字目に存在する場合には、インデックス１４０ｄの「＜ＵＳ＞」に対応する行において、オフセットｎ４の位置にフラグ「１」が立つ。
【００２４】
解析装置は、インデックス１４０ｄを参照することで、文字列データ１４０ａに含まれる単語を構成する文字の位置、文字の先頭、末尾、区切り（＜ＵＳ＞）を把握することができる。また、文字列データ１４０ａのうち、インデックス１４０ｄから判断可能な先頭から末尾までに含まれる文字列は、分割可能な単語であると言える。
【００２５】
解析装置は、インデックス１４０ｄを基にして、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、文字列データ１４０ａから、分割可能な単語を抽出する。図１に示す抽出結果１４０ｅには、単語「アメリカ」、「アメリカ先住民」、「アメリカ先住民族」が抽出されている。
【００２６】
上記のように、解析装置は、文字列データ１４０ａおよび辞書データ１４０ｂを基にして、辞書データ１４０ｂの単語（形態素）に関するインデックス１４０ｄを生成し、各単語について、先頭と末尾とを判別可能なフラグを設定する。そして、解析装置は、インデックス１４０ｄを利用することで、文字列データ１４０ａから複数の分割可能な単語を抽出する。たとえば、インデックス１４０ｄは、辞書データ１４０ｂに定義された分割可能な単語のかたまりがそれぞれ、先頭・末尾のフラグにより、識別可能となっており、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、分割可能な単語を抽出している。このため、分割可能な単語を認識でき、単語に対する値を利用した解析を行うことができる。
【００２７】
たとえば、単語に対する値を利用した解析の一例としては、解析装置が抽出した単語を処理単位として、文字列データ１４０ａのベクトル演算を行う処理が上げられる。
【００２８】
図２は、本実施例に係る解析装置の構成を示す機能ブロック図である。図２に示すように、解析装置１００は、通信部１１０と、入力部１２０と、表示部１３０と、記憶部１４０と、制御部１５０とを有する。
【００２９】
通信部１１０は、ネットワークを介して、他の外部装置と通信を行う処理部である。通信部１１０は、通信装置に対応する。たとえば、解析装置１００は、外部装置から、文字列データ１４０ａ、辞書データ１４０ｂ等を受信して、記憶部１４０に格納しても良い。
【００３０】
入力部１２０は、各種の情報を解析装置１００に入力するための入力装置である。たとえば、入力部１２０は、キーボードやマウス、タッチパネル等に対応する。
【００３１】
表示部１３０は、制御部１５０から出力される各種の情報を表示するための表示装置である。たとえば、表示部１３０は、液晶ディスプレイやタッチパネルに対応する。
【００３２】
記憶部１４０は、文字列データ１４０ａ、辞書データ１４０ｂ、配列データ１４０ｃ、インデックスデータ１４５、抽出結果１４０ｅを有する。記憶部１４０は、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子や、ＨＤＤ（Hard  Disk  Drive）などの記憶装置に対応する。
【００３３】
文字列データ１４０ａは、処理対象となる文書のデータである。図３は、文字列データのデータ構造の一例を示す図である。図３に示すように、文字列データ１４０ａは、たとえば、ＣＪＫ文字で記載されたものとなる。
【００３４】
辞書データ１４０ｂは、分割候補となるＣＪＫ単語を定義する情報である。図４は、辞書データのデータ構造の一例を示す図である。図４に示すＣＪＫ単語は一例である。ここでは一例として、名詞のＣＪＫ単語を示すが、辞書データ１４０ｂには、形容詞、動詞、副詞等のＣＪＫ単語が含まれているものとする。また、動詞については、動詞の活用形が定義される。
【００３５】
配列データ１４０ｃは、文字列データ１４０ａに含まれる文字列のうち、辞書データ１４０ｂに定義されたＣＪＫ単語を有する。図５は、配列データのデータ構造の一例を示す図である。図５に示す例では、配列データ１４０ｃは、各ＣＪＫ単語が＜ＵＳ＞により分けられている。なお、配列データ１４０ｃの上側に示す数字は、配列データ１４０ｃの先頭「０」からのオフセットを示す。
【００３６】
インデックスデータ１４５は、図１で説明したインデックス１４０ｄに対応するデータである。後述するように、インデックス１４０ｄは、ハッシュ化され、インデックスデータ１４５として、記憶部１４０に格納される。
【００３７】
抽出結果１４０ｅは、後述する制御部１５０の処理により、文字列データ１４０ａから抽出される、分割候補となる単語の抽出結果を示すものである。
【００３８】
制御部１５０は、設定部１５０ａおよび抽出部１５０ｂを有する。制御部１５０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などによって実現できる。また、制御部１５０は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによっても実現できる。
【００３９】
設定部１５０ａは、文字列データ１４０ａおよび辞書データ１４０ｂを基にして、配列データ１４０ｃを生成し、配列データ１４０ｃを基にして、インデックスデータ１４５を生成する処理部である。
【００４０】
設定部１５０ａが、文字列データ１４０ａと辞書データ１４０ｂとを基にして、配列データ１４０ｃを生成する処理の一例について説明する。設定部１５０ａは、文字列データ１４０ａと、辞書データ１４０ｂとを比較する。設定部１５０ａは、文字列データ１４０ａを先頭から走査し、辞書データ１４０ｂに登録されたＣＪＫ単語にヒットした文字列を抽出し、配列データ１４０ｃに格納する。設定部１５０ａは、ヒットした文字列を配列データ１４０ｃに格納し、次にヒットした文字列を配列データ１４０ｃに格納する場合には、先の文字列の次に＜ＵＳ＞を設定し、設定した＜ＵＳ＞の次に、次にヒットした文字列を格納する。設定部１５０ａは、上記処理を繰り返し実行することで、配列データ１４０ｃを生成する。
【００４１】
設定部１５０ａは、配列データ１４０ｃを生成した後に、インデックス１４０ｄを生成する。設定部１５０ａは、配列データ１４０ｃを先頭から走査し、ＣＪＫ文字とオフセット、ＣＪＫ文字列の先頭とオフセット、ＣＪＫ文字列の末尾とオフセット、＜ＵＳ＞とオフセットとを対応づけることで、インデックス１４０ｄを生成する。
【００４２】
図６は、インデックスのデータ構造の一例を示す図である。図６に示すように、インデックス１４０ｄは、各ＣＪＫ文字、＜ＵＳ＞、先頭、末尾に対応するビットマップ２１〜３１を有する。たとえば、ＣＪＫ文字「ア」、「メ」、「リ」、「カ」、「先」、「住」、「民」、「族」に対応するビットマップを、ビットマップ２１〜２８とする。図６では、他のＣＪＫ文字に対応するビットマップの図示は省略する。
【００４３】
＜ＵＳ＞に対応するビットマップをビットマップ２９とする。文字の「先頭」に対応するビットマップをビットマップ３０とする。文字の「末尾」に対応するビットマップをビットマップ３１とする。
【００４４】
たとえば、図５に示した配列データ１４０ｃにおいて、ＣＪＫ文字「ア」が、配列データ１４０ｃのオフセット「６、１１、１９」に存在している。このため、設定部１５０ａは、図６に示すインデックス１４０ｄのビットマップ２１のオフセット「６、１１、１９」にフラグ「１」を立てる。配列データ１４０ｃは、他のＣＪＫ文字、＜ＵＳ＞についても同様に、フラグを立てる。
【００４５】
図５に示した配列データ１４０ｃにおいて、各ＣＪＫ単語の先頭が、配列データ１４０ｃのオフセット「６、１１、１９」に存在している。このため、設定部１５０ａは、図６に示すインデックス１４０ｄのビットマップ３０のオフセット「６、１１、１９」にフラグ「１」を立てる。
【００４６】
図５に示した配列データ１４０ｃにおいて、各ＣＪＫ単語の末尾が、配列データ１４０ｃのオフセット「９、１７、２６」に存在している。このため、設定部１５０ａは、図６に示すインデックス１４０ｄのビットマップ３１のオフセット「９、１７、２６」にフラグ「１」を立てる。
【００４７】
設定部１５０ａは、インデックス１４０ｄを生成すると、インデックス１４０ｄのデータ量を削減するために、インデックス１４０ｄをハッシュ化することで、インデックスデータ１４５を生成する。
【００４８】
図７は、インデックスのハッシュ化を説明するための図である。ここでは一例として、インデックスにビットマップ１０が含まれるものとし、かかるビットマップ１０をハッシュ化する場合について説明する。
【００４９】
たとえば、設定部１５０ａは、ビットマップ１０から、底２９のビットマップ１０ａと、底３１のビットマップ１０ｂを生成する。ビットマップ１０ａは、ビットマップ１０に対して、オフセット２９毎に区切りを設定し、設定した区切りを先頭とするフラグ「１」のオフセットを、ビットマップ１０ａのオフセット０〜２８のフラグで表現する。
【００５０】
設定部１５０ａは、ビットマップ１０のオフセット０〜２８までの情報を、ビットマップ１０ａにコピーする。設定部１５０ａは、ビットマップ１０ａの２９以降のオフセットの情報を下記の様に処理する。
【００５１】
ビットマップ１０のオフセット「３５」にフラグ「１」が立っている。オフセット「３５」は、オフセット「２８＋７」であるため、設定部１５０ａは、ビットマップ１０ａのオフセット「６」に「（１）」を立てる。なお、オフセットの１番目を０としている。ビットマップ１０のオフセット「４２」にフラグ「１」が立っている。オフセット「４２」は、オフセット「２８＋１４」であるため、設定部１５０ａは、ビットマップ１０ａのオフセット「１３」にフラグ「（１）」を立てる。
【００５２】
ビットマップ１０ｂは、ビットマップ１０に対して、オフセット３１毎に区切りを設定し、設定した区切りを先頭とするフラグ「１」のオフセットを、ビットマップ１０ｂのオフセット０〜３０のフラグで表現する。
【００５３】
ビットマップ１０のオフセット「３５」にフラグ「１」が立っている。オフセット「３５」は、オフセット「３０＋５」であるため、設定部１５０ａは、ビットマップ１０ｂのオフセット「４」に「（１）」を立てる。なお、オフセットの１番目を０としている。ビットマップ１０のオフセット「４２」にフラグ「１」が立っている。オフセット「４２」は、オフセット「３０＋１２」であるため、設定部１５０ａは、ビットマップ１０ｂのオフセット「１１」にフラグ「（１）」を立てる。
【００５４】
設定部１５０ａは、上記処理を実行することで、ビットマップ１０からビットマップ１０ａ、１０ｂを生成する。このビットマップ１０ａ，１０ｂが、ビットマップ１０をハッシュ化した結果となる。ここでは、ビットマップ１０の長さが０〜４３である場合について説明したが、ビットマップ１０の長さが４３以上になる場合でも、ビットマップ１０に設定されたフラグ「１」を、ビットマップ１０ａおよびビットマップ１０ｂで表現することができる。
【００５５】
設定部１５０ａは、図６に示した各ビットマップ２１〜３１に対してハッシュ化を行うことで、インデックスデータ１４５を生成する。図８は、インデックスデータのデータ構造の一例を示す図である。たとえば、図６に示したインデックス１４０ｄのビットマップ２１に対して、ハッシュ化を行うと、図８に示したビットマップ２１ａおよびビットマップ２１ｂが生成される。図６に示したインデックス１４０ｄのビットマップ２２に対して、ハッシュ化を行うと、図８に示したビットマップ２２ａおよびビットマップ２２ｂが生成される。図６に示したインデックス１４０ｄのビットマップ２９に対して、ハッシュ化を行うと、図８に示したビットマップ２９ａおよびビットマップ２９ｂが生成される。図８において、その他のハッシュ化されたビットマップに関する図示を省略する。
【００５６】
図２の説明に戻る。抽出部１５０ｂは、インデックスデータ１４５を基にしてインデックス１４０ｄを生成し、インデックス１４０ｄを基にして、複数の分割可能なＣＪＫ単語を抽出する処理部である。
【００５７】
まず、抽出部１５０ｂが、インデックスデータ１４５を基にして、インデックス１４０ｄを生成する処理の一例について説明する。図９は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。ここでは一例として、ビットマップ１０ａとビットマップ１０ｂとを基にして、ビットマップ１０を復元する処理について説明する。ビットマップ１０、１０ａ、１０ｂは、図７で説明したものに対応する。
【００５８】
ステップＳ１０の処理について説明する。抽出部１５０ｂは、底２９のビットマップ１０ａを基にして、ビットマップ１１ａを生成する。ビットマップ１１ａのオフセット０〜２８のフラグの情報は、ビットマップ１０ａのオフセット０〜２８のフラグの情報と同様となる。ビットマップ１１ａのオフセット２９以降のフラグの情報は、ビットマップ１０ａのオフセット０〜２８のフラグの情報の繰り返しとなる。
【００５９】
ステップＳ１１の処理について説明する。抽出部１５０ｂは、底３１のビットマップ１０ｂを基にして、ビットマップ１１ｂを生成する。ビットマップ１１ｂのオフセット０〜３０のフラグの情報は、ビットマップ１０ｂのオフセット０〜３０のフラグの情報と同様となる。ビットマップ１１ｂのオフセット３１以降のフラグの情報は、ビットマップ１０ｂのオフセット０〜３０のフラグの情報の繰り返しとなる。
【００６０】
ステップＳ１２の処理について説明する。抽出部１５０ｂは、ビットマップ１１ａとビットマップ１１ｂとのＡＮＤ演算を実行することで、ビットマップ１０を生成する。図９に示す例では、オフセット「０、５、１１、１８、２５、３５、４２」において、ビットマップ１１ａおよびビットマップ１１ｂのフラグが「１」となっている。このため、ビットマップ１０のオフセット「０、５、１１、１８、２５、３５、４２」のフラグが「１」となる。このビットマップ１０が、復元されたビットマップとなる。抽出部１５０ｂは、他のビットマップについても同様の処理を繰り返し実行することで、各ビットマップを復元し、インデックス１４０ｄを生成する。
【００６１】
抽出部１５０ｂは、インデックス１４０ｄを生成した後に、インデックス１４０ｄを基にして、分割可能なＣＪＫ単語を抽出する。図１０および図１１は、ＣＪＫ単語を抽出する処理の一例を説明するための図である。図１０および図１１に示す例では、文字列データ１４０ａに「アメリカ先住民の・・・」が含まれており、係る文字列データ１４０ａの１番目の文字から順に、該当する文字のビットマップを、インデックス１４０ｄから読み出して、下記の処理を実行する。
【００６２】
ステップＳ２０について説明する。抽出部１５０ｂは、インデックス１４０ｄから、先頭のビットマップ３０、末尾のビットマップ３１、文字「ア」のビットマップ２１を読み出す。抽出部１５０ｂは、先頭のビットマップ３０と文字「ア」のビットマップ２１とのＡＮＤ演算を実行することで、文字の先頭位置を特定する。先頭のビットマップ３０と文字「ア」のビットマップ２１とのＡＮＤ演算の結果をビットマップ３０Ａとする。ビットマップ３０Ａでは、オフセット「６、１１、１９」にフラグ「１」が立っており、オフセット「６、１１、１９」が、ＣＪＫ単語の先頭であることを示す。
【００６３】
抽出部１５０ｂは、末尾のビットマップ３１と文字「ア」のビットマップ２１とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字「ア」のビットマップ２１とのＡＮＤ演算の結果をビットマップ３１Ａとする。ビットマップ３１Ａには、フラグ「１」が立っていないため、「ア」に末尾候補が存在しないことを示す。
【００６４】
ステップＳ２１について説明する。抽出部１５０ｂは、文字「ア」のビットマップ２１を左に１つシフトすることで、ビットマップ２１Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「メ」のビットマップ２２を読み出す。抽出部１５０ｂは、ビットマップ２１Ａとビットマップ２２とのＡＮＤ演算を実行することで、文字列「アメ」に対応するビットマップ５０を生成する。
【００６５】
抽出部１５０ｂは、末尾のビットマップ３１と文字列「アメ」のビットマップ５０とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字列「アメ」のビットマップ５０とのＡＮＤ演算の結果をビットマップ３１Ｂとする。ビットマップ３１Ｂには、フラグ「１」が立っていないため、文字列「アメ」に末尾候補が存在しないことを示す。
【００６６】
ステップＳ２２について説明する。抽出部１５０ｂは、文字列「アメ」のビットマップ５０を左に一つシフトすることで、ビットマップ５０Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「り」のビットマップ２３を読み出す。抽出部１５０ｂは、ビットマップ５０Ａとビットマップ２３とのＡＮＤ演算を実行することで、文字列「アメリ」に対応するビットマップ５１を生成する。
【００６７】
抽出部１５０ｂは、末尾のビットマップ３１と文字列「アメリ」のビットマップ５１とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字列「アメリ」のビットマップ５１とのＡＮＤ演算の結果をビットマップ３１Ｃとする。ビットマップ３１Ｃには、フラグ「１」が立っていないため、文字列「アメリ」に末尾候補が存在しないことを示す。
【００６８】
ステップＳ２３について説明する。抽出部１５０ｂは、文字列「アメリ」のビットマップ５１を左に一つシフトすることで、ビットマップ５１Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「カ」のビットマップ２４を読み出す。抽出部１５０ｂは、ビットマップ５１Ａとビットマップ２４とのＡＮＤ演算を実行することで、文字列「アメリカ」に対応するビットマップ５２を生成する。
【００６９】
抽出部１５０ｂは、末尾のビットマップ３１と文字列「アメリカ」のビットマップ５２とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字列「アメリカ」のビットマップ５２とのＡＮＤ演算の結果をビットマップ３１Ｄとする。ビットマップ３１Ｄには、フラグ「１」が立っているため、文字列「アメリカ」に末尾候補「カ」が存在することを示す。抽出部１５０ｂは、ステップＳ２０で特定した先頭の文字「ア」から、ステップＳ２３で判定した末尾の文字「カ」までの文字列「アメリカ」を分割候補のＣＪＫ単語として抽出する。
【００７０】
ステップＳ２４について説明する。抽出部１５０ｂは、文字列「アメリカ」のビットマップ５２を左に一つシフトすることで、ビットマップ５２Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「先」のビットマップ２５を読み出す。抽出部１５０ｂは、ビットマップ５２Ａとビットマップ２５とのＡＮＤ演算を実行することで、文字列「アメリカ先」に対応するビットマップ５３を生成する。
【００７１】
抽出部１５０ｂは、末尾のビットマップ３１と文字列「アメリカ先」のビットマップ５３とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字列「アメリカ先」のビットマップ５３とのＡＮＤ演算の結果をビットマップ３１Ｅとする。ビットマップ３１Ｅには、フラグ「１」が立っていないため、文字列「アメリカ先」に末尾候補が存在しないことを示す。
【００７２】
ステップＳ２５について説明する。抽出部１５０ｂは、文字列「アメリカ先」のビットマップ５３を左に一つシフトすることで、ビットマップ５３Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「住」のビットマップ２６を読み出す。抽出部１５０ｂは、ビットマップ５３Ａとビットマップ２６とのＡＮＤ演算を実行することで、文字列「アメリカ先住」に対応するビットマップ５４を生成する。
【００７３】
抽出部１５０ｂは、末尾のビットマップ３１と文字列「アメリカ先住」のビットマップ５４とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字列「アメリカ先住」のビットマップ５４とのＡＮＤ演算の結果をビットマップ３１Ｆとする。ビットマップ３１Ｆには、フラグ「１」が立っていないため、文字列「アメリカ先住」に末尾候補が存在しないことを示す。
【００７４】
ステップＳ２６について説明する。抽出部１５０ｂは、文字列「アメリカ先住」のビットマップ５４を左に一つシフトすることで、ビットマップ５４Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「民」のビットマップ２７を読み出す。抽出部１５０ｂは、ビットマップ５４Ａとビットマップ２７とのＡＮＤ演算を実行することで、文字列「アメリカ先住民」に対応するビットマップ５５を生成する。
【００７５】
抽出部１５０ｂは、末尾のビットマップ３１と文字列「アメリカ先住民」のビットマップ５５とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字列「アメリカ先住民」のビットマップ５５とのＡＮＤ演算の結果をビットマップ３１Ｇとする。ビットマップ３１Ｇには、フラグ「１」が立っているため、文字列「アメリカ先住民」に末尾候補「民」が存在することを示す。抽出部１２０ｂは、ステップＳ２０で特定した先頭の文字「ア」から、ステップＳ２６で判定した末尾の文字「民」までの文字列「アメリカ先住民」を分割候補のＣＪＫ単語として抽出する。
【００７６】
ステップＳ２７について説明する。抽出部１５０ｂは、文字列「アメリカ先住民」のビットマップ５５を左に一つシフトすることで、ビットマップ５５Ａを生成する。抽出部１５０ｂは、インデックス１４０ｄから、文字「族」のビットマップ２８を読み出す。抽出部１５０ｂは、ビットマップ５５Ａとビットマップ２８とのＡＮＤ演算を実行することで、文字列「アメリカ先住民族」に対応するビットマップ５６を生成する。
【００７７】
抽出部１５０ｂは、末尾のビットマップ３１と文字列「アメリカ先住民族」のビットマップ５６とのＡＮＤ演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ３１と文字列「アメリカ先住民族」のビットマップ５６とのＡＮＤ演算の結果をビットマップ３１Ｈとする。ビットマップ３１Ｈには、フラグ「１」が立っているため、文字列「アメリカ先住民族」に末尾候補「族」が存在することを示す。抽出部１２０ｂは、ステップＳ２０で特定した先頭の文字「ア」から、ステップＳ２７で判定した末尾の文字「族」までの文字列「アメリカ先住民族」を分割候補のＣＪＫ単語として抽出する。
【００７８】
抽出部１５０ｂは、文字列「アメリカ先住民族」のビットマップ５６を左に一つシフトすることで、ビットマップ５６Ａを生成する。抽出部１５０ｂは、文字列「の」に対応するビットマップは、インデックス１４０ｄに存在しないため、フラグが全て「０」のビットマップ２９を生成する。この場合には、抽出部１５０ｂは、ひとつ前のビットマップ５６を「アメリカ先住民族の」のビットマップとする。
【００７９】
抽出部１５０ｂは、ステップＳ２０〜ステップＳ２７までの処理を実行することで、文字列データ１４０ａに含まれる分割可能なＣＪＫ単語「アメリカ」、「アメリカ先住民」、「アメリカ先住民族」を抽出する。抽出部１５０ｂは、抽出した各ＣＪＫ単語の情報を、抽出結果１４０ｅとして記憶部１４０に格納する。
【００８０】
次に、本実施例に係る解析装置１００の処理手順の一例について説明する。図１２は、解析装置の設定部の処理手順を示すフローチャートである。図１２に示すように、解析装置１００の設定部１５０ａは、文字列データ１４０ａと辞書データ１４０ｂのＣＪＫ単語とを比較する（ステップＳ１０１）。
【００８１】
設定部１５０ａは、ヒットした文字列（ＣＪＫ単語）を配列データ１４０ｃに登録する（ステップＳ１０２）。設定部１５０ａは、配列データ１４０ｃを基にして、各文字（ＣＪＫ文字）のインデックス１４０ｄを生成する（ステップＳ１０３）。設定部１５０ａは、インデックス１４０ｄをハッシュ化し、インデックスデータ１４５を生成する（ステップＳ１０４）。
【００８２】
図１３は、解析装置の抽出部の処理手順を示すフローチャートである。図１３に示すように、解析装置１００の抽出部１５０ｂは、ハッシュ化されたインデックスデータ１４５からインデックス１４０ｄを復元する（ステップＳ２０１）。
【００８３】
抽出部１５０ｂは、文字列データ１４０ａの先頭から１番目の文字のビットマップを第１ビットマップに設定し、先頭から２番目の文字のビットマップを第２ビットマップに設定する（ステップＳ２０２）。
【００８４】
抽出部１５０ｂは、第１ビットマップと先頭ビットマップとを「ＡＮＤ演算」し、演算結果に「１」が存在する場合に、第１ビットマップに対応する文字を先頭文字として特定する（ステップＳ２０３）。
【００８５】
抽出部１５０ｂは、第１ビットマップと末尾ビットマップとを「ＡＮＤ演算」し、演算結果に「１」が存在する場合に、第１ビットマップに対応する文字を、末尾文字として特定し、分割候補を抽出する（ステップＳ２０４）。
【００８６】
抽出部１５０ｂは、文字列データ１４０ａの終端に到達した場合には（ステップＳ２０５，Ｙｅｓ）、抽出結果１４０ｅを記憶部１４０に保存する（ステップＳ２０６）。一方、抽出部１５０ｂは、文字列データ１４０ａの終端に到達していない場合には（ステップＳ２０５，Ｎｏ）、ステップＳ２０７に移行する。
【００８７】
抽出部１５０ｂは、第１ビットマップを左に一つシフトする（ステップＳ２０７）。抽出部１５０ｂは、第１ビットマップと第２ビットマップとを「ＡＮＤ演算」したビットマップを新たな第１ビットマップに設定する（ステップＳ２０８）。
【００８８】
抽出部１５０ｂは、第２ビットマップの文字の次の文字に対応するビットマップを、新たな第２ビットマップに設定し（ステップＳ２０９）、ステップＳ２０３に移行する。
【００８９】
次に、本実施例に係る解析装置１００の効果について説明する。解析装置１００は、文字列データ１４０ａおよび辞書データ１４０ｂを基にして、辞書データ１４０ｂの単語（形態素）に関するインデックス１４０ｄを生成し、各単語について、先頭と末尾とを判別可能なフラグを設定する。そして、解析装置１００は、インデックス１４０ｄを利用することで、文字列データ１４０ａから複数の分割可能な単語を抽出する。たとえば、インデックス１４０ｄは、辞書データ１４０ｂに定義された分割可能な単語のかたまりがそれぞれ、先頭・末尾のフラグにより、識別可能となっており、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、分割可能なＣＪＫ単語を抽出している。また、解析装置１００は、インデックス１４０ｄを用いて、分割可能なＣＪＫ単語を認識しており、高速、かつ、ファイルサイズを抑えて解析を行うことができる。
【００９０】
解析装置１００は、文字列データ１４０ａに含まれる各文字の組み合わせに対応するビットマップと、先頭ビットマップおよび末尾ビットマップとをＡＮＤ演算を行うことで、分割可能なＣＪＫ単語の先頭位置および末尾位置を判定する。これにより、インデックス１４０ｄを用いて、分割可能なＣＪＫ単語の先頭と末尾をＡＮＤ演算により特定でき、計算コストを削減できる。また、解析装置１００は、インデックス１４０ｄをハッシュ化して、インデックスデータ１４５を生成し、記憶部１４０に格納するため、記憶部１４０が記憶するデータの量をより少なくすることができる。
【００９１】
次に、上記実施例に示した解析装置１００と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図１４は、解析装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【００９２】
図１４に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る読み取り装置２０４と、有線または無線ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７とを有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【００９３】
ハードディスク装置２０７は、設定プログラム２０７ａ、抽出プログラム２０７ｂを有する。ＣＰＵ２０１は、設定プログラム２０７ａ、抽出プログラム２０７ｂを読み出してＲＡＭ２０６に展開する。
【００９４】
設定プログラム２０７ａは、設定プロセス２０６ａとして機能する。抽出プログラム２０７ｂは、抽出プロセス２０６ｂとして機能する。
【００９５】
設定プロセス２０６ａの処理は、設定部１５０ａの処理に対応する。抽出プロセス２０６ｂの処理は、抽出部１５０ｂの処理に対応する。
【００９６】
なお、各プログラム２０７ａ、２０７ｂについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくても良い。たとえば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ２００が各プログラム２０６ａ、２０６ｂを読み出して実行するようにしても良い。
【００９７】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９８】
（付記１）コンピュータに、
形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する
処理を実行させる解析プログラム。
【００９９】
（付記２）前記インデックスを生成する処理は、前記文字データと前記辞書に登録された形態素それぞれとを比較して、前記文字データに含まれる形態素を並べた配列データを生成し、前記配列データの文字のオフセットを示すフラグを設置したビットマップを文字毎に生成することで、前記インデックスを生成することを特徴とする付記１に記載の解析プログラム。
【０１００】
（付記３）前記配列データの文字のうち、先頭の文字のオフセットを示すフラグを設置した先頭ビットマップと、末尾の文字のオフセットを示すフラグを設置した末尾ビットマップとを、前記インデックスに設定する処理を更に実行させることを特徴とする付記２に記載の解析プログラム。
【０１０１】
（付記４）前記抽出する処理は、前記文字データに含まれる各文字の組み合わせに対応するビットマップと、前記先頭ビットマップおよび前記末尾ビットマップとをＡＮＤ演算を行うことで、分割可能な単語の先頭位置および末尾位置を判定し、判定結果を基にして、複数の分割可能な単語を抽出することを特徴とする付記３に記載の解析プログラム。
【０１０２】
（付記５）コンピュータが実行する解析方法であって、
形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する
処理を実行する解析方法。
【０１０３】
（付記６）前記インデックスを生成する処理は、前記文字データと前記辞書に登録された形態素それぞれとを比較して、前記文字データに含まれる形態素を並べた配列データを生成し、前記配列データの文字のオフセットを示すフラグを設置したビットマップを文字毎に生成することで、前記インデックスを生成することを特徴とする付記５に記載の解析方法。
【０１０４】
（付記７）前記配列データの文字のうち、先頭の文字のオフセットを示すフラグを設置した先頭ビットマップと、末尾の文字のオフセットを示すフラグを設置した末尾ビットマップとを、前記インデックスに設定する処理を更に実行することを特徴とする付記６に記載の解析方法。
【０１０５】
（付記８）前記抽出する処理は、前記文字データに含まれる各文字の組み合わせに対応するビットマップと、前記先頭ビットマップおよび前記末尾ビットマップとをＡＮＤ演算を行うことで、分割可能な単語の先頭位置および末尾位置を判定し、判定結果を基にして、複数の分割可能な単語を抽出することを特徴とする付記７に記載の解析方法。
【０１０６】
（付記９）形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成する設定部と、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する抽出部と
を有する解析装置。
【０１０７】
（付記１０）前記設定部は、前記文字データと前記辞書に登録された形態素それぞれとを比較して、前記文字データに含まれる形態素を並べた配列データを生成し、前記配列データの文字のオフセットを示すフラグを設置したビットマップを文字毎に生成することで、前記インデックスを生成することを特徴とする付記９に記載の解析装置。
【０１０８】
（付記１１）前記設定部は、前記配列データの文字のうち、先頭の文字のオフセットを示すフラグを設置した先頭ビットマップと、末尾の文字のオフセットを示すフラグを設置した末尾ビットマップとを、前記インデックスに設定することを特徴とする付記１０に記載の解析装置。
【０１０９】
（付記１２）前記抽出部は、前記文字データに含まれる各文字の組み合わせに対応するビットマップと、前記先頭ビットマップおよび前記末尾ビットマップとをＡＮＤ演算を行うことで、分割可能な単語の先頭位置および末尾位置を判定し、判定結果を基にして、複数の分割可能な単語を抽出することを特徴とする付記１１に記載の解析装置。
【符号の説明】
【０１１０】
１００    解析装置
１１０    通信部
１２０    入力部
１３０    表示部
１４０    記憶部
１４０ａ  文字列データ
１４０ｂ  辞書データ
１４０ｃ  配列データ
１４０ｄ  インデックス
１４０ｅ  抽出結果
１４５    インデックスデータ
１５０    制御部
１５０ａ  設定部
１５０ｂ  抽出部
【図１】
2018195030.tif 000003
【図２】
2018195030.tif 000004
【図３】
2018195030.tif 000005
【図４】
2018195030.tif 000006
【図５】
2018195030.tif 000007
【図６】
2018195030.tif 000008
【図７】
2018195030.tif 000009
【図８】
2018195030.tif 000010
【図９】
2018195030.tif 000011
【図１０】
2018195030.tif 000012
【図１１】
2018195030.tif 000013
【図１２】
2018195030.tif 000014
【図１３】
2018195030.tif 000015
【図１４】
2018195030.tif 000016