(57)【要約】【課題】検索性能を劣化させることなく入力テキスト内のキーワードを高速に検索する。【解決手段】キーワード処理部１８が、キーワードｋｗ（ｊ）を文字列長ｎで分類したキーワードグループＧＫ（ｎ）ごとに、ＧＫ（ｎ）に属するｋｗ（ｊ）の標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、これら標準化指標値の２次元正規分布Ｗ（ｎ）を、分布中心Ｏに対して点対称な領域Ｒ（ｄ）に分割した後、分布中心Ｏから順に選択してハッシュ値ｅを循環して付与し、ｅと対応するハッシュグループＧＨ（ｅ）に各ｋｗ（ｊ）を順次分類し、検索処理部１９が、入力テキストＴｉｎから抽出した文字列長ｎの部分文字列Ｔの標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）に基づきハッシュ値ｅを計算し、ｅと対応するハッシュグルーブＧＨ（ｅ）に分類されているキーワードｋｗ（ｊ）のそれぞれとＴとを照合することにより、Ｔｉｎ内に含まれるｋｗ（ｊ）を検索する。【選択図】  図１
2017107472.tif 000002
【特許請求の範囲】
【請求項１】
文字列に関するハッシュ値を利用して、入力テキストＴｉｎ中に含まる所定のキーワードｋｗ（ｊ）（ｊ＝１，２，…，Ｊ）を検索する文字列検索装置で用いられる文字列検索方法であって、
前記キーワードｋｗ（ｊ）を文字列長ｎ（ｎ＝１，２，…，Ｎ）に基づき複数のキーワードグループＧＫ（ｎ）に分類し、これらキーワードグループＧＫ（ｎ）ごとに、当該キーワードグループＧＫ（ｎ）に属する各キーワードｋｗ（ｊ）について、当該キーワードｋｗ（ｊ）を構成する文字コードＣ（ｉ）（ｉ＝１，２，…，Ｉ）と２つの異なる係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０（ｊ），Ｆ１（ｊ）を計算し、これら指標値Ｆ０（ｊ），Ｆ１（ｊ）を２次元座標値とした２次元正規分布Ｗ（ｎ）に関する回帰直線Ｌに基づき前記指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化した標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、これら標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を２次元座標値とした標準化２次元正規分布Ｗ’（ｎ）を、分布中心Ｏに対して点対称な形状を有する、予め設定されたＤ個の領域Ｒ（ｄ）（ｄ＝１，２，…，Ｄ）に分割し、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して予め設定されたＥ個のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して順に付与し、当該ハッシュ値ｅと対応する文字列長ｎのハッシュグループＧＨ（ｅ）に前記キーワードｋｗ（ｊ）のそれぞれを分類するキーワード処理ステップと、
前記文字列長ｎ（ｎ＝１，２，…，Ｎ）ごとに、前記入力テキストＴｉｎの先頭から１文字ずつ順に移動させた抽出位置ｘから、前記文字列長ｎを有する部分文字列Ｔをそれぞれ抽出し、これら部分文字列Ｔごとに、当該部分文字列Ｔを構成する文字コードｃ（ｉ）と前記係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０，Ｆ１を計算し、前記２次元正規分布Ｗ（ｎ）に関する回帰直線に基づき前記指標値Ｆ０，Ｆ１を標準化した標準化指標値Ｆ０’，Ｆ１’を計算し、これら標準化指標値Ｆ０’，Ｆ１’に基づいて前記標準化２次元正規分布Ｗ’（ｎ）のうち当該部分文字列Ｔが属する前記領域Ｒ（ｄ）を特定することにより当該部分文字列Ｔのハッシュ値ｅを導出し、当該ハッシュ値ｅと対応する文字列長ｎの前記ハッシュグルーブＧＨ（ｅ）に分類されている前記キーワードｋｗ（ｊ）のそれぞれと当該部分文字列Ｔとを照合することにより、前記入力テキストＴｉｎ内に含まれる前記キーワードｋｗ（ｊ）を検索する検索処理ステップと
を備えることを特徴とする文字列検索方法。
【請求項２】
請求項１に記載の文字列検索方法において、
前記キーワード処理ステップは、前記２次元正規分布Ｗ（ｎ）を生成する際、前記指標値Ｆ０（ｊ）に関する正規分布の平均値および標準偏差をａ０，ｓ０とし、前記指標値Ｆ１（ｊ）に関する正規分布の標準偏差をｓ１とし、前記指標値Ｆ０（ｊ），Ｆ１（ｊ）の２次元分布に関する回帰直線の傾きおよび切片をＰ，Ｑとした場合、前記指標値Ｆ０（ｊ），Ｆ１（ｊ）から標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を次の式
【数１】
2017107472.tif 000013
に基づき計算することを特徴とする文字列検索方法。
【請求項３】
請求項１または請求項２に記載の文字列検索方法において、
前記検索処理ステップは、
前記文字列長ｎの前記部分文字列Ｔについて前記指標値Ｆ０，Ｆ１を計算する際、前記文字コードｃ（ｉ）との線形結合の計算に用いる前記係数列ａ（ｉ），ｂ（ｉ）として、次の式
【数２】
2017107472.tif 000014
からなる係数列ａ（ｉ），ｂ（ｉ）を用いて計算し、
前記抽出位置ｘから抽出した文字列長ｎの前記部分文字列Ｔに関する指標値Ｆ０（ｘ），Ｆ１（ｘ）を計算する際、前記抽出位置ｘの１文字前の抽出位置ｘ−１から抽出した文字列長ｎの部分文字列Ｔ−１に関する指標値をＦ０（ｘ−１），Ｆ１（ｘ−１）とした場合、２つの前記指標値Ｆ０（ｘ），Ｆ１（ｘ）は、次の式
【数３】
2017107472.tif 000015
に基づき計算することを特徴とする文字列検索方法。
【請求項４】
請求項１〜請求項３のいずれかに記載の文字列検索方法において、
前記検索処理ステップは、前記ハッシュグループＧＨ（ｅ）に属する前記キーワードｋｗ（ｊ）のそれぞれと前記部分文字列Ｔとを照合する際、前記キーワードｋｗ（ｊ）に関する前記指標値Ｆ０（ｊ）（またはＦ１（ｊ））からなるキーワード指標値ＦＫ（ｅ，ｊ）と、前記部分文字列Ｔに関する前記指標値Ｆ０（またはＦ１）からなる部分文字列指標値ＦＴとを比較し、前記キーワード指標値ＦＫ（ｅ，ｊ）と前記部分文字列指標値ＦＴとが一致した場合にのみ、前記キーワードｋｗ（ｊ）と前記部分文字列Ｔとを照合することを特徴とする文字列検索方法。
【請求項５】
請求項４に記載の文字列検索方法において、
前記検索処理ステップは、前記ハッシュグループＧＨ（ｅ）に属する前記キーワードｋｗ（ｊ）に関する前記キーワード指標値ＦＫ（ｅ，ｊ）のそれぞれを昇順（または降順）に並び替えた後、前記部分文字列指標値ＦＴと順に比較し、前記部分文字列指標値ＦＴが前記キーワード指標値ＦＫ（ｅ，ｊ）を上回った（または下回った）時点で比較を終了することを特徴とする文字列検索方法。
【請求項６】
文字列に関するハッシュ値を利用して、入力テキストＴｉｎ中に含まる所定のキーワードｋｗ（ｊ）（ｊ＝１，２，…，Ｊ）を検索する文字列検索装置であって、
前記キーワードｋｗ（ｊ）を文字列長ｎ（ｎ＝１，２，…，Ｎ）に基づき複数のキーワードグループＧＫ（ｎ）に分類し、これらキーワードグループＧＫ（ｎ）ごとに、当該キーワードグループＧＫ（ｎ）に属する各キーワードｋｗ（ｊ）について、当該キーワードｋｗ（ｊ）を構成する文字コードＣ（ｉ）（ｉ＝１，２，…，Ｉ）と２つの異なる係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０（ｊ），Ｆ１（ｊ）を計算し、これら指標値Ｆ０（ｊ），Ｆ１（ｊ）を２次元座標値とした２次元正規分布Ｗ（ｎ）に関する回帰直線Ｌに基づき前記指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化した標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、これら標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を２次元座標値とした標準化２次元正規分布Ｗ’（ｎ）を、分布中心Ｏに対して点対称な形状を有する、予め設定されたＤ個の領域Ｒ（ｄ）（ｄ＝１，２，…，Ｄ）に分割し、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して予め設定されたＥ個のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して順に付与し、当該ハッシュ値ｅと対応する文字列長ｎのハッシュグループＧＨ（ｅ）に前記キーワードｋｗ（ｊ）のそれぞれを分類するキーワード処理部と、
前記文字列長ｎ（ｎ＝１，２，…，Ｎ）ごとに、前記入力テキストＴｉｎの先頭から１文字ずつ順に移動させた抽出位置ｘから、前記文字列長ｎを有する部分文字列Ｔをそれぞれ抽出し、これら部分文字列Ｔごとに、当該部分文字列Ｔを構成する文字コードｃ（ｉ）と前記係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０，Ｆ１を計算し、前記２次元正規分布Ｗ（ｎ）に関する回帰直線に基づき前記指標値Ｆ０，Ｆ１を標準化した標準化指標値Ｆ０’，Ｆ１’を計算し、これら標準化指標値Ｆ０’，Ｆ１’に基づいて前記標準化２次元正規分布Ｗ’（ｎ）のうち当該部分文字列Ｔが属する前記領域Ｒ（ｄ）を特定することにより当該部分文字列Ｔのハッシュ値ｅを導出し、当該ハッシュ値ｅと対応する文字列長ｎの前記ハッシュグルーブＧＨ（ｅ）に分類されている前記キーワードｋｗ（ｊ）のそれぞれと当該部分文字列Ｔとを照合することにより、前記入力テキストＴｉｎ内に含まれる前記キーワードｋｗ（ｊ）を検索する検索処理部と
を備えることを特徴とする文字列検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列のハッシュ値を利用して、テキスト中に含まれる所定のキーワードを高速検索するための文字列検索技術に関する。
【背景技術】
【０００２】
近年のビッグデータ活用の潮流の中で、大規模な文字列検索のニーズが高まっている。例えば、大量のテキスト（ツイートデータ等）の中に含まれる複数のキーワードを高速に探したいという要望がある。さまざまな文字列検索アルゴリズムがあるが、複数のキーワードを検索するアルゴリズムとしてラビン―カープ法（非特許文献１参照）等のハッシュ関数を利用した手法がよく使われる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Karp, Richard M.; Rabin, Michael O., "Efficient randomized pattern-matching algorithms", IBM Journal of Research and Development 31 (2), 249-260, 1987年3月
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このようなラビン−カープ法では、入力テキスト中の文字列をスキャンしながらハッシュ値を計算して高速な文字列検索処理を実現している。通常、ハッシュ値を計算する関数は簡単な形（一次関数等）なので、テキストやキーワードが大量になるとハッシュ値の衝突が頻発する。衝突ごとに文字列の照合処理が必要となるため、その回数の増加は処理性能の急激な劣化を引き起こす。性能劣化を避けるためには、衝突を起こし得るキーワードの数を少なくし、衝突回数の最悪値を低く抑える等の対策が必要であった。
しかしながら、簡単なハッシュ関数では値の衝突が生じやすく衝突回数の制御もできない。そのため、衝突回数が著しく増えることで検索性能が大きく劣化するのを避けるよう設計するのが難しいという問題点があった。
【０００５】
本発明はこのような課題を解決するためのものであり、検索性能を劣化させることなく、入力テキストに含まれるキーワードを高速に検索できる文字列検索技術を提供することを目的としている。
【課題を解決するための手段】
【０００６】
このような目的を達成するために、本発明にかかる文字列検索方法は、文字列に関するハッシュ値を利用して、入力テキストＴｉｎ中に含まる所定のキーワードｋｗ（ｊ）（ｊ＝１，２，…，Ｊ）を検索する文字列検索装置で用いられる文字列検索方法であって、前記キーワードｋｗ（ｊ）を文字列長ｎ（ｎ＝１，２，…，Ｎ）に基づき複数のキーワードグループＧＫ（ｎ）に分類し、これらキーワードグループＧＫ（ｎ）ごとに、当該キーワードグループＧＫ（ｎ）に属する各キーワードｋｗ（ｊ）について、当該キーワードｋｗ（ｊ）を構成する文字コードＣ（ｉ）（ｉ＝１，２，…，Ｉ）と２つの異なる係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０（ｊ），Ｆ１（ｊ）を計算し、これら指標値Ｆ０（ｊ），Ｆ１（ｊ）を２次元座標値とした２次元正規分布Ｗ（ｎ）に関する回帰直線Ｌに基づき前記指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化した標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、これら標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を２次元座標値とした標準化２次元正規分布Ｗ’（ｎ）を、分布中心Ｏに対して点対称な形状を有する、予め設定されたＤ個の領域Ｒ（ｄ）（ｄ＝１，２，…，Ｄ）に分割し、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して予め設定されたＥ個のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して順に付与し、当該ハッシュ値ｅと対応する文字列長ｎのハッシュグループＧＨ（ｅ）に前記キーワードｋｗ（ｊ）のそれぞれを分類するキーワード処理ステップと、前記文字列長ｎ（ｎ＝１，２，…，Ｎ）ごとに、前記入力テキストＴｉｎの先頭から１文字ずつ順に移動させた抽出位置ｘから、前記文字列長ｎを有する部分文字列Ｔをそれぞれ抽出し、これら部分文字列Ｔごとに、当該部分文字列Ｔを構成する文字コードｃ（ｉ）と前記係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０，Ｆ１を計算し、前記２次元正規分布Ｗ（ｎ）に関する回帰直線に基づき前記指標値Ｆ０，Ｆ１を標準化した標準化指標値Ｆ０’，Ｆ１’を計算し、これら標準化指標値Ｆ０’，Ｆ１’に基づいて前記標準化２次元正規分布Ｗ’（ｎ）のうち当該部分文字列Ｔが属する前記領域Ｒ（ｄ）を特定することにより当該部分文字列Ｔのハッシュ値ｅを導出し、当該ハッシュ値ｅと対応する文字列長ｎの前記ハッシュグルーブＧＨ（ｅ）に分類されている前記キーワードｋｗ（ｊ）のそれぞれと当該部分文字列Ｔとを照合することにより、前記入力テキストＴｉｎ内に含まれる前記キーワードｋｗ（ｊ）を検索する検索処理ステップとを備えている。
【０００７】
また、本発明にかかる上記文字列検索方法の一構成例は、前記キーワード処理ステップが、前記２次元正規分布Ｗ（ｎ）を生成する際、前記指標値Ｆ０（ｊ）に関する正規分布の平均値および標準偏差をａ０，ｓ０とし、前記指標値Ｆ１（ｊ）に関する正規分布の標準偏差をｓ１とし、前記指標値Ｆ０（ｊ），Ｆ１（ｊ）の２次元分布に関する回帰直線の傾きおよび切片をＰ，Ｑとした場合、前記指標値Ｆ０（ｊ），Ｆ１（ｊ）から標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を、後述する式（２）に基づき計算するようにしたものである。
【０００８】
また、本発明にかかる上記文字列検索方法の一構成例は、前記検索処理ステップが、前記文字列長ｎの前記部分文字列Ｔについて前記指標値Ｆ０，Ｆ１を計算する際、前記文字コードｃ（ｉ）との線形結合の計算に用いる前記係数列ａ（ｉ），ｂ（ｉ）として、後述する式（９）からなる係数列ａ（ｉ），ｂ（ｉ）を用いて計算し、前記抽出位置ｘから抽出した文字列長ｎの前記部分文字列Ｔに関する指標値Ｆ０（ｘ），Ｆ１（ｘ）を計算する際、前記抽出位置ｘの１文字前の抽出位置ｘ−１から抽出した文字列長ｎの部分文字列Ｔ−１に関する指標値をＦ０（ｘ−１），Ｆ１（ｘ−１）とした場合、２つの前記指標値Ｆ０（ｘ），Ｆ１（ｘ）は、後述する式（１０）に基づき計算するようにしたものである。
【０００９】
また、本発明にかかる上記文字列検索方法の一構成例は、前記検索処理ステップが、前記ハッシュグループＧＨ（ｅ）に属する前記キーワードｋｗ（ｊ）のそれぞれと前記部分文字列Ｔとを照合する際、前記キーワードｋｗ（ｊ）に関する前記指標値Ｆ０（ｊ）（またはＦ１（ｊ））からなるキーワード指標値ＦＫ（ｅ，ｊ）と、前記部分文字列Ｔに関する前記指標値Ｆ０（またはＦ１）からなる部分文字列指標値ＦＴとを比較し、前記キーワード指標値ＦＫ（ｅ，ｊ）と前記部分文字列指標値ＦＴとが一致した場合にのみ、前記キーワードｋｗ（ｊ）と前記部分文字列Ｔとを照合するようにしたものである。
【００１０】
また、本発明にかかる上記文字列検索方法の一構成例は、前記検索処理ステップが、前記ハッシュグループＧＨ（ｅ）に属する前記キーワードｋｗ（ｊ）に関する前記キーワード指標値ＦＫ（ｅ，ｊ）のそれぞれを昇順（または降順）に並び替えた後、前記部分文字列指標値ＦＴと順に比較し、前記部分文字列指標値ＦＴが前記キーワード指標値ＦＫ（ｅ，ｊ）を上回った（または下回った）時点で比較を終了するようにしたものである。
【００１１】
また、本発明にかかる文字列検索装置は、文字列に関するハッシュ値を利用して、入力テキストＴｉｎ中に含まる所定のキーワードｋｗ（ｊ）（ｊ＝１，２，…，Ｊ）を検索する文字列検索装置であって、
前記キーワードｋｗ（ｊ）を文字列長ｎ（ｎ＝１，２，…，Ｎ）に基づき複数のキーワードグループＧＫ（ｎ）に分類し、これらキーワードグループＧＫ（ｎ）ごとに、当該キーワードグループＧＫ（ｎ）に属する各キーワードｋｗ（ｊ）について、当該キーワードｋｗ（ｊ）を構成する文字コードＣ（ｉ）（ｉ＝１，２，…，Ｉ）と２つの異なる係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０（ｊ），Ｆ１（ｊ）を計算し、これら指標値Ｆ０（ｊ），Ｆ１（ｊ）を２次元座標値とした２次元正規分布Ｗ（ｎ）に関する回帰直線Ｌに基づき前記指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化した標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、これら標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を２次元座標値とした標準化２次元正規分布Ｗ’（ｎ）を、分布中心Ｏに対して点対称な形状を有する、予め設定されたＤ個の領域Ｒ（ｄ）（ｄ＝１，２，…，Ｄ）に分割し、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して予め設定されたＥ個のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して順に付与し、当該ハッシュ値ｅと対応する文字列長ｎのハッシュグループＧＨ（ｅ）に前記キーワードｋｗ（ｊ）のそれぞれを分類するキーワード処理部と、前記文字列長ｎ（ｎ＝１，２，…，Ｎ）ごとに、前記入力テキストＴｉｎの先頭から１文字ずつ順に移動させた抽出位置ｘから、前記文字列長ｎを有する部分文字列Ｔをそれぞれ抽出し、これら部分文字列Ｔごとに、当該部分文字列Ｔを構成する文字コードｃ（ｉ）と前記係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０，Ｆ１を計算し、前記２次元正規分布Ｗ（ｎ）に関する回帰直線に基づき前記指標値Ｆ０，Ｆ１を標準化した標準化指標値Ｆ０’，Ｆ１’を計算し、これら標準化指標値Ｆ０’，Ｆ１’に基づいて前記標準化２次元正規分布Ｗ’（ｎ）のうち当該部分文字列Ｔが属する前記領域Ｒ（ｄ）を特定することにより当該部分文字列Ｔのハッシュ値ｅを導出し、当該ハッシュ値ｅと対応する文字列長ｎの前記ハッシュグルーブＧＨ（ｅ）に分類されている前記キーワードｋｗ（ｊ）のそれぞれと当該部分文字列Ｔとを照合することにより、前記入力テキストＴｉｎ内に含まれる前記キーワードｋｗ（ｊ）を検索する検索処理部とを備えている。
【発明の効果】
【００１２】
本発明によれば、各ハッシュグループに分類されるキーワードの数、すなわち、ハッシュ値が同じで衝突が起こしうるキーワード数を、領域数とハッシュグループ数に基づき制御することができ、各ハッシュグループ間でキーワード数を均等化することができる。これにより、キーワード数が大きく異なる場合と比較して、衝突回数の最悪値を抑えることができる。したがって、検索性能を劣化させることなく、入力テキストに含まれるキーワードを高速に検索できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態にかかる文字列検索装置の構成を示すブロック図である。
【図２】線形結合の計算例である。
【図３】指標値の２次元正規分布を示す説明図である。
【図４】２次元正規分布の標準化を示す説明図である。
【図５】領域分割例を示す説明図である。
【図６】領域とキーワード数との関係を示す説明図である。
【図７】領域とハッシュ値との関係を示す説明図である。
【図８】領域とキーワード数との他の関係を示す説明図である。
【図９】部分文字列の抽出例を示す説明図である。
【図１０】キーワード登録処理を示すチャートである。
【図１１】キーワード登録動作を示す説明図である。
【図１２】第１の実施の形態にかかる文字列検索処理を示すチャートである。
【図１３】第１の実施の形態にかかる文字列検索動作を示す説明図である。
【図１４】第１の実施の形態にかかる照合処理を示す説明図である。
【図１５】第２の実施の形態にかかる指標値の計算方法を示す説明図である。
【図１６】第２の実施の形態にかかる文字列検索動作を示す説明図である。
【図１７】第３の実施の形態にかかる文字列検索動作を示す説明図である。
【図１８】第３の実施の形態にかかる照合処理を示す説明図である。
【図１９】第４の実施の形態にかかる文字列検索動作を示す説明図である。
【図２０】第４の実施の形態にかかる照合処理を示す説明図である。
【発明を実施するための形態】
【００１４】
次に、本発明の実施の形態について図面を参照して説明する。
［第１の実施の形態］
まず、図１を参照して、本発明の第１の実施の形態にかかる文字列検索装置１０について説明する。図１は、第１の実施の形態にかかる文字列検索装置の構成を示すブロック図である。
この文字列検索装置１０は、全体としてサーバ装置などの情報処理装置からなり、文字列のハッシュ値を利用して、外部装置２０から入力された入力テキストＴｉｎ中に含まれる所定のキーワードを高速検索する機能を有している。
【００１５】
文字列検索装置１０には、主な機能部として、通信Ｉ／Ｆ部１１、操作入力部１２、画面表示部１３、キーワード群記憶部１４、ハッシュ関数データ記憶部１５、検索結果記憶部１６、および演算処理部１７が設けられている。
【００１６】
通信Ｉ／Ｆ部１１は、通信回線を介して外部装置２０とデータ通信を行うことにより、キーワード群ＫＷや入力テキストＴｉｎなどの各種データを入力する機能と、検索処理により得られた、入力テキストＴｉｎに含まれるキーワードｋｗ（ｊ）（ｊ＝１，２，，Ｊ）を示す検索結果ＲＥＳを出力する機能とを有している。
【００１７】
操作入力部１２は、キーボード、マウス、タッチパネルなどの操作入力装置からなり、オペレータの操作を検出して演算処理部１７へ出力する機能を有している。
【００１８】
画面表示部１３は、ＬＣＤなどの画面表示装置からなり、操作メニューや検索結果などの各種情報を画面表示する機能を有している。
【００１９】
キーワード群記憶部１４は、ハードディスクや半導体メモリなどの記憶装置からなり、入力テキストＴｉｎから検索する多数のキーワードｋｗ（ｊ）を含むキーワード群ＫＷを記憶する機能を有している。
【００２０】
ハッシュ関数データ記憶部１５は、ハードディスクや半導体メモリなどの記憶装置からなり、キーワード群ＫＷに含まれる各キーワードｋｗ（ｊ）を予め演算処理部１７で分析して得られた、文字列長ｎごとのハッシュ関数データＤＨ（ｎ）を記憶する機能を有している。
【００２１】
検索結果記憶部１６は、ハードディスクや半導体メモリなどの記憶装置からなり、演算処理部１７で得られた、入力テキストＴｉｎに含まれるキーワードｋｗ（ｊ）を示す検索結果ＲＥＳを記憶する機能を有している。
【００２２】
演算処理部１７は、ＣＰＵおよびその周辺回路を有し、プログラムを読み込んで実行することにより、文字列検索処理のための処理部を実現する機能を有している。主な処理部としては、キーワード処理部１８と検索処理部１９とがある。
【００２３】
キーワード処理部１８は、キーワード群記憶部１４から読み出したキーワード群ＫＷに含まれる各キーワードｋｗ（ｊ）（ｊ＝１，２，…，Ｊ）に関するハッシュ値ｅを計算し、このハッシュ値ｅと対応するハッシュグループＧＨ（ｅ）にそれぞれのキーワードｋｗ（ｊ）を分類する機能と、これらハッシュ値ｅの計算処理内容や分類結果を示すハッシュ関数データＤＨ（ｎ）をハッシュ関数データ記憶部１５に保存する機能とを有している。
【００２４】
検索処理部１９は、外部装置２０から入力された入力テキストＴｉｎから抽出した部分文字列Ｔごとに、ハッシュ関数データ記憶部１５から読み出した、当該部分文字列Ｔの文字列長ｎに関するハッシュ関数データＤＨ（ｎ）に基づいて、当該部分文字列Ｔに関するハッシュ値ｅを計算し、このハッシュ値ｅと対応するハッシュグループＧＨ（ｅ）に属するキーワードｋｗ（ｊ）と部分文字列Ｔとを照合することにより文字列検索を行う機能を有している。
【００２５】
［キーワード処理部］
次に、図１を参照して、演算処理部１７のキーワード処理部１８について詳細に説明する。キーワード処理部１８には、主な処理部として、キーワード分類部１８Ａ、指標値計算部１８Ｂ、分布領域特定部１８Ｃ、ハッシュ値計算部１８Ｄ、ハッシュグループ分類部１８Ｅ、およびハッシュ関数データ保存部１８Ｆが設けられている。
【００２６】
キーワード分類部１８Ａは、キーワードｋｗ（ｊ）を文字列長ｎ（ｎ＝１，２，…，Ｎ）に基づき複数のキーワードグループＧＫ（ｎ）に分類する機能を有している。
【００２７】
指標値計算部１８Ｂは、これらキーワードグループＧＫ（ｎ）ごとに、当該キーワードグループＧＫ（ｎ）に属する各キーワードｋｗ（ｊ）について、当該キーワードｋｗ（ｊ）を構成する文字コードＣ（ｉ）（ｉ＝１，２，…，Ｉ）と２つの異なる係数列ａ（ｉ），ｂ（ｉ）のそれぞれとの線形結合からなる２つの指標値Ｆ０（ｊ），Ｆ１（ｊ）を計算する機能と、これら指標値Ｆ０（ｊ），Ｆ１（ｊ）を２次元座標値とした２次元正規分布Ｗ（ｎ）に関する回帰直線Ｌに基づき前記指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化した標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算する機能とを有している。
【００２８】
図２は、線形結合の計算例である。キーワードｋｗ（ｊ）に関する指標値Ｆ０（ｊ），Ｆ１（ｊ）は、文字コードＣ（ｉ）と係数列ａ（ｉ），ｂ（ｉ）との線形結合からなり、次の式（１）により求められる。
【数１】
2017107472.tif 000003
【００２９】
図３は、指標値の２次元正規分布を示す説明図である。中心極限定理によれば、文字列を構成する個々の文字を確率変数と考えると、文字列長ｎが長くなるにつれて、指標値Ｆ０（ｊ），Ｆ１（ｊ）はそれぞれ正規分布に近づく。これら指標値Ｆ０（ｊ），Ｆ１（ｊ）を２次元座標値として２次元座標にプロットすれば、図３に示すような２次元正規分布となる。
【００３０】
図４は、２次元正規分布の標準化を示す説明図である。これら指標値Ｆ０（ｊ），Ｆ１（ｊ）の正規分布Ｗ０，Ｗ１は、それぞれの平均値ａ０，ａ１と標準偏差ｓ０，ｓ１が異なるため、２次元座標上で分布の偏りが発生する。このため、本実施の形態では、指標値計算部１８Ｂにおいて、２次元正規分布Ｗ（ｎ）の回帰直線Ｌを求め、その傾きＰと切片Ｑに基づいて、次の式（２）により、指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化して標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、偏りのない標準化２次元正規分布Ｗ’（ｎ）を生成している。
【数２】
2017107472.tif 000004
【００３１】
分布領域特定部１８Ｃは、標準化２次元正規分布Ｗ’（ｎ）を、分布中心Ｏに対して点対称な複数の領域Ｒ（ｄ）（ｄ＝１，２，…，Ｄ）に分割する機能を有している。
図５は、領域分割例を示す説明図である。ここでは、標準化２次元正規分布Ｗ’（ｎ）を、その分布中心Ｏに対して点対称な形状を有する、予め設定されたＤ個の領域Ｒ（ｄ）（ｄ＝１，２，…，Ｄ）に分割されている。図５には、領域Ｒ（ｄ）の形状として、分布中心Ｏを中心とし、頂点が軸上に位置するよう、大きさが異なる正方形を重ねて配置し、これら正方形で区切られる帯状の領域とした場合が、例として示されているが、これに限定されるものではなく、正方形に代えて円などの点対称な他の形状を用いてもよい。
【００３２】
この際、２次元正規分布Ｗ（ｎ）を標準化２次元正規分布Ｗ’（ｎ）に標準化し、かつ、領域Ｒ（ｄ）の形状を正方形としたので、元の正規分布Ｗ０，Ｗ１の中心（平均値ａ０，ａ１）からほぼ等しい距離にあるキーワードｋｗ（ｊ）が同一領域Ｒ（ｄ）に含まれるよう分割することができる。この際、標準化指標値Ｆ０’，Ｆ１’の絶対値の和を、領域数Ｄにおける領域番号ｄの比率と比較する、次の式（３）に示すような、簡素な演算処理で分割できる。
【数３】
2017107472.tif 000005
【００３３】
図６は、領域とキーワード数との関係を示す説明図である。標準化２次元正規分布Ｗ’（ｎ）の分布中心Ｏに近い領域Ｒ（ｄ）から順に領域番号ｄを付与した場合、各領域Ｒ（ｄ）に含まれるキーワード数は、図６に示すように大きく変化する。これは、元の正規分布Ｗ０，Ｗ１におけるキーワード数の分布に依存しており、この関係は、文字数が異なる場合でも同様である。
【００３４】
ハッシュ値計算部１８Ｄは、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して予め設定されている複数のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して付与する機能を有している。
図７は、領域とハッシュ値との関係を示す説明図である。本実施の形態では、分布領域特定部１８Ｃにおいて、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して予め設定されている複数のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して付与している。これにより、分布中心Ｏから順にＥ個飛びで、各領域Ｒ（ｄ）に同じハッシュ値ｅが付与されることになる。
【００３５】
例えば、図７に示したように、ハッシュ値ｅを１，２，３の３つの値とした場合、分布中心Ｏに最も近い領域Ｒ（１）に対してハッシュ値ｅ＝１が付与され、その外側の領域Ｒ（２）に対してハッシュ値ｅ＝２が付与され、さらにその外側の領域Ｒ（３）にハッシュ値ｅ＝３が付与され、さらにその領域Ｒ（４）にハッシュ値ｅ＝１が付与され、以下に続く領域Ｒ（５），Ｒ（６），Ｒ（７），Ｒ（８），…に対して循環してハッシュ値ｅ＝２，３，１，２，…が付与されることになる。
【００３６】
図８は、領域とキーワード数との他の関係を示す説明図である。このようにして、各領域Ｒ（ｄ）に対して複数のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して付与すれば、各領域Ｒ（ｄ）に含まれるキーワード数は、図８に示すようにほぼ等しい数となる。
このようなハッシュ値ｅの付与方式は、領域番号ｄの剰余（除算した余り）に基づく値を付与することになり、次の式（４）で求められる。
【数４】
2017107472.tif 000006
【００３７】
式（４）において、％記号は、剰余計算を示す演算子である。なお、Ｄ／Ｅは整数であることが望ましく、同一ハッシュ値ｅが付与される領域Ｒ（ｄ）の数が等しくなる。領域数Ｄおよびハッシュグループ数Ｅについては、文字列数ｎごとに予め設定される。
【００３８】
ハッシュグループ分類部１８Ｅは、キーワードｋｗ（ｊ）のハッシュ値ｅに基づいて、ハッシュ値ｅごとに設けられているハッシュグループＧＨ（ｅ）へ、キーワードｋｗ（ｊ）を分類する機能を有している。この際、キーワードｋｗ（ｊ）は、キーワードｋｗ（ｊ）を構成する文字列データを、ハッシュグループＧＨ（ｅ）へ登録するのではなく、キーワード群ＫＷ内において付与されているキーワード番号ｊを用いて登録する。
【００３９】
したがって、文字列長ごとに、ハッシュ値ｅ（ｅ＝１，２，…，Ｅ）に対応するハッシュグループＧＨ（ｅ）が設けられ、ハッシュグループＧＨ（ｅ）ごとに、当該ハッシュグループＧＨ（ｅ）に属するキーワードｋｗ（ｊ）がキーワード番号Ｕ（ｅ，ｊ）により登録される。また、当該ハッシュグループＧＨ（ｅ）に属するキーワードｋｗ（ｊ）の数を示すキーワード数Ｖ（ｅ）も登録される。
【００４０】
ハッシュ関数データ保存部１８Ｆは、ハッシュ値ｅの計算処理内容や分類結果を示すハッシュ関数データＤＨ（ｎ）をハッシュ関数データ記憶部１５に保存する機能を有している。このハッシュ関数データＤＨ（ｎ）は、係数列ａ（ｉ），ｂ（ｉ）、指標値Ｆ０（ｊ）の正規分布Ｗ０に関する平均値ａ０および標準偏差ｓ０、指標値Ｆ１（ｊ）の正規分布Ｗ１に関する標準偏差ｓ０、２次元正規分布Ｗ（ｎ）の回帰直線Ｌに関する傾きＰおよび切片Ｑ、領域数Ｄ、ハッシュグループ数Ｅ、ハッシュグループＧＨ（ｅ）ごとのキーワード番号Ｕ（ｅ，ｊ）およびキーワード数Ｖ（ｅ）が含まれる。
【００４１】
［検索処理部］
次に、図１を参照して、演算処理部１７の検索処理部１９について詳細に説明する。検索処理部１９には、主な処理部として、部分文字列抽出部１９Ａ、指標値計算部１９Ｂ、分布領域特定部１９Ｃ、ハッシュ値計算部１９Ｄ、およびキーワード照合部１９Ｅが設けられている。
【００４２】
部分文字列抽出部１９Ａは、文字列長ｎ（ｎ＝１，２，…，Ｎ）ごとに、入力テキストＴｉｎの先頭から１文字ずつ順に移動させた抽出位置ｘから、文字列長ｎを有する部分文字列Ｔをそれぞれ抽出する機能を有している。
【００４３】
図９は、部分文字列の抽出例を示す説明図である。ここでは、入力テキストＴｉｎが「ネットがあるからいじめが増えたっていうなら…」からなる例が示されており、入力テキストＴｉｎの先頭から順に１文字ずつ抽出位置ｘを移動させて、文字ｎ個分が部分文字列Ｔとして抽出される。
【００４４】
したがって、文字列ｎ＝１の場合、「ネ」，「ッ」，「ト」，「が」，…の順に１文字ずつ抽出され、文字列ｎ＝２の場合、「ネッ」，「ット」，「トが」，…の順に２文字ずつ抽出されることになる。また、文字列ｎ＝３の場合、「ネット」，「ットが」，「トがあ」，…の順に３文字ずつ抽出されることになる。
【００４５】
指標値計算部１９Ｂは、部分文字列Ｔの文字列長ｎに対応するハッシュ関数データＤＨ（ｎ）をハッシュ関数データ記憶部１５から取得する機能と、ハッシュ関数データＤＨ（ｎ）に含まれる２つの異なる係数列ａ（ｉ），ｂ（ｉ）を用いて、当該部分文字列Ｔを構成する文字コードｃ（ｉ）（ｉ＝１，２，…，Ｉ）から、次の式（５）に基づき、２つの指標値Ｆ０，Ｆ１を計算する機能とを有している。
【数５】
2017107472.tif 000007
【００４６】
また、指標値計算部１９Ｂは、ハッシュ関数データＤＨ（ｎ）に含まれる指標値Ｆ０（ｊ）の正規分布Ｗ０に関する平均値ａ０および標準偏差ｓ０、指標値Ｆ１（ｊ）の正規分布Ｗ１に関する標準偏差ｓ０、２次元正規分布Ｗ（ｎ）の回帰直線Ｌに関する傾きＰおよび切片Ｑを用いて、次の式（６）に基づき、指標値Ｆ０，Ｆ１を標準化した標準化指標値Ｆ０’，Ｆ１’を計算する機能とを有している。
【数６】
2017107472.tif 000008
【００４７】
分布領域特定部１９Ｃは、ハッシュ関数データＤＨ（ｎ）に含まれる領域数Ｄに基づいて、２つの標準化指標値Ｆ０’，Ｆ１’を２次元座標値として、当該文字列長ｎに関する標準化２次元正規分布Ｗ’（ｎ）のうち当該部分文字列Ｔが属する領域Ｒ（ｄ）を特定する機能を有している。この際、領域Ｒ（ｄ）の特定方法については、分布領域特定部１８Ｃにおける領域Ｒ（ｄ）の分割方法と同様であり、標準化指標値Ｆ０’，Ｆ１’の絶対値の和に領域数Ｄを乗算して整数化（ｉｎｔ関数）する、次の式（７）に基づき領域番号ｄが求められる。
【数７】
2017107472.tif 000009
【００４８】
ハッシュ値計算部１９Ｄは、ハッシュ関数データＤＨ（ｎ）に含まれる領域数Ｄおよびハッシュグループ数Ｅに基づいて、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して予め設定されている複数のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して付与する機能を有している。この際、ハッシュ値ｅの計算方法については、ハッシュ値計算部１８Ｄと同様であり、領域番号ｄの剰余を用いた、次の式（８）に基づきハッシュ値ｅが求められる。
【数８】
2017107472.tif 000010
【００４９】
キーワード照合部１９Ｅは、ハッシュ関数データＤＨ（ｎ）に含まれる、部分文字列Ｔのハッシュ値ｅと対応する文字列長ｎのハッシュグルーブＧＨ（ｅ）に分類されているキーワード番号Ｕ（ｅ，ｊ）に基づいて、対応するキーワードｋｗ（ｊ）のそれぞれと当該部分文字列Ｔとを照合することにより、入力テキストＴｉｎ内に含まれるキーワードｋｗ（ｊ）を検索する機能と、一致不一致を示す照合結果に基づいて、入力テキストＴｉｎ内に含まれるキーワードｋｗ（ｊ）を示す検索結果ＲＥＳを生成して、検索結果記憶部１６に保存する機能とを有している。
【００５０】
［第１の実施の形態の動作］
次に、本実施の形態にかかる文字列検索装置１０の動作について、キーワード処理部１８におけるキーワード登録動作と、検索処理部１９における文字列検索動作について説明する。
【００５１】
［キーワード登録動作］
まず、図１０および図１１を参照して、キーワード登録動作について説明する。図１０は、キーワード登録処理を示すチャートである。図１１は、キーワード登録動作を示す説明図である。
キーワード処理部１８は、検索処理部１９での文字列検索動作に先立って、キーワード群記憶部１４に登録されているキーワード群ＫＷに含まれている各ｋｗ（ｊ）の登録処理を、文字列長ｎ（ｎ＝１，２，…，Ｎ）ごとに実行する。
【００５２】
まず、キーワード分類部１８Ａは、キーワード群記憶部１４から読み出したキーワード群ＫＷに含まれる各キーワードｋｗ（ｊ）（ｊ＝１，２，…，Ｊ）を文字列長ｎに基づき複数のキーワードグループＧＫ（ｎ）に分類する（ステップ１００）。
【００５３】
次に、指標値計算部１８Ｂは、キーワード登録処理が未処理である文字列長ｎに関するキーワードグループＧＫ（ｎ）を選択して（ステップ１０１）、ＧＫ（ｎ）に含まれる各キーワードｋｗ（ｊ）に関する指標値Ｆ０（ｊ），Ｆ１（ｊ）を計算して２次元正規分布Ｗ（ｎ）を生成した後（ステップ１０２）、これら指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化した標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算することにより、標準化２次元正規分布Ｗ’（ｎ）を生成する（ステップ１０３）。
【００５４】
続いて、分布領域特定部１８Ｃは、標準化２次元正規分布Ｗ’（ｎ）を、分布中心Ｏに対して点対称な複数の領域Ｒ（ｄ）（ｄ＝１，２，…，Ｄ）に分割し（ステップ１０４）、ハッシュ値計算部１８Ｄは、これら領域Ｒ（ｄ）を分布中心Ｏから順に選択して、予め設定されている複数のハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を循環して付与する（ステップ１０５）。
【００５５】
次に、ハッシュグループ分類部１８Ｅは、各キーワードｋｗ（ｊ）のハッシュ値ｅに基づいて、ハッシュ値ｅごとに設けられているハッシュグループＧＨ（ｅ）へ、キーワードｋｗ（ｊ）をそれぞれ分類し（ステップ１０６）、ハッシュ関数データ保存部１８Ｆは、ハッシュ値ｅの計算処理内容や分類結果を示すハッシュ関数データＤＨ（ｎ）をハッシュ関数データ記憶部１５に保存する（ステップ１０７）。
【００５６】
この後、全キーワードグループＧＫ（ｎ）の選択が終了したか確認し（ステップ１０８）、未選択のキーワードグループＧＫ（ｎ）が存在する場合（ステップ１０８：ＮＯ）、ステップ１０１へ戻る。一方、全キーワードグループＧＫ（ｎ）の選択が終了した場合（ステップ１０８：ＹＥＳ）、文字列長ｎに関する一連のキーワード登録処理を終了する。
【００５７】
［文字列検索動作］
次に、図１２および図１３を参照して、キーワード登録動作について説明する。図１２は、第１の実施の形態にかかる文字列検索処理を示すチャートである。図１３は、第１の実施の形態にかかる文字列検索動作を示す説明図である。
検索処理部１９は、キーワード処理部１８でのキーワード登録動作が実行された後、外部装置２０から入力された入力テキストＴｉｎに含まれるキーワードｋｗ（ｊ）の検索処理を、文字列長ｎ（ｎ＝１，２，…，Ｎ）ごとに実行する。
【００５８】
まず、部分文字列抽出部１９Ａは、入力テキストＴｉｎの先頭を抽出位置ｘとして設定し（ステップ１１０）、抽出位置ｘから文字列長ｎの部分文字列Ｔを抽出する（ステップ１１１）。
次に、指標値計算部１９Ｂは、部分文字列Ｔの文字列長ｎに対応するハッシュ関数データＤＨ（ｎ）をハッシュ関数データ記憶部１５から取得し、ハッシュ関数データＤＨ（ｎ）に含まれる２つの異なる係数列ａ（ｉ），ｂ（ｉ）（ｉ＝１，２，…，Ｉ）を用いて、当該部分文字列Ｔを構成する文字コードｃ（ｉ）から、２つの指標値Ｆ０，Ｆ１を計算する（ステップ１１２）。
【００５９】
続いて、指標値計算部１９Ｂは、ハッシュ関数データＤＨ（ｎ）に含まれる指標値Ｆ０（ｊ）の正規分布Ｗ０に関する平均値ａ０および標準偏差ｓ０、指標値Ｆ１（ｊ）の正規分布Ｗ１に関する標準偏差ｓ０、２次元正規分布Ｗ（ｎ）の回帰直線Ｌに関する傾きＰおよび切片Ｑを用いて、標準化指標値Ｆ０’，Ｆ１’を計算する（ステップ１１３）。
【００６０】
この後、分布領域特定部１９Ｃは、ハッシュ関数データＤＨ（ｎ）に含まれる領域数Ｄに基づいて、文字列長ｎに関する標準化２次元正規分布Ｗ’（ｎ）のうち、部分文字列Ｔが属する領域Ｒ（ｄ）を特定する（ステップ１１４）。
次に、ハッシュ値計算部１９Ｄは、ハッシュ関数データＤＨ（ｎ）に含まれる領域数Ｄおよびハッシュグループ数Ｅに基づいて、これら領域Ｒ（ｄ）に付与されているハッシュ値ｅ（ｅ＝１，２，…，Ｅ）を計算する（ステップ１１５）。
【００６１】
続いて、キーワード照合部１９Ｅは、ハッシュ関数データＤＨ（ｎ）に含まれる、部分文字列Ｔのハッシュ値ｅと対応する文字列長ｎのハッシュグルーブＧＨ（ｅ）に分類されているキーワード番号Ｕ（ｅ，ｊ）およびキーワード数Ｖ（ｅ）に基づいて、キーワード群ＫＷから取得したキーワードｋｗ（ｊ）のそれぞれと当該部分文字列Ｔとを文字列照合し、得られた検索結果ＲＥＳを検索結果記憶部１６に保存する（ステップ１１６）。
【００６２】
この後、部分文字列抽出部１９Ａは、抽出位置ｘが入力テキストＴｉｎの最終位置か確認し（ステップ１１７）、抽出位置ｘが最終位置の手前であれば（ステップ１１７：ＮＯ）、１文字ずらした位置を新たな抽出位置ｘとした後（ステップ１０８）、ステップ１１１へ戻る。
一方、抽出位置ｘが最終位置であれば（ステップ１１７：ＹＥＳ）、文字列長ｎに関する一連の文字列検索処理を終了する。
【００６３】
図１４は、第１の実施の形態にかかる照合処理を示す説明図である。本実施の形態において、キーワード照合部１９Ｅは、部分文字列Ｔのハッシュ値ｅと対応する文字列長ｎのハッシュグルーブＧＨ（ｅ）に分類されているキーワード番号Ｕ（ｅ，ｊ）に基づいて、キーワード群ＫＷからキーワードｋｗ（ｊ）を取得する。
図１４の例では、入力テキストＴｉｎが「ネットがあるからいじめが増えたっていうなら…」からなる例が示されており、文字列長ｎ＝３の場合、文字列長ｎ＝３のハッシュグルーブＧＨ（ｅ）に分類されているキーワードｋｗ＃１，ｋｗ＃２，…，ｋｗ＃Ｋ（Ｋ＝Ｖ（ｅ））と部分文字列Ｔとが照合される。
【００６４】
この際、これら全てのキーワードｋｗ＃１，ｋｗ＃２，…，ｋｗ＃Ｋと部分文字列Ｔとは、個々の文字コードに基づき照合される。照合により、部分文字列Ｔの各文字コードと一致するキーワードｋｗ（ｊ）が見つかった場合、入力テキストＴｉｎにキーワードｋｗ（ｊ）が含まれているという検索結果ＲＥＳが保存される。
【００６５】
［第１の実施の形態の効果］
このように、本実施の形態は、キーワード処理部１８が、キーワードｋｗ（ｊ）を文字列長ｎで分類したキーワードグループＧＫ（ｎ）ごとに、ＧＫ（ｎ）に属するｋｗ（ｊ）の指標値Ｆ０（ｊ），Ｆ１（ｊ）を標準化した標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、これらＦ０’（ｊ），Ｆ１’（ｊ）の２次元正規分布Ｗ（ｎ）を、分布中心Ｏに対して点対称な複数の領域Ｒ（ｄ）に分割した後、分布中心Ｏから順に選択してハッシュ値ｅを循環して付与し、ｅと対応するハッシュグループＧＨ（ｅ）に各ｋｗ（ｊ）を順次分類するようにしたものである。
【００６６】
また、検索処理部１９が、入力テキストＴｉｎから抽出した文字列長ｎの部分文字列Ｔの標準化指標値Ｆ０’（ｊ），Ｆ１’（ｊ）を計算し、Ｔが属する領域Ｒ（ｄ）を特定することによりＴのハッシュ値ｅを計算し、ｅと対応するハッシュグルーブＧＨ（ｅ）に分類されているキーワードｋｗ（ｊ）のそれぞれとＴとを照合することにより、Ｔｉｎ内に含まれるｋｗ（ｊ）を検索するようにしたものである。
【００６７】
これにより、各ハッシュグループＧＨ（ｅ）に分類されるキーワードｋｗ（ｊ）の数、すなわち、ハッシュ値ｅが同じで衝突が起こしうるキーワード数Ｖ（ｅ）を、領域数Ｄとハッシュグループ数Ｅに基づき制御することができ、各ハッシュグループＧＨ（ｅ）間でキーワード数Ｖ（ｅ）を均等化することができる。これにより、キーワード数Ｖ（ｅ）が大きく異なるよう分類した場合と比較して、衝突回数の最悪値を抑えることができる。したがって、検索性能を劣化させることなく、入力テキストＴｉｎに含まれるキーワードｋｗ（ｊ）を高速に検索できる。
【００６８】
また、本実施の形態にかかる計算方法は、コンピュータプログラムで実現できるものであり、このコンピュータプログラムは、半導体メモリ等の適当な記録媒体を介して、またはネットワークを介して提供され、本発明を実施する際に計算環境にインストールされ、ＣＰＵ等の演算手段の下で動作して本発明を実現することになる。
【００６９】
［第２の実施の形態］
次に、本発明の第２の実施の形態にかかる文字列検索装置１０について説明する。本実施の形態は、第１の実施の形態と比較して、文字列検索処理における指標値計算方法が異なる。
すなわち、本実施の形態にかかる指標値計算部１９Ｂは、抽出位置ｘから抽出した文字列長ｎの部分文字列Ｔに関する指標値Ｆ０（ｘ），Ｆ１（ｘ）を計算する際、抽出位置ｘの１文字前の抽出位置ｘ−１から抽出した文字列長ｎの部分文字列Ｔ−１に関する指標値をＦ０（ｘ−１），Ｆ１（ｘ−１）に基づいて、指標値Ｆ０（ｘ），Ｆ１（ｘ）を計算する機能を有している。
【００７０】
図１５は、第２の実施の形態にかかる指標値の計算方法を示す説明図である。図１６は、第２の実施の形態にかかる文字列検索動作を示す説明図である。
第１の実施の形態では、文字列検索処理において、抽出位置ｘから抽出した文字列長ｎの部分文字列Ｔの検索が１回終わると、抽出位置ｘを１つ文字ずらして抽出した文字列長ｎの部分文字列Ｔについて、同様の処理を行うことを繰り返す。つまり、部分文字列Ｔの先頭を１つスライドさせた後に指標値Ｆ０，Ｆ１を改めて計算していた。
【００７１】
この際、指標値Ｆ０，Ｆ１を前述した式（１）の一般的な形式で求められるものとしているが、特殊なケースとして、次の式（９）に示すような、係数列ａ（ｉ）がすべて１で、係数列ｂ（ｉ）がｉ＋１である場合、指標値Ｆ０，Ｆ１は、いわゆるローリングハッシュ関数と同様に、高速計算できる。
【数９】
2017107472.tif 000011
【００７２】
このような指標値Ｆ０，Ｆ１の計算式を用いた場合、ある抽出位置ｘでのＦ０，Ｆ１であるＦ０（ｘ）およびＦ１（ｘ）は、１文字前の抽出位置ｘ−１でのＦ０（ｘ−１）およびＦ１（ｘ−１）を利用して、次の式（１０）に基づき、わずかな加減算で計算できる。
【数１０】
2017107472.tif 000012
【００７３】
図１５には、入力テキストＴｉｎの位置ｘ−１から文字「ＡＢＣＤＥＦ」が並んでおり、位置ｘから文字列長ｎ＝５で抽出した部分文字列Ｔに関する指標値Ｆ０，Ｆ１を計算する場合が示されている。
抽出位置ｘ−１のＦ０（ｘ−１）から、位置ｘ−１の文字「Ａ」の文字コードｃ（ｘ−１）を減算して、新たに追加される位置ｘ＋５−１の文字「Ｆ」の文字コードｃ（ｘ−１）を加算することにより、抽出位置ｘのＦ０（ｘ）が求められる。
【００７４】
また、抽出位置ｘ−１のＦ１（ｘ−１）から、抽出位置ｘのＦ０（ｘ）を減算して、位置ｘ＋５−１の文字「Ｆ」の文字コードｃ（ｘ−１）の５倍を加算することにより、抽出位置ｘのＦ１（ｘ）が求められる。
したがって、第１の実施の形態において、Ｆ０，Ｆ１の計算結果を記憶しておき、抽出位置ｘが１文字スライドする度に式（１０）による計算に利用する形に変形すれば、本実施の形態にかかる構成を得ることができる。
【００７５】
したがって、本実施の形態によれば、入力テキストＴｉｎ中の部分文字列Ｔを変更する度に式（１）の線形結合を計算する必要がなく、式（１０）に示した数回の加減乗算のみでＦ０，Ｆ１を計算できる。また、第１の実施の形態において使用していたＦ０，Ｆ１の計算に用いる係数列ａ（ｉ），ｂ（ｉ）はメモリに展開しておく必要がなくなる。これにより、並列計算できない演算手段によっても、高速な文字列検索が可能となる。
【００７６】
また、本実施の形態にかかる計算方法は、コンピュータプログラムで実現できるものであり、このコンピュータプログラムは、半導体メモリ等の適当な記録媒体を介して、またはネットワークを介して提供され、本発明を実施する際に計算環境にインストールされ、ＣＰＵ等の演算手段の下で動作して本発明を実現することになる。
【００７７】
［第３の実施の形態］
次に、本発明の第３の実施の形態にかかる文字列検索装置１０について説明する。本実施の形態は、第１の実施の形態と比較して、文字列検索処理における照合方法が異なる。
すなわち、本実施の形態にかかるキーワード照合部１９Ｅは、ハッシュグループＧＨ（ｅ）に属するキーワードｋｗ（ｊ）のそれぞれと部分文字列Ｔとを照合する際、これらキーワードｋｗ（ｊ）に関する指標値Ｆ０’（ｊ）（またはＦ１’（ｊ））からなるキーワード指標値ＦＫ（ｅ，ｊ）と、部分文字列Ｔに関する指標値Ｆ０’（またはＦ１’）からなる部分文字列指標値ＦＴとを比較し、キーワード指標値ＦＫ（ｅ，ｊ）と部分文字列指標値ＦＴとが一致した場合にのみ、キーワードｋｗ（ｊ）と部分文字列Ｔとを照合する機能を有している。
【００７８】
図１７は、第３の実施の形態にかかる文字列検索動作を示す説明図である。図１８は、第３の実施の形態にかかる照合処理を示す説明図である。
第１の実施の形態では、ハッシュグループＧＨ（ｅ）に属するキーワードｋｗ（ｊ）のそれぞれと部分文字列Ｔとを照合する際、それぞれの文字コードを照合する処理であるため、一般には負荷の重い処理となる。
本実施の形態では、文字コードではなく前述した式（２）で求めたキーワードｋｗ（ｊ）に関するキーワード指標値ＦＫ（ｅ，ｊ）と、式（６）で求めた部分文字列Ｔに関する部分文字列指標値ＦＴとが一致した場合にのみ、キーワードｋｗ（ｊ）と部分文字列Ｔとを照合するようにしたものである。
【００７９】
検索処理時、ハッシュ値ｅが計算された時点で、部分文字列Ｔに関するＦ０’（またはＦ１’）が計算済みである。一方、ハッシュグループＧＨ（ｅ）に分類されているキーワードｋｗ（ｊ）についても、キーワード登録処理において予めＦ０’（またはＦ１’）が計算されている。したがって、部分文字列Ｔと等しいキーワードｋｗ（ｊ）がハッシュグループＧＨ（ｅ）に分類されていないことは、キーワード指標値ＦＫ（ｅ，ｊ）と部分文字列指標値ＦＴとを比較することにより判定できる。
【００８０】
ハッシュグループＧＨ（ｅ）の全キーワードｋｗ（ｊ）に関するキーワード指標値ＦＫ（ｅ，ｊ）は、ハッシュ関数データＤＨ（ｅ）に加えてメモリに展開しておけばよい。
この際、前述の式（２）および式（６）に示したとおり、キーワード指標値ＦＫ（ｅ，ｊ）および部分文字列指標値ＦＴはともに整数値であるため、その比較は通常の演算装置であれば１命令で行える。これにより、ハッシュグループＧＨ（ｅ）内のキーワードｋｗ（ｊ）との文字列照合の回数を大幅に減らすことができ、文字検索処理をさらに高速化することができる。
【００８１】
また、本実施の形態にかかる計算方法は、コンピュータプログラムで実現できるものであり、このコンピュータプログラムは、半導体メモリ等の適当な記録媒体を介して、またはネットワークを介して提供され、本発明を実施する際に計算環境にインストールされ、ＣＰＵ等の演算手段の下で動作して本発明を実現することになる。
【００８２】
［第４の実施の形態］
次に、本発明の第４の実施の形態にかかる文字列検索装置１０について説明する。本実施の形態は、第３の実施の形態と比較して、文字列検索処理における照合順序が異なる。
すなわち、本実施の形態にかかるキーワード照合部１９Ｅは、ハッシュグループＧＨ（ｅ）に属するキーワードｋｗ（ｊ）に関するキーワード指標値ＦＫ（ｅ，ｊ）のそれぞれを昇順（または降順）に並び替えた後、部分文字列指標値ＦＴと順に比較し、部分文字列指標値ＦＴがキーワード指標値ＦＫ（ｅ，ｊ）を上回った（または下回った）時点で比較を終了する機能を有している。
【００８３】
図１９は、第７の実施の形態にかかる文字列検索動作を示す説明図である。図２０は、第４の実施の形態にかかる照合処理を示す説明図である。
前述した第３の実施の形態では、文字列検索処理において、キーワードｋｗ（ｊ）と部分文字列Ｔとの文字列照合の前に、キーワード指標値ＦＫ（ｅ，ｊ）と部分文字列指標値ＦＴを比較している。この比較は、ハッシュグループＧＨ（ｅ）に属するキーワードキーワードｋｗ（ｊ）の全てに対して行うことになる。本実施の形態では、これらキーワードｋｗ（ｊ）について計算したキーワード指標値ＦＫ（ｅ，ｊ）を、その大小関係で昇順（または降順）に予めソートしておく。
【００８４】
この際、ハッシュ関数データＤＨ（ｅ）として、
・ハッシュグループＧＨ（ｅ）のキーワード番号Ｕｓｏｒｔ（ｅ、ｊ）
・ハッシュグループＧＨ（ｅ）のキーワード数Ｖｓｏｒｔ（ｅ）
・ハッシュグループＧＨ（ｅ）のキーワードｋｗ（ｊ）に関するキーワード指標値ＦＫｓｏｒｔ（ｅ，ｊ）
をメモリに展開しておけばよい。
【００８５】
したがって、第３の実施の形態においてメモリに展開するＵ（ｅ、ｊ）、Ｖ（ｅ）、ＦＫ（ｅ、ｊ）といったデータは不要となる。そして、第３の実施の形態と同じく、検索対象の部分文字列Ｔについて文字列照合の前に、当該部分文字列Ｔについて計算済みの部分文字列指標値ＦＴと、ハッシュグループＧＨ（ｅ）のキーワードｋｗ（ｊ）に関するＦＫｓｏｒｔ（ｅ，ｊ）とをソート順に比較し、ＦＴがＦＫｓｏｒｔ（ｅ，ｊ）を上回った（下回った）場合には、それ以上探索をしても値が一致することはない。したがって、検索を打ち切ることができ、部分文字列指標値ＦＴとキーワード指標値ＦＫ（ｅ，ｊ）との比較回数を削減することができ、さらなる高速処理が実現できることとなる。
【００８６】
また、本実施の形態にかかる計算方法は、コンピュータプログラムで実現できるものであり、このコンピュータプログラムは、半導体メモリ等の適当な記録媒体を介して、またはネットワークを介して提供され、本発明を実施する際に計算環境にインストールされ、ＣＰＵ等の演算手段の下で動作して本発明を実現することになる。
【００８７】
［実施の形態の拡張］
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しうる様々な変更をすることができる。また、各実施形態については、矛盾しない範囲で任意に組み合わせて実施することができる。
【符号の説明】
【００８８】
１０…文字列検索装置、１１…通信Ｉ／Ｆ部、１２…操作入力部、１３…画面表示部、１４…キーワード群記憶部、１５…ハッシュ関数データ記憶部、１６…検索結果記憶部、１７…演算処理部、１８…キーワード処理部、１８Ａ…キーワード分類部、１８Ｂ…指標値計算部、１８Ｃ…分布領域特定部、１８Ｄ…ハッシュ値計算部、１８Ｅ…ハッシュグループ分類部、１８Ｆ…ハッシュ関数データ保存部、１９…検索処理部、１９Ａ…部分文字列抽出部、１９Ｂ…指標値計算部、１９Ｃ…分布領域特定部、１９Ｄ…ハッシュ値計算部、１９Ｅ…キーワード照合部、２０…外部装置、ＫＷ…キーワード群、ＧＫ（ｎ）…キーワードグループ、ｋｗ（ｊ）…キーワード、Ｃ（ｉ）…文字コード、ａ（ｉ），ｂ（ｉ）…係数列、Ｆ０（ｊ），Ｆ１（ｊ），Ｆ０，Ｆ１…指標値、Ｗ０，Ｗ１…正規分布、ａ０，ａ１…平均値、ｓ０，Ｓ１…標準偏差、Ｗ（ｎ）…２次元正規分布、Ｌ…回帰直線、Ｐ…傾き、Ｑ…切片、Ｆ０’（ｊ），Ｆ１’（ｊ），Ｆ０，Ｆ１’…標準化指標値、Ｗ’（ｎ）…標準化２次元正規分布、Ｏ…分布中心、Ｒ（ｄ）…領域、ｄ…領域番号、Ｄ…領域数、ｅ…ハッシュ値、Ｅ…ハッシュグループ数、ＧＨ（ｅ）…ハッシュグループ、Ｕ（ｅ，ｊ）…キーワード番号、Ｖ（ｅ）…キーワード数、ＤＨ（ｎ）…ハッシュデータ、Ｔｉｎ…入力テキスト、Ｔ…部分文字列、ｘ…抽出位置、ＦＫ（ｅ，ｊ）…キーワード指標値、ＦＴ…部分文字列指標値、ＲＥＳ…検索結果。
【図１】
2017107472.tif 000016
【図２】
2017107472.tif 000017
【図３】
2017107472.tif 000018
【図４】
2017107472.tif 000019
【図５】
2017107472.tif 000020
【図６】
2017107472.tif 000021
【図７】
2017107472.tif 000022
【図８】
2017107472.tif 000023
【図９】
2017107472.tif 000024
【図１０】
2017107472.tif 000025
【図１１】
2017107472.tif 000026
【図１２】
2017107472.tif 000027
【図１３】
2017107472.tif 000028
【図１４】
2017107472.tif 000029
【図１５】
2017107472.tif 000030
【図１６】
2017107472.tif 000031
【図１７】
2017107472.tif 000032
【図１８】
2017107472.tif 000033
【図１９】
2017107472.tif 000034
【図２０】
2017107472.tif 000035