【実施例】
【0017】
図1は、本実施例に係る解析装置の処理の一例を説明するための図である。
図1に示すように、解析装置は、文字列データ140aから、分割候補となる単語を抽出する場合に、下記の処理を実行する。たとえば、文字列データ140aは、CJK文字で構成された文書のデータであるものとする。CJK文字は中国語、日本語または韓国語の文字に対応する。
【0018】
解析装置は、文字列データ140aと、辞書データ140bとを比較する。辞書データ140bは、分割候補となる単語(形態素)を定義したデータである。
【0019】
解析装置は、文字列データ140aを先頭から走査し、辞書データ140bに定義された単語にヒットした文字列を抽出し、配列データ140cに格納する。
【0020】
配列データ140cは、文字列データ140aに含まれる文字列のうち、辞書データ140bに定義された単語を有する。各単語の区切りには、<US(unit separator)>を登録する。たとえば、解析装置は、文字列データ140aと、辞書データ140bとを比較により、辞書データ140bに登録された「アメリカ」、「アメリカ先住民」、「アメリカ先住民族」が順にヒットした場合には、
図1に示す配列データ140cを生成する。
【0021】
解析装置は、配列データ140cを生成すると、配列データ140cに対応するインデックス140dを生成する。インデックス140dは、文字と、オフセットとを対応づけた情報である。オフセットは、配列データ140c上に存在する該当する文字の位置を示すものである。たとえば、文字「ア」が、配列データ140cの先頭からn
1文字目に存在する場合には、インデックス140dの文字「ア」に対応する行(ビットマップ)において、オフセットn
1の位置にフラグ「1」が立つ。
【0022】
また、本実施例におけるインデックス140dは、単語の「先頭」、「末尾」、<US>の位置も、オフセットと対応づける。たとえば、単語「アメリカ」の先頭は「ア」、末尾は「カ」となる。単語「アメリカ」の先頭「ア」が、配列データ140cの先頭からn
2文字目に存在する場合には、インデックス140dの先頭に対応する行において、オフセットn
2の位置にフラグ「1」が立つ。単語「アメリカ」の末尾「カ」が、配列データ140cの先頭からn
3文字目に存在する場合には、インデックス140dの「末尾」に対応する行において、オフセットn
3の位置にフラグ「1」が立つ。
【0023】
また、「<US>」が、配列データ140cの先頭からn
4文字目に存在する場合には、インデックス140dの「<US>」に対応する行において、オフセットn
4の位置にフラグ「1」が立つ。
【0024】
解析装置は、インデックス140dを参照することで、文字列データ140aに含まれる単語を構成する文字の位置、文字の先頭、末尾、区切り(<US>)を把握することができる。また、文字列データ140aのうち、インデックス140dから判断可能な先頭から末尾までに含まれる文字列は、分割可能な単語であると言える。
【0025】
解析装置は、インデックス140dを基にして、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、文字列データ140aから、分割可能な単語を抽出する。
図1に示す抽出結果140eには、単語「アメリカ」、「アメリカ先住民」、「アメリカ先住民族」が抽出されている。
【0026】
上記のように、解析装置は、文字列データ140aおよび辞書データ140bを基にして、辞書データ140bの単語(形態素)に関するインデックス140dを生成し、各単語について、先頭と末尾とを判別可能なフラグを設定する。そして、解析装置は、インデックス140dを利用することで、文字列データ140aから複数の分割可能な単語を抽出する。たとえば、インデックス140dは、辞書データ140bに定義された分割可能な単語のかたまりがそれぞれ、先頭・末尾のフラグにより、識別可能となっており、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、分割可能な単語を抽出している。このため、分割可能な単語を認識でき、単語に対する値を利用した解析を行うことができる。
【0027】
たとえば、単語に対する値を利用した解析の一例としては、解析装置が抽出した単語を処理単位として、文字列データ140aのベクトル演算を行う処理が上げられる。
【0028】
図2は、本実施例に係る解析装置の構成を示す機能ブロック図である。
図2に示すように、解析装置100は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部150とを有する。
【0029】
通信部110は、ネットワークを介して、他の外部装置と通信を行う処理部である。通信部110は、通信装置に対応する。たとえば、解析装置100は、外部装置から、文字列データ140a、辞書データ140b等を受信して、記憶部140に格納しても良い。
【0030】
入力部120は、各種の情報を解析装置100に入力するための入力装置である。たとえば、入力部120は、キーボードやマウス、タッチパネル等に対応する。
【0031】
表示部130は、制御部150から出力される各種の情報を表示するための表示装置である。たとえば、表示部130は、液晶ディスプレイやタッチパネルに対応する。
【0032】
記憶部140は、文字列データ140a、辞書データ140b、配列データ140c、インデックスデータ145、抽出結果140eを有する。記憶部140は、フラッシュメモリ(Flash Memory)などの半導体メモリ素子や、HDD(Hard Disk Drive)などの記憶装置に対応する。
【0033】
文字列データ140aは、処理対象となる文書のデータである。
図3は、文字列データのデータ構造の一例を示す図である。
図3に示すように、文字列データ140aは、たとえば、CJK文字で記載されたものとなる。
【0034】
辞書データ140bは、分割候補となるCJK単語を定義する情報である。
図4は、辞書データのデータ構造の一例を示す図である。
図4に示すCJK単語は一例である。ここでは一例として、名詞のCJK単語を示すが、辞書データ140bには、形容詞、動詞、副詞等のCJK単語が含まれているものとする。また、動詞については、動詞の活用形が定義される。
【0035】
配列データ140cは、文字列データ140aに含まれる文字列のうち、辞書データ140bに定義されたCJK単語を有する。
図5は、配列データのデータ構造の一例を示す図である。
図5に示す例では、配列データ140cは、各CJK単語が<US>により分けられている。なお、配列データ140cの上側に示す数字は、配列データ140cの先頭「0」からのオフセットを示す。
【0036】
インデックスデータ145は、
図1で説明したインデックス140dに対応するデータである。後述するように、インデックス140dは、ハッシュ化され、インデックスデータ145として、記憶部140に格納される。
【0037】
抽出結果140eは、後述する制御部150の処理により、文字列データ140aから抽出される、分割候補となる単語の抽出結果を示すものである。
【0038】
制御部150は、設定部150aおよび抽出部150bを有する。制御部150は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などによって実現できる。また、制御部150は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などのハードワイヤードロジックによっても実現できる。
【0039】
設定部150aは、文字列データ140aおよび辞書データ140bを基にして、配列データ140cを生成し、配列データ140cを基にして、インデックスデータ145を生成する処理部である。
【0040】
設定部150aが、文字列データ140aと辞書データ140bとを基にして、配列データ140cを生成する処理の一例について説明する。設定部150aは、文字列データ140aと、辞書データ140bとを比較する。設定部150aは、文字列データ140aを先頭から走査し、辞書データ140bに登録されたCJK単語にヒットした文字列を抽出し、配列データ140cに格納する。設定部150aは、ヒットした文字列を配列データ140cに格納し、次にヒットした文字列を配列データ140cに格納する場合には、先の文字列の次に<US>を設定し、設定した<US>の次に、次にヒットした文字列を格納する。設定部150aは、上記処理を繰り返し実行することで、配列データ140cを生成する。
【0041】
設定部150aは、配列データ140cを生成した後に、インデックス140dを生成する。設定部150aは、配列データ140cを先頭から走査し、CJK文字とオフセット、CJK文字列の先頭とオフセット、CJK文字列の末尾とオフセット、<US>とオフセットとを対応づけることで、インデックス140dを生成する。
【0042】
図6は、インデックスのデータ構造の一例を示す図である。
図6に示すように、インデックス140dは、各CJK文字、<US>、先頭、末尾に対応するビットマップ21〜31を有する。たとえば、CJK文字「ア」、「メ」、「リ」、「カ」、「先」、「住」、「民」、「族」に対応するビットマップを、ビットマップ21〜28とする。
図6では、他のCJK文字に対応するビットマップの図示は省略する。
【0043】
<US>に対応するビットマップをビットマップ29とする。文字の「先頭」に対応するビットマップをビットマップ30とする。文字の「末尾」に対応するビットマップをビットマップ31とする。
【0044】
たとえば、
図5に示した配列データ140cにおいて、CJK文字「ア」が、配列データ140cのオフセット「6、11、19」に存在している。このため、設定部150aは、
図6に示すインデックス140dのビットマップ21のオフセット「6、11、19」にフラグ「1」を立てる。配列データ140cは、他のCJK文字、<US>についても同様に、フラグを立てる。
【0045】
図5に示した配列データ140cにおいて、各CJK単語の先頭が、配列データ140cのオフセット「6、11、19」に存在している。このため、設定部150aは、
図6に示すインデックス140dのビットマップ30のオフセット「6、11、19」にフラグ「1」を立てる。
【0046】
図5に示した配列データ140cにおいて、各CJK単語の末尾が、配列データ140cのオフセット「9、17、26」に存在している。このため、設定部150aは、
図6に示すインデックス140dのビットマップ31のオフセット「9、17、26」にフラグ「1」を立てる。
【0047】
設定部150aは、インデックス140dを生成すると、インデックス140dのデータ量を削減するために、インデックス140dをハッシュ化することで、インデックスデータ145を生成する。
【0048】
図7は、インデックスのハッシュ化を説明するための図である。ここでは一例として、インデックスにビットマップ10が含まれるものとし、かかるビットマップ10をハッシュ化する場合について説明する。
【0049】
たとえば、設定部150aは、ビットマップ10から、底29のビットマップ10aと、底31のビットマップ10bを生成する。ビットマップ10aは、ビットマップ10に対して、オフセット29毎に区切りを設定し、設定した区切りを先頭とするフラグ「1」のオフセットを、ビットマップ10aのオフセット0〜28のフラグで表現する。
【0050】
設定部150aは、ビットマップ10のオフセット0〜28までの情報を、ビットマップ10aにコピーする。設定部150aは、ビットマップ10aの29以降のオフセットの情報を下記の様に処理する。
【0051】
ビットマップ10のオフセット「35」にフラグ「1」が立っている。オフセット「35」は、オフセット「28+7」であるため、設定部150aは、ビットマップ10aのオフセット「6」に「(1)」を立てる。なお、オフセットの1番目を0としている。ビットマップ10のオフセット「42」にフラグ「1」が立っている。オフセット「42」は、オフセット「28+14」であるため、設定部150aは、ビットマップ10aのオフセット「13」にフラグ「(1)」を立てる。
【0052】
ビットマップ10bは、ビットマップ10に対して、オフセット31毎に区切りを設定し、設定した区切りを先頭とするフラグ「1」のオフセットを、ビットマップ10bのオフセット0〜30のフラグで表現する。
【0053】
ビットマップ10のオフセット「35」にフラグ「1」が立っている。オフセット「35」は、オフセット「30+5」であるため、設定部150aは、ビットマップ10bのオフセット「4」に「(1)」を立てる。なお、オフセットの1番目を0としている。ビットマップ10のオフセット「42」にフラグ「1」が立っている。オフセット「42」は、オフセット「30+12」であるため、設定部150aは、ビットマップ10bのオフセット「11」にフラグ「(1)」を立てる。
【0054】
設定部150aは、上記処理を実行することで、ビットマップ10からビットマップ10a、10bを生成する。このビットマップ10a,10bが、ビットマップ10をハッシュ化した結果となる。ここでは、ビットマップ10の長さが0〜43である場合について説明したが、ビットマップ10の長さが43以上になる場合でも、ビットマップ10に設定されたフラグ「1」を、ビットマップ10aおよびビットマップ10bで表現することができる。
【0055】
設定部150aは、
図6に示した各ビットマップ21〜31に対してハッシュ化を行うことで、インデックスデータ145を生成する。
図8は、インデックスデータのデータ構造の一例を示す図である。たとえば、
図6に示したインデックス140dのビットマップ21に対して、ハッシュ化を行うと、
図8に示したビットマップ21aおよびビットマップ21bが生成される。
図6に示したインデックス140dのビットマップ22に対して、ハッシュ化を行うと、
図8に示したビットマップ22aおよびビットマップ22bが生成される。
図6に示したインデックス140dのビットマップ29に対して、ハッシュ化を行うと、
図8に示したビットマップ29aおよびビットマップ29bが生成される。
図8において、その他のハッシュ化されたビットマップに関する図示を省略する。
【0056】
図2の説明に戻る。抽出部150bは、インデックスデータ145を基にしてインデックス140dを生成し、インデックス140dを基にして、複数の分割可能なCJK単語を抽出する処理部である。
【0057】
まず、抽出部150bが、インデックスデータ145を基にして、インデックス140dを生成する処理の一例について説明する。
図9は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。ここでは一例として、ビットマップ10aとビットマップ10bとを基にして、ビットマップ10を復元する処理について説明する。ビットマップ10、10a、10bは、
図7で説明したものに対応する。
【0058】
ステップS10の処理について説明する。抽出部150bは、底29のビットマップ10aを基にして、ビットマップ11aを生成する。ビットマップ11aのオフセット0〜28のフラグの情報は、ビットマップ10aのオフセット0〜28のフラグの情報と同様となる。ビットマップ11aのオフセット29以降のフラグの情報は、ビットマップ10aのオフセット0〜28のフラグの情報の繰り返しとなる。
【0059】
ステップS11の処理について説明する。抽出部150bは、底31のビットマップ10bを基にして、ビットマップ11bを生成する。ビットマップ11bのオフセット0〜30のフラグの情報は、ビットマップ10bのオフセット0〜30のフラグの情報と同様となる。ビットマップ11bのオフセット31以降のフラグの情報は、ビットマップ10bのオフセット0〜30のフラグの情報の繰り返しとなる。
【0060】
ステップS12の処理について説明する。抽出部150bは、ビットマップ11aとビットマップ11bとのAND演算を実行することで、ビットマップ10を生成する。
図9に示す例では、オフセット「0、5、11、18、25、35、42」において、ビットマップ11aおよびビットマップ11bのフラグが「1」となっている。このため、ビットマップ10のオフセット「0、5、11、18、25、35、42」のフラグが「1」となる。このビットマップ10が、復元されたビットマップとなる。抽出部150bは、他のビットマップについても同様の処理を繰り返し実行することで、各ビットマップを復元し、インデックス140dを生成する。
【0061】
抽出部150bは、インデックス140dを生成した後に、インデックス140dを基にして、分割可能なCJK単語を抽出する。
図10および
図11は、CJK単語を抽出する処理の一例を説明するための図である。
図10および
図11に示す例では、文字列データ140aに「アメリカ先住民の・・・」が含まれており、係る文字列データ140aの1番目の文字から順に、該当する文字のビットマップを、インデックス140dから読み出して、下記の処理を実行する。
【0062】
ステップS20について説明する。抽出部150bは、インデックス140dから、先頭のビットマップ30、末尾のビットマップ31、文字「ア」のビットマップ21を読み出す。抽出部150bは、先頭のビットマップ30と文字「ア」のビットマップ21とのAND演算を実行することで、文字の先頭位置を特定する。先頭のビットマップ30と文字「ア」のビットマップ21とのAND演算の結果をビットマップ30Aとする。ビットマップ30Aでは、オフセット「6、11、19」にフラグ「1」が立っており、オフセット「6、11、19」が、CJK単語の先頭であることを示す。
【0063】
抽出部150bは、末尾のビットマップ31と文字「ア」のビットマップ21とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字「ア」のビットマップ21とのAND演算の結果をビットマップ31Aとする。ビットマップ31Aには、フラグ「1」が立っていないため、「ア」に末尾候補が存在しないことを示す。
【0064】
ステップS21について説明する。抽出部150bは、文字「ア」のビットマップ21を左に1つシフトすることで、ビットマップ21Aを生成する。抽出部150bは、インデックス140dから、文字「メ」のビットマップ22を読み出す。抽出部150bは、ビットマップ21Aとビットマップ22とのAND演算を実行することで、文字列「アメ」に対応するビットマップ50を生成する。
【0065】
抽出部150bは、末尾のビットマップ31と文字列「アメ」のビットマップ50とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字列「アメ」のビットマップ50とのAND演算の結果をビットマップ31Bとする。ビットマップ31Bには、フラグ「1」が立っていないため、文字列「アメ」に末尾候補が存在しないことを示す。
【0066】
ステップS22について説明する。抽出部150bは、文字列「アメ」のビットマップ50を左に一つシフトすることで、ビットマップ50Aを生成する。抽出部150bは、インデックス140dから、文字「り」のビットマップ23を読み出す。抽出部150bは、ビットマップ50Aとビットマップ23とのAND演算を実行することで、文字列「アメリ」に対応するビットマップ51を生成する。
【0067】
抽出部150bは、末尾のビットマップ31と文字列「アメリ」のビットマップ51とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字列「アメリ」のビットマップ51とのAND演算の結果をビットマップ31Cとする。ビットマップ31Cには、フラグ「1」が立っていないため、文字列「アメリ」に末尾候補が存在しないことを示す。
【0068】
ステップS23について説明する。抽出部150bは、文字列「アメリ」のビットマップ51を左に一つシフトすることで、ビットマップ51Aを生成する。抽出部150bは、インデックス140dから、文字「カ」のビットマップ24を読み出す。抽出部150bは、ビットマップ51Aとビットマップ24とのAND演算を実行することで、文字列「アメリカ」に対応するビットマップ52を生成する。
【0069】
抽出部150bは、末尾のビットマップ31と文字列「アメリカ」のビットマップ52とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字列「アメリカ」のビットマップ52とのAND演算の結果をビットマップ31Dとする。ビットマップ31Dには、フラグ「1」が立っているため、文字列「アメリカ」に末尾候補「カ」が存在することを示す。抽出部150bは、ステップS20で特定した先頭の文字「ア」から、ステップS23で判定した末尾の文字「カ」までの文字列「アメリカ」を分割候補のCJK単語として抽出する。
【0070】
ステップS24について説明する。抽出部150bは、文字列「アメリカ」のビットマップ52を左に一つシフトすることで、ビットマップ52Aを生成する。抽出部150bは、インデックス140dから、文字「先」のビットマップ25を読み出す。抽出部150bは、ビットマップ52Aとビットマップ25とのAND演算を実行することで、文字列「アメリカ先」に対応するビットマップ53を生成する。
【0071】
抽出部150bは、末尾のビットマップ31と文字列「アメリカ先」のビットマップ53とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字列「アメリカ先」のビットマップ53とのAND演算の結果をビットマップ31Eとする。ビットマップ31Eには、フラグ「1」が立っていないため、文字列「アメリカ先」に末尾候補が存在しないことを示す。
【0072】
ステップS25について説明する。抽出部150bは、文字列「アメリカ先」のビットマップ53を左に一つシフトすることで、ビットマップ53Aを生成する。抽出部150bは、インデックス140dから、文字「住」のビットマップ26を読み出す。抽出部150bは、ビットマップ53Aとビットマップ26とのAND演算を実行することで、文字列「アメリカ先住」に対応するビットマップ54を生成する。
【0073】
抽出部150bは、末尾のビットマップ31と文字列「アメリカ先住」のビットマップ54とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字列「アメリカ先住」のビットマップ54とのAND演算の結果をビットマップ31Fとする。ビットマップ31Fには、フラグ「1」が立っていないため、文字列「アメリカ先住」に末尾候補が存在しないことを示す。
【0074】
ステップS26について説明する。抽出部150bは、文字列「アメリカ先住」のビットマップ54を左に一つシフトすることで、ビットマップ54Aを生成する。抽出部150bは、インデックス140dから、文字「民」のビットマップ27を読み出す。抽出部150bは、ビットマップ54Aとビットマップ27とのAND演算を実行することで、文字列「アメリカ先住民」に対応するビットマップ55を生成する。
【0075】
抽出部150bは、末尾のビットマップ31と文字列「アメリカ先住民」のビットマップ55とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字列「アメリカ先住民」のビットマップ55とのAND演算の結果をビットマップ31Gとする。ビットマップ31Gには、フラグ「1」が立っているため、文字列「アメリカ先住民」に末尾候補「民」が存在することを示す。抽出部120bは、ステップS20で特定した先頭の文字「ア」から、ステップS26で判定した末尾の文字「民」までの文字列「アメリカ先住民」を分割候補のCJK単語として抽出する。
【0076】
ステップS27について説明する。抽出部150bは、文字列「アメリカ先住民」のビットマップ55を左に一つシフトすることで、ビットマップ55Aを生成する。抽出部150bは、インデックス140dから、文字「族」のビットマップ28を読み出す。抽出部150bは、ビットマップ55Aとビットマップ28とのAND演算を実行することで、文字列「アメリカ先住民族」に対応するビットマップ56を生成する。
【0077】
抽出部150bは、末尾のビットマップ31と文字列「アメリカ先住民族」のビットマップ56とのAND演算を実行することで、文字の末尾位置を特定する。末尾のビットマップ31と文字列「アメリカ先住民族」のビットマップ56とのAND演算の結果をビットマップ31Hとする。ビットマップ31Hには、フラグ「1」が立っているため、文字列「アメリカ先住民族」に末尾候補「族」が存在することを示す。抽出部120bは、ステップS20で特定した先頭の文字「ア」から、ステップS27で判定した末尾の文字「族」までの文字列「アメリカ先住民族」を分割候補のCJK単語として抽出する。
【0078】
抽出部150bは、文字列「アメリカ先住民族」のビットマップ56を左に一つシフトすることで、ビットマップ56Aを生成する。抽出部150bは、文字列「の」に対応するビットマップは、インデックス140dに存在しないため、フラグが全て「0」のビットマップ29を生成する。この場合には、抽出部150bは、ひとつ前のビットマップ56を「アメリカ先住民族の」のビットマップとする。
【0079】
抽出部150bは、ステップS20〜ステップS27までの処理を実行することで、文字列データ140aに含まれる分割可能なCJK単語「アメリカ」、「アメリカ先住民」、「アメリカ先住民族」を抽出する。抽出部150bは、抽出した各CJK単語の情報を、抽出結果140eとして記憶部140に格納する。
【0080】
次に、本実施例に係る解析装置100の処理手順の一例について説明する。
図12は、解析装置の設定部の処理手順を示すフローチャートである。
図12に示すように、解析装置100の設定部150aは、文字列データ140aと辞書データ140bのCJK単語とを比較する(ステップS101)。
【0081】
設定部150aは、ヒットした文字列(CJK単語)を配列データ140cに登録する(ステップS102)。設定部150aは、配列データ140cを基にして、各文字(CJK文字)のインデックス140dを生成する(ステップS103)。設定部150aは、インデックス140dをハッシュ化し、インデックスデータ145を生成する(ステップS104)。
【0082】
図13は、解析装置の抽出部の処理手順を示すフローチャートである。
図13に示すように、解析装置100の抽出部150bは、ハッシュ化されたインデックスデータ145からインデックス140dを復元する(ステップS201)。
【0083】
抽出部150bは、文字列データ140aの先頭から1番目の文字のビットマップを第1ビットマップに設定し、先頭から2番目の文字のビットマップを第2ビットマップに設定する(ステップS202)。
【0084】
抽出部150bは、第1ビットマップと先頭ビットマップとを「AND演算」し、演算結果に「1」が存在する場合に、第1ビットマップに対応する文字を先頭文字として特定する(ステップS203)。
【0085】
抽出部150bは、第1ビットマップと末尾ビットマップとを「AND演算」し、演算結果に「1」が存在する場合に、第1ビットマップに対応する文字を、末尾文字として特定し、分割候補を抽出する(ステップS204)。
【0086】
抽出部150bは、文字列データ140aの終端に到達した場合には(ステップS205,Yes)、抽出結果140eを記憶部140に保存する(ステップS206)。一方、抽出部150bは、文字列データ140aの終端に到達していない場合には(ステップS205,No)、ステップS207に移行する。
【0087】
抽出部150bは、第1ビットマップを左に一つシフトする(ステップS207)。抽出部150bは、第1ビットマップと第2ビットマップとを「AND演算」したビットマップを新たな第1ビットマップに設定する(ステップS208)。
【0088】
抽出部150bは、第2ビットマップの文字の次の文字に対応するビットマップを、新たな第2ビットマップに設定し(ステップS209)、ステップS203に移行する。
【0089】
次に、本実施例に係る解析装置100の効果について説明する。解析装置100は、文字列データ140aおよび辞書データ140bを基にして、辞書データ140bの単語(形態素)に関するインデックス140dを生成し、各単語について、先頭と末尾とを判別可能なフラグを設定する。そして、解析装置100は、インデックス140dを利用することで、文字列データ140aから複数の分割可能な単語を抽出する。たとえば、インデックス140dは、辞書データ140bに定義された分割可能な単語のかたまりがそれぞれ、先頭・末尾のフラグにより、識別可能となっており、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、分割可能なCJK単語を抽出している。また、解析装置100は、インデックス140dを用いて、分割可能なCJK単語を認識しており、高速、かつ、ファイルサイズを抑えて解析を行うことができる。
【0090】
解析装置100は、文字列データ140aに含まれる各文字の組み合わせに対応するビットマップと、先頭ビットマップおよび末尾ビットマップとをAND演算を行うことで、分割可能なCJK単語の先頭位置および末尾位置を判定する。これにより、インデックス140dを用いて、分割可能なCJK単語の先頭と末尾をAND演算により特定でき、計算コストを削減できる。また、解析装置100は、インデックス140dをハッシュ化して、インデックスデータ145を生成し、記憶部140に格納するため、記憶部140が記憶するデータの量をより少なくすることができる。
【0091】
次に、上記実施例に示した解析装置100と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。
図14は、解析装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【0092】
図14に示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータの入力を受け付ける入力装置202と、ディスプレイ203とを有する。また、コンピュータ200は、記憶媒体からプログラム等を読み取る読み取り装置204と、有線または無線ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置205とを有する。また、コンピュータ200は、各種情報を一時記憶するRAM206と、ハードディスク装置207とを有する。そして、各装置201〜207は、バス208に接続される。
【0093】
ハードディスク装置207は、設定プログラム207a、抽出プログラム207bを有する。CPU201は、設定プログラム207a、抽出プログラム207bを読み出してRAM206に展開する。
【0094】
設定プログラム207aは、設定プロセス206aとして機能する。抽出プログラム207bは、抽出プロセス206bとして機能する。
【0095】
設定プロセス206aの処理は、設定部150aの処理に対応する。抽出プロセス206bの処理は、抽出部150bの処理に対応する。
【0096】
なお、各プログラム207a、207bについては、必ずしも最初からハードディスク装置207に記憶させておかなくても良い。たとえば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ200が各プログラム206a、206bを読み出して実行するようにしても良い。
【0097】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0098】
(付記1)コンピュータに、
形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する
処理を実行させる解析プログラム。
【0099】
(付記2)前記インデックスを生成する処理は、前記文字データと前記辞書に登録された形態素それぞれとを比較して、前記文字データに含まれる形態素を並べた配列データを生成し、前記配列データの文字のオフセットを示すフラグを設置したビットマップを文字毎に生成することで、前記インデックスを生成することを特徴とする付記1に記載の解析プログラム。
【0100】
(付記3)前記配列データの文字のうち、先頭の文字のオフセットを示すフラグを設置した先頭ビットマップと、末尾の文字のオフセットを示すフラグを設置した末尾ビットマップとを、前記インデックスに設定する処理を更に実行させることを特徴とする付記2に記載の解析プログラム。
【0101】
(付記4)前記抽出する処理は、前記文字データに含まれる各文字の組み合わせに対応するビットマップと、前記先頭ビットマップおよび前記末尾ビットマップとをAND演算を行うことで、分割可能な単語の先頭位置および末尾位置を判定し、判定結果を基にして、複数の分割可能な単語を抽出することを特徴とする付記3に記載の解析プログラム。
【0102】
(付記5)コンピュータが実行する解析方法であって、
形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成し、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する
処理を実行する解析方法。
【0103】
(付記6)前記インデックスを生成する処理は、前記文字データと前記辞書に登録された形態素それぞれとを比較して、前記文字データに含まれる形態素を並べた配列データを生成し、前記配列データの文字のオフセットを示すフラグを設置したビットマップを文字毎に生成することで、前記インデックスを生成することを特徴とする付記5に記載の解析方法。
【0104】
(付記7)前記配列データの文字のうち、先頭の文字のオフセットを示すフラグを設置した先頭ビットマップと、末尾の文字のオフセットを示すフラグを設置した末尾ビットマップとを、前記インデックスに設定する処理を更に実行することを特徴とする付記6に記載の解析方法。
【0105】
(付記8)前記抽出する処理は、前記文字データに含まれる各文字の組み合わせに対応するビットマップと、前記先頭ビットマップおよび前記末尾ビットマップとをAND演算を行うことで、分割可能な単語の先頭位置および末尾位置を判定し、判定結果を基にして、複数の分割可能な単語を抽出することを特徴とする付記7に記載の解析方法。
【0106】
(付記9)形態素解析に用いられる辞書に基づき、前記辞書に登録された形態素それぞれに関するインデックスであって、前記辞書に登録された形態素それぞれに対し先頭と末尾を判別可能なフラグが設定されたインデックスを生成する設定部と、
前記インデックスを用いて、入力された文字データから複数の分割可能な単語を抽出する抽出部と
を有する解析装置。
【0107】
(付記10)前記設定部は、前記文字データと前記辞書に登録された形態素それぞれとを比較して、前記文字データに含まれる形態素を並べた配列データを生成し、前記配列データの文字のオフセットを示すフラグを設置したビットマップを文字毎に生成することで、前記インデックスを生成することを特徴とする付記9に記載の解析装置。
【0108】
(付記11)前記設定部は、前記配列データの文字のうち、先頭の文字のオフセットを示すフラグを設置した先頭ビットマップと、末尾の文字のオフセットを示すフラグを設置した末尾ビットマップとを、前記インデックスに設定することを特徴とする付記10に記載の解析装置。
【0109】
(付記12)前記抽出部は、前記文字データに含まれる各文字の組み合わせに対応するビットマップと、前記先頭ビットマップおよび前記末尾ビットマップとをAND演算を行うことで、分割可能な単語の先頭位置および末尾位置を判定し、判定結果を基にして、複数の分割可能な単語を抽出することを特徴とする付記11に記載の解析装置。