(57)【要約】【課題】テキストデータを対象として簡単かつ迅速に試行錯誤的な分析を繰り返すことのできる分析手法を提供する。【解決手段】テキストデータに含まれる文字列が、パラメータとして与えられたカテゴリのメンバー文字列の何れかに一致するか否かを解析し、一致したメンバー文字列の名義尺度のパラメータとして与えられたカテゴリ文字列を取得するカテゴリ化部２と、当該取得したカテゴリ文字列をリレーショナルデータベースに統合する統合部３とを備え、テキストデータから変換されるカテゴリ文字列をパラメータによって任意に変えるとともに、テキストデータをカテゴリ文字列に変換する際の一致判定に用いるメンバー文字列もパラメータによって任意に変えながら、テキストデータを対話型にて自由自在にカテゴリ化することができるようにする。【選択図】図１
2010250480.tif 000002
【特許請求の範囲】
【請求項１】
任意の１以上のカテゴリを表すカテゴリ文字列および当該カテゴリに属する１以上の要素を表すメンバー文字列をパラメータとして設定するパラメータ設定手段と、
リレーショナルデータベースの元表においてレコード識別子により示されるレコード毎に格納されたテキストデータに含まれる文字列が、上記パラメータ設定手段により設定されたメンバー文字列の何れかに一致するか否かを解析し、一致したメンバー文字列の名義尺度であるカテゴリ文字列を上記レコード毎に取得するカテゴリ化手段と、
上記カテゴリ化手段により上記レコード毎に取得されたカテゴリ文字列を上記リレーショナルデータベースの元表に統合する統合手段とを備えたことを特徴とするテキストデータ処理装置。
【請求項２】
上記統合手段は、上記カテゴリ化手段により上記レコード毎に取得されたカテゴリ文字列を上記レコード識別子と共に格納して一時表を生成する一時表生成手段と、
上記一時表生成手段により生成された一時表と上記元表とを表結合する表結合手段とを備えたことを特徴とする請求項１に記載のテキストデータ処理装置。
【請求項３】
上記カテゴリ化手段は、上記元表の上記レコード毎に、上記元表に格納された上記テキストデータを検索し、上記テキストデータに含まれる文字列が１以上の上記メンバー文字列の何れかと一致した場合に、当該一致したメンバー文字列の名義尺度である１以上のカテゴリ文字列のリストを区切り記号で区切って返すように定義された第１の関数に従って演算を行うことにより、上記テキストデータを上記カテゴリ文字列に変換することを特徴とする請求項１または２に記載のテキストデータ処理装置。
【請求項４】
上記カテゴリ化手段は、上記元表の上記レコード毎に、上記元表に格納された上記テキストデータを検索し、上記テキストデータに含まれる文字列が１以上の上記メンバー文字列の何れかと一致した場合に、当該一致したメンバー文字列の名義尺度である１以上のカテゴリ文字列のリストを区切り記号で区切って返すように定義された第１の関数に従って演算を行うことにより、上記テキストデータを上記カテゴリ文字列に変換するようになされ、
上記一時表生成手段は、上記区切り記号で区切られて列挙された１以上のカテゴリ文字列を上記一時表の各レコードに分けて上記レコード識別子と共に格納するように定義された第２の関数に従って演算を行うことにより、上記一時表を生成することを特徴とする請求項２に記載のテキストデータ処理装置。
【請求項５】
上記カテゴリ化手段は、上記リレーショナルデータベースの元表に格納された上記テキストデータに代えて、当該テキストデータから生成されたインデックス情報に含まれる文字列が、上記パラメータ設定手段により設定されたメンバー文字列の何れかに一致するか否かを解析し、一致したメンバー文字列の名義尺度であるカテゴリ文字列を上記レコード毎に取得することを特徴とする請求項１に記載のテキストデータ処理装置。
【請求項６】
任意の１以上のカテゴリを表すカテゴリ文字列および当該カテゴリに属する１以上の要素を表すメンバー文字列をパラメータとして設定するパラメータ設定手段、
リレーショナルデータベースの元表においてレコード識別子により示されるレコード毎に格納されたテキストデータに含まれる文字列が、上記パラメータ設定手段により設定されたメンバー文字列の何れかに一致するか否かを解析し、一致したメンバー文字列の名義尺度であるカテゴリ文字列を上記レコード毎に取得するカテゴリ化手段、および
上記カテゴリ化手段により上記レコード毎に取得されたカテゴリ文字列を上記リレーショナルデータベースの元表に統合する統合手段としてコンピュータを機能させるためのコンピュータ読み取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テキストデータ処理装置およびプログラムに関し、特に、テキストデータをその名義尺度であるカテゴリで分類することにより、テキストデータを対象として統計的な分析処理を可能にする技術に関するものである。
【背景技術】
【０００２】
従来、アンケートの自由回答、コールセンタやＷｅｂサイトに寄せられるユーザからの定性情報、掲示板への書き込みなどを解析することによって、何らかの特徴や傾向を把握したり、顧客や市場のニーズを抽出したり、自社製品への不満点を分析して有効な対処法を検討したりすることが一般的に行われている。このような分析をコンピュータで行う場合、大量の電子化されたテキストデータを分析する処理が必要となる。ところが、テキストデータ自体のままでは、当該テキストデータの集合を特徴付ける有用な情報を抽出したり、統計的な手法で計数するなどして人間にとって有用な情報を得たりすることができない。
【０００３】
これに対して、テキストマイニングと呼ばれるテキストデータ分析手法が存在する。テキストマイニングとは、定型化されていないテキストデータ（通常の自然文）を単語やフレーズなどに分割し、その出現頻度や相関関係などを解析することで、テキストに込められた意味や一定の知見などを抽出する手法である。ところが、このテキストマイニングは、ユーザに高度な統計解析の知識を要求するため、これが普及の阻害要因となっている。また、テキストマイニングは、処理に相応の準備が必要となるため、対話型にて解析手法を変えて試行錯誤的に行う分析（以下、対話型分析という）のサイクルを迅速に繰り返すことが難しい。
【０００４】
一般に、対話型分析を行うことが可能な手法として、ＯＬＡＰ（online analytical processing）と呼ばれる手法がある。ＯＬＡＰは、ユーザがデータベースを多次元的に解析し、その結果を視覚化するシステムの概念を言う。ＯＬＡＰによる多次元分析は、例えば地域別、製品別といったカテゴリ別の軸を設定し、軸を入れ替えて分析した結果を比較する「ダイス」、あるカテゴリに関するデータの時系列的な推移を分析する「スライス」、階層化されたカテゴリのデータを段階的に掘り下げて分析する「ドリルダウン」、当該ドリルダウンと逆方向の分析である「ドリルアップ」などの操作を繰り返すことで行われる。分析が必要だと考えているユーザ自身が試行錯誤しながら、直接データをダイナミックに操作するのがＯＬＡＰの特徴である。
【０００５】
ただし、テキストデータは、そのままではカテゴリ化されていないため、ＯＬＡＰ操作の対象とならない。これに対して、大量の電子化されたテキストデータの文章を分類（カテゴリ化）し、統計的な処理を可能にする技術が提案されている（例えば、特許文献１を参照）。この特許文献１に記載の技術では、非構造データである自然文のテキスト情報を解釈し、当該テキスト情報を集計処理可能なカテゴリ情報に変換する。そして、そのカテゴリ情報を表形式の構造データに変換し、別のカテゴリに関する構造データを有するリレーショナルデータベース（ＲＤＢ）に統合する。
【０００６】
このように、特許文献１では、テキストデータをＯＬＡＰの枠組みに適合する方法を提供している。すなわち、ＯＬＡＰの世界で普及しているＲＤＢにテキストデータのカテゴリ化機能を組み込むことによって、ＯＬＡＰの優れた分析能力をテキストデータの分析に活用できるようにしている。ここで、ＲＤＢは、任意のＳＱＬ（Structured Query Language）文を生成することにより、分析の対象とするデータを自由に選んで抽出することが可能である。このようなＲＤＢの性質を利用して非定型の分析を行うＯＬＡＰの枠組みは、非定型ＯＬＡＰと呼ばれる。特許文献１の技術は、テキストデータを非定型ＯＬＡＰの枠組みに適合するための技術である。このため、テキストデータからカテゴリ化された構造データを含めて、ＲＤＢを構成する複数の構造データの中から任意の組み合わせを選んで統計的な分析を行うことも可能である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−５０９３０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記特許文献１に記載の技術では、テキストデータから変換されるカテゴリ情報がプログラムによって固定されている。すなわち、テキストデータがカテゴリ化されてＲＤＢに組み込まれた後は、その組み込まれたデータを用いてＲＤＢの対話型分析を行うことが可能であるが、テキストデータをどのようにカテゴリ化するかという場面においては、対話型にて試行錯誤的に操作をすることができないという問題があった。
【０００９】
本発明は、このような問題を解決するために成されたものであり、テキストデータを対話型にて自由自在にカテゴリ化でき、簡単かつ迅速に試行錯誤的な分析を繰り返すことのできるテキストデータ分析手法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記した課題を解決するために、本発明では、テキストデータに含まれる文字列が、パラメータとして与えられたメンバー文字列の何れかに一致するか否かを解析し、一致したメンバー文字列が属しているカテゴリの名義尺度のパラメータとして与えられたカテゴリ文字列を取得する。そして、当該取得したカテゴリ文字列をリレーショナルデータベースに統合するようにしている。
【発明の効果】
【００１１】
上記のように構成した本発明によれば、テキストデータから変換されるカテゴリ文字列をパラメータによって任意に変えることができる。また、テキストデータをカテゴリ文字列に変換する際の一致判定に用いるカテゴリのメンバー文字列もパラメータによって任意に変えることができる。このため、カテゴリ文字列やカテゴリに属するメンバー文字列を試行錯誤的に変えながら、テキストデータを対話型にて自由自在にカテゴリ化することができる。また、テキストデータから変換されたカテゴリ文字列がリレーショナルデータベースに統合されるので、当該カテゴリ文字列を項目の１つとして含むリレーショナルデータベースに対する分析のための操作も対話型にて試行錯誤的に行うことができる。これにより、テキストデータの試行錯誤的な分析を簡単かつ迅速に繰り返すことが可能となる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態によるテキストデータ処理装置の機能構成例を示すブロック図である。
【図２】ＲＤＢに格納されている元表の例を示す図である。
【図３】例１のＳＱＬ文に従ってテキストデータをカテゴリ化した結果を示す図である。
【図４】例２のＳＱＬ文に従って本実施形態の一時表生成部により生成された一時表（カテゴリ表）を示す図である。
【図５】例２のＳＱＬ文に従って本実施形態の表結合部により一時表と元表とを内部結合した結果の表を示す図である。
【図６】例２のＳＱＬ文に従ってグルーピング演算を実行した結果を示す図である。
【図７】例３のＳＱＬ文に従って本実施形態の一時表生成部により生成された一時表（カテゴリ表）を示す図である。
【図８】例３のＳＱＬ文に従って本実施形態の表結合部により一時表と元表とを内部結合した結果の表を示す図である。
【図９】例３のＳＱＬ文に従ってグルーピング演算を実行した結果を示す図である。
【図１０】例４のＳＱＬ文に従って本実施形態の一時表生成部により生成された一時表（カテゴリ表）を示す図である。
【図１１】例４のＳＱＬ文に従って本実施形態の表結合部により一時表と元表とを内部結合した結果の表を示す図である。
【図１２】例４のＳＱＬ文に従ってグルーピング演算を実行した結果を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の一実施形態を図面に基づいて説明する。図１は、本実施形態によるテキストデータ処理装置の機能構成例を示すブロック図である。図１に示すように、本実施形態のテキストデータ処理装置１０は、その機能構成として、パラメータ設定部１、カテゴリ化部２および統合部３を備えている。統合部３は、一時表生成部１１および表結合部１２を備えている。本実施形態のテキストデータ処理装置１０は、以下に詳しく説明するように、ユーザが操作部２０の操作を通じて任意のパラメータを設定しながら、リレーショナルデータベース（ＲＤＢ３０）に格納されているテキストデータを対話型にて試行錯誤的に分析処理する手段を提供する。
【００１４】
図１において、パラメータ設定部１は、任意の１以上のカテゴリを表すカテゴリ文字列および当該カテゴリに属する１以上の要素を表すメンバー文字列をパラメータとして設定する。具体的には、パラメータ設定部１は、キーボードやマウス等から成る操作部２０の操作を通じて入力される１以上のカテゴリ文字列および１以上のメンバー文字列を、後述する関数で使用する引数として設定する。パラメータ設定の際は、１つのカテゴリに対して１以上のメンバーを含ませることが可能であり、そのようなカテゴリと１以上のメンバーのセットを１以上設定することが可能である。
【００１５】
カテゴリ化部２は、ＲＤＢ３０の元表（統合部３により統合処理が行われる前の表）においてレコード識別子（ＲＩＤ）により示されるレコード毎に格納されたテキストデータに含まれる文字列が、パラメータ設定部１により設定されたメンバー文字列の何れかに一致するか否かを解析し、一致したメンバー文字列の名義尺度であるカテゴリ文字列をレコード毎に取得する。
【００１６】
例えば、ＲＤＢ３０においてＲＩＤ＝１の第１レコードに格納されているテキストデータが「商品が破損していた」という文章（自然文）であり、パラメータ設定部１によりカテゴリ文字列として「クレーム」が設定されるとともに、そのカテゴリに属するメンバーとして「破損、混入」の２つが設定されたとする。この場合、カテゴリ化部２は、テキストデータの一部に含まれる「破損」という文字列が、パラメータ設定部１により設定された「破損」というメンバー文字列に一致すると判断し、一致したメンバー文字列の名義尺度である「クレーム」というカテゴリ文字列を取得する。カテゴリ化部２は、このようなテキストデータのカテゴリ化処理を他のＲＩＤのレコードについても同様に行う。
【００１７】
カテゴリ化部２は、上述のようにテキストデータをカテゴリ文字列に変換するカテゴリ化処理を、本出願人が考案したTEXT_CLASSIFY関数（本発明の第１の関数に相当する）の導入によって実現する。このTEXT_CLASSIFY関数は、ＲＤＢ３０の元表のレコード毎に、元表に格納されたテキストデータを検索し、テキストデータに含まれる文字列が１以上のメンバー文字列の何れかと一致した場合に、当該一致したメンバー文字列の名義尺度である１以上のカテゴリ文字列のリストを区切り記号（デリミタ）で区切って返すように定義された関数である。
【００１８】
統合部３は、カテゴリ化部２によりレコード毎に取得されたカテゴリ文字列をＲＤＢ３０の元表に統合する。カテゴリ文字列の統合処理は、リレーショナルデータベースの関係演算である射影操作または結合操作によって行うことが可能である。一般的な射影操作は、表の中から必要な列だけを指定して、指定した列のデータを表から取り出す操作である。本実施形態では、元表にある列の各レコードのデータに加えて、TEXT_CLASSIFY関数の実行により取得された各レコードのカテゴリ文字列を取り出すことにより、カテゴリ化部２によりレコード毎に取得されたカテゴリ文字列をＲＤＢ３０の元表に統合する。
【００１９】
また、結合操作は、複数の表から１つの表を生成する操作である。結合操作によってカテゴリ文字列の統合処理を行う場合は、一時表生成部１１および表結合部１２を用いる。一時表生成部１１は、カテゴリ化部２によりレコード毎に取得されたカテゴリ文字列をＲＩＤと共に格納することによって一時表を生成する。表結合部１２は、一時表生成部１１により生成された一時表とＲＤＢ３０の元表とをＲＩＤをキーとして表結合する。
【００２０】
一時表生成部１１は、上述のようにカテゴリ文字列から一時表を生成する処理を、本出願人が考案したTEXT_EXTRACT関数（本発明の第２の関数に相当する）の導入によって実現する。このTEXT_EXTRACT関数は、デリミタで区切られて列挙された１以上のカテゴリ文字列のリストを行方向（一時表の各レコード）に分けてＲＩＤと共に格納するように定義された関数である。
【００２１】
以上に説明した本実施形態によるテキストデータ処理装置１０の各機能構成ブロックは、ハードウェア構成、ＤＳＰ、ソフトウェアの何れによっても実現することが可能である。例えばソフトウェアによって実現する場合、本実施形態のテキストデータ処理装置１０は、実際にはコンピュータのＣＰＵあるいはＭＰＵ、ＲＡＭ、ＲＯＭなどを備えて構成され、ＲＡＭやＲＯＭに記憶されたプログラムが動作することによって実現できる。
【００２２】
以下に、上記のように構成した本実施形態によるテキストデータ処理装置１０の具体的な動作例を説明する。ここでは、説明の便宜のためにリレーショナルデータベース操作の標準コンピュータ言語であるＳＱＬ言語を使用する。ただし、本発明においては、リレーショナル代数モデルに準拠した直交性を有するリレーショナルデータベース操作が必須の要件であって、ＳＱＬ言語を必須の要件とする訳ではない。
【００２３】
図２は、ＲＤＢ３０に格納されている元表の例を示す図である。図２に示す例は、複数の消費者から受領した問合せの内容を示す問合せ情報表であり、１つのレコードに１つの問合せ内容が格納されている。各レコードには属性項目としてＲＩＤ、地域、名前、購入商品、お問合せ内容、お問合せ日が含まれている。このうち、お問合せ内容は、消費者が自由に記載した自然文がテキストデータとして格納される属性項目である。本実施形態では、このお問合せ内容の属性項目に格納されたテキストデータを名義尺度にカテゴリ化して分析する。その際、TEXT_CLASSIFY関数およびTEXT_EXTRACT関数を適宜用いることにより、以下に述べるような様々な分析を試行錯誤的に行うことが可能である。
【００２４】
例１．TEXT_CLASSIFY関数でグループ射影列を作成する例
この場合におけるＳＱＬ文の例を以下に示す。
SELECT 
TEXT_CLASSIFY( ---- (1)
問合せ情報表.お問合せ内容, ---- (2)
'クレーム' : ['破損', '混入', '変', '色'], ---- (3)
'異物' : ['虫', 'ゴミ', '金属', '髪'], ---- (4)
'その他') グループ, ---- (5)
RID, 地域, 名前, 購入商品, お問合せ内容, お問合せ日 ---- (6)
FROM 問合せ情報表 ---- (7)
【００２５】
上記ＳＱＬ文の各行(1)〜(7)の意味は以下の通りである。
(1) 第１射影カラムに行単位処理のTEXT_CLASSIFY関数を指定。行単位処理というのは、レコード毎に処理を行っていくことを意味する。
(2) 第１引数として、「問合せ情報表」（元表）のテキストデータ項目である「お問合せ内容」を指定。
(3) 第２引数としてカテゴリの第１組を指定。カテゴリは'クレーム'、所属メンバーの組は['破損', '混入', '変', '色']と定義。
(4) 第３引数としてカテゴリの第２組を指定。カテゴリは'異物'、所属メンバーの組は['虫', 'ゴミ', '金属', '髪']と定義。
(5) 第４引数として例外カテゴリを指定。また、第１射影カラムで指定したTEXT_CLASSIFY関数の代替項目名として「グループ」を指定。例外カテゴリは'その他'と定義。例外カテゴリとは、テキストデータに含まれる文字列が行(3)(4)で定義されたカテゴリに属する各メンバーの何れにも該当しなかった場合に代替するカテゴリのことを指す。
(6) 第２射影カラム以降は、「問合せ情報表」の各属性項目を指定。
(7) 表参照として「問合せ情報表」（元表）を指定。
【００２６】
上述のＳＱＬ文において、行(1)〜(5)は、TEXT_CLASSIFY関数により「お問合せ内容」のテキストデータをカテゴリ文字列に変換し、これを「グループ」という新しい属性項目のデータとして取得することを意味する。ＳＱＬ文の残りの行は、TEXT_CLASSIFY関数により取得された「グループ」という属性項目のデータと、行(6)で指定される各属性項目のデータとを行(7)で指定された問合せ情報表の各列のデータとして取り出すことを意味する。図３は、このＳＱＬ文の実行結果を示す図である。
【００２７】
図３において、例えば、ＲＩＤ＝１の第１レコードにおいて「お問合せ内容」の属性項目に格納されているテキストデータは、「商品が破損していた」という文章（自然文）である。また、このテキストデータに含まれる「破損」という文字列が、行(3)において第２引数として定義されたメンバーの中にある「破損」という文字列と一致する。このため、ＲＩＤ＝１の第１レコードにおいては、「破損」というメンバー文字列の名義尺度として「クレーム」というカテゴリ文字列が取得され、最初の列（第１射影カラム）に追加された「グループ」という新しい属性項目の第１レコードのデータとして元表に統合される。
【００２８】
また、ＲＩＤ＝２の第２レコードにおいて「お問合せ内容」の属性項目に格納されているテキストデータは、「金属が中に混入していた」という文章（自然文）である。また、テキストデータに含まれる「混入」という文字列が、行(3)において第２引数として定義されたメンバーの中にある「混入」という文字列と一致する。さらに、このテキストデータに含まれる「金属」という文字列が、行(4)において第３引数として定義されたメンバーの中にある「金属」という文字列と一致する。このため、ＲＩＤ＝２の第２レコードにおいては、「混入」というメンバー文字列の名義尺度として「クレーム」というカテゴリ文字列が、「金属」というメンバー文字列の名義尺度として「異物」というカテゴリ文字列が取得され、第１射影カラムの「グループ」という新しい属性項目の第２レコードのデータとして元表に統合される。
【００２９】
ＲＩＤ＝３〜６のレコードについても同様の処理によりカテゴリ文字列が取得され、第１射影カラムの「グループ」という新しい属性項目のデータとして元表に統合される。なお、ＲＩＤ＝６の第６レコードについては、「お問合せ内容」の属性項目に格納されているテキストデータが「シールがはがれにくかった」という文章（自然文）であり、この中には「クレーム」のカテゴリに属するメンバー文字列も「異物」のカテゴリに属するメンバー文字列も含まれていない。このため、ＲＩＤ＝６の第６レコードにおいては、「その他」の例外カテゴリ文字列が取得される。
【００３０】
すなわち、ＲＩＤ＝１〜６の各レコードに関して、TEXT_CLASSIFY関数の戻り値であるカテゴリリストは以下の通りとなり、これらの戻り値で示されるカテゴリ文字列が「グループ」という属性項目のデータとして元表に統合される。
ＲＩＤ＝１  戻り値＝['クレーム']
ＲＩＤ＝２  戻り値＝['クレーム', '異物']
ＲＩＤ＝３  戻り値＝['クレーム']
ＲＩＤ＝４  戻り値＝['クレーム']
ＲＩＤ＝５  戻り値＝['異物']
ＲＩＤ＝６  戻り値＝['その他']
【００３１】
例２．TEXT_CLASSIFY関数とTEXT_EXTRACT関数とで１次元カテゴリ集約表を作成する例
この場合におけるＳＱＬ文の例を以下に示す。
SELECT
カテゴリ表.グループ１ グループ１,
COUNT(DISTINCT問合せ情報表.RID) 出現度数 ---- (1)
FROM
問合せ情報表, ---- (2)
TEXT_EXTRACT( ---- (3)
問合せ情報表, ---- (4)
RID, ---- (5)
TEXT_CLASSIFY( ---- (6)
問合せ情報表.お問合せ内容, ---- (7)
'クレーム' : ['破損', '混入', '変', '色'], ---- (8)
'異物' : ['虫', 'ゴミ', '金属', '髪'], ---- (9)
'その他') グループ１ ---- (10)
) カテゴリ表 ---- (11)
WHERE問合せ情報表.RID = カテゴリ表.RID ---- (12)
GROUP BY カテゴリ表.グループ１ ---- (13)
【００３２】
上記ＳＱＬ文の各行(1)〜(13)の意味は以下の通りである。
(1) 射影カラムに「カテゴリ表.グループ１」、その代替項目名に「グループ１」を指定。また、RIDの重複除去指定のCOUNT関数、その代替項目名に「出現度数」を指定。
(2) 表参照の第１表に「問合せ情報表」（元表）を指定。
(3) 表参照の第２表にTEXT_EXTRACT関数を指定。
(4) TEXT_EXTRACT関数の第１引数として「問合せ情報表」（元表）を指定。
(5) TEXT_EXTRACT関数の第２引数として問合せ情報表のレコード識別子（RID）を指定。TEXT_EXTRACT関数の結合項目名は自動的に同名（RID）となる。
(6) TEXT_EXTRACT関数の第３引数としてTEXT_CLASSIFY関数を指定。
(7)〜(10) TEXT_CLASSIFY関数の第１引数から第４引数は、「例１．TEXT_CLASSIFY関数でグループ射影列を作成する例」の第１引数から第４引数と同じ。ただし、返り値の代替項目名として「グループ１」を指定。
(11) TEXT_EXTRACT関数の表参照代替名を「カテゴリ表」と指定。
(12) 問合せ情報表とカテゴリ表をRIDで内部結合するように指定。
(13) 結合した結果表を対象に「カテゴリ表.グループ１」でグルーピング演算するように指定。
【００３３】
このＳＱＬ文では、FROM句における表参照の評価から処理が開始される。この例では、表参照の関数としてTEXT_EXTRACT関数があり、行単位処理の関数としてTEXT_CLASSIFY関数がある。これら２つの関数は、行(3)から行(11)にかけてTEXT_EXTRACT(…,TEXT_CLASSIFY(…)…)の呼び出し関係になっている。カテゴリ化部２は、TEXT_CLASSIFY関数の処理を行単位に実行し、カテゴリリストを戻り値として返す。得られるカテゴリリストは上述の例１の場合と同じである。
【００３４】
また、一時表生成部１１は、TEXT_CLASSIFY関数の戻り値を引数として、TEXT_EXTRACT関数の表参照処理を実行する。すなわち、一時表生成部１１は、表参照に関する行単位処理(問合せ情報表, RID, ['グループ１'])を実行する。この表参照処理は、問合せ情報表のＲＩＤと 、属性項目「グループ１」で示されるTEXT_CLASSIFY関数の戻り値であるカテゴリ文字列とを組にして一時表の各レコードに挿入するという処理を行単位で行うことを意味する。ここで、組の第２要素であるカテゴリ文字列が複数の要素（例えば、ＲＩＤ＝２の場合の['クレーム', '異物']）を持つ場合は、個々の要素を取り出して、組[問合せ情報表.RID, カテゴリリストの第１要素]、組[問合せ情報表.RID, カテゴリリストの第２要素]の如く独立したレコードとして挿入する。全ての行（レコード）について表参照処理を行うことでTEXT_EXTRACT関数の処理が完了し、一時表が完成する。TEXT_EXTRACT関数が返す一時表は、行(11)で指定される表参照代替名「カテゴリ表」で参照することができる。この例において一時表生成部１１により生成される一時表（カテゴリ表）は、図４に示す通りである。
【００３５】
ＳＱＬ文の行(12)は、表結合部１２の処理を表す。表結合部１２は、ＲＤＢ３０の元表（図２の問合せ情報表）と、一時表生成部１１により生成された一時表（図４のカテゴリ表）とをＲＩＤで内部結合する。内部結合した結果の表は、図５に示す通りである。また、ＳＱＬ文の行(13)は、行(1)で示されるグルーピング演算を実行することを意味する。この例で示すグルーピング演算は、表結合部１２により生成された内部結合表のうちカテゴリ表の部分において、属性項目「グループ１」で示される各カテゴリの出現度数をカウントするというものである。このグルービング演算の実行結果は、図６に示す通りである。
【００３６】
例３．TEXT_CLASSIFY関数とTEXT_EXTRACT関数とで絞り込み２次元カテゴリ集約表を作成する例（ドリルダウンに相当）
この場合におけるＳＱＬ文の例を以下に示す。
SELECT
カテゴリ表.グループ１ グループ１,
カテゴリ表.グループ２ グループ２,
COUNT(DISTINCT問合せ情報表.RID) 出現度数 ---- (1)
FROM
問合せ情報表, ---- (2)
TEXT_EXTRACT( ---- (3)
問合せ情報表, ---- (4)
RID, ---- (5)
TEXT_CLASSIFY( ---- (6)
問合せ情報表.お問合せ内容, ---- (7)
'クレーム' : ['破損', '混入', '変', '色'], ---- (8)
'異物' : ['虫', 'ゴミ', '金属', '髪'], ---- (9)
'その他') グループ１, ---- (10)
TEXT_CLASSIFY( ---- (11)
問合せ情報表.お問合せ内容, ---- (12)
'異物' : ['虫', 'ゴミ', '金属', '髪'], ---- (13)
'その他') グループ２ ---- (14)
) カテゴリ表 ---- (15)
WHERE問合せ情報表.RID = カテゴリ表.RID
AND カテゴリ表.グループ１= 'クレーム' ---- (16)
GROUP BY カテゴリ表.グループ１, カテゴリ表.グループ２ ---- (17)
【００３７】
上記ＳＱＬ文の各行(1)〜(17)の意味は以下の通りである。
(1) 第１射影カラムに「カテゴリ表.グループ１」、その代替項目名に「グループ１」を指定。また、第２射影カラムに「カテゴリ表.グループ２」、その代替項目名に「グループ２」を指定。さらに、RIDの重複除去指定のCOUNT関数、その代替項目名に「出現度数」を指定。
(2) 表参照の第１表に「問合せ情報表」（元表）を指定。
(3) 表参照の第２表にTEXT_EXTRACT関数を指定。
(4) TEXT_EXTRACT関数の第１引数として「問合せ情報表」（元表）を指定。
(5) TEXT_EXTRACT関数の第２引数として問合せ情報表のレコード識別子（RID）を指定。TEXT_EXTRACT関数の結合項目名は自動的に同名（RID）となる。
(6) TEXT_EXTRACT関数の第３引数としてTEXT_CLASSIFY関数を指定。
(7)〜(10) 行(6)に示されるTEXT_CLASSIFY関数の第１引数から第４引数は「例１．TEXT_CLASSIFY関数でグループ射影列を作成する例」の第１引数から第４引数と同じ。ただし、返り値の代替項目名として「グループ１」を指定。
(11) TEXT_EXTRACT関数の第４引数としてTEXT_CLASSIFY関数を指定。
(12) 〜(14) 行(11)に示されるTEXT_CLASSIFY関数の第１引数から第３引数は「例１．TEXT_CLASSIFY関数でグループ射影列を作成する例」の第１引数、第３引数、第４引数と同じ。ただし、返り値の代替項目名として「グループ２」を指定。
(15) TEXT_EXTRACT関数の表参照代替名を「カテゴリ表」と指定。
(16) 問合せ情報表とカテゴリ表をRIDで内部結合するように指定。「カテゴリ表.グループ１='クレーム'」で第１次元項目を'クレーム'のみに絞り込むように指定。
(17) 結合した結果表を対象に「カテゴリ表.グループ１」、「カテゴリ表.グループ２」でグルーピング演算するように指定。
【００３８】
この例において、行(6)に示すTEXT_CLASSIFY関数の戻り値であるカテゴリリストは、以下の通りとなる。
ＲＩＤ＝１  戻り値＝['クレーム']
ＲＩＤ＝２  戻り値＝['クレーム', '異物']
ＲＩＤ＝３  戻り値＝['クレーム']
ＲＩＤ＝４  戻り値＝['クレーム']
ＲＩＤ＝５  戻り値＝['異物']
ＲＩＤ＝６  戻り値＝['その他']
【００３９】
また、行(11)に示すTEXT_CLASSIFY関数の戻り値であるカテゴリリストは、以下の通りとなる。
ＲＩＤ＝１  戻り値＝['その他']
ＲＩＤ＝２  戻り値＝['異物']
ＲＩＤ＝３  戻り値＝['その他']
ＲＩＤ＝４  戻り値＝['その他']
ＲＩＤ＝５  戻り値＝['異物']
ＲＩＤ＝６  戻り値＝['その他']
【００４０】
これら２つのカテゴリリストに基づいて行(6)のTEXT_EXTRACT関数に従って一時表生成部１１により生成される一時表（カテゴリ表）は、図７に示す通りである。また、行(16)に示すＳＱＬ文に基づいて表結合部１２により生成される内部結合結果表、つまり、ＲＤＢ３０の元表（図２の問合せ情報表）と、一時表生成部１１により生成された一時表（図７のカテゴリ表）とをＲＩＤで内部結合した結果の表は、図８に示す通りである。ここでは、属性項目「グループ１」で示されるカテゴリが'クレーム'となっているもののみに絞り込んだ状態で内部結合が行われている。
【００４１】
さらに、行(17)で示すＳＱＬ文に基づいて行(1)で示されるグルーピング演算を実行した結果は、図９に示す通りである。この行(1)で示すグルーピング演算は、表結合部１２により生成された図８に示す内部結合表のうちカテゴリ表の部分において、属性項目「グループ１」で示されるカテゴリ（この例では'クレーム'というカテゴリのみに絞られている）と属性項目「グループ２」で示される各カテゴリとの異なる組み合わせ毎に、その出現度数をカウントするというものである。
【００４２】
例４．TEXT_CLASSIFY関数とTEXT_EXTRACT関数とで絞り込み３次元カテゴリ集約表を作成する例（ドリルダウンに相当する）
この場合におけるＳＱＬ文の例を以下に示す。
SELECT
カテゴリ表.グループ１ グループ１,
カテゴリ表.グループ２ グループ２,
カテゴリ表.グループ３ グループ３,
COUNT(DISTINCT問合せ情報表.RID) 出現度数 ---- (1)
FROM
問合せ情報表, ---- (2)
TEXT_EXTRACT( ---- (3)
問合せ情報表, ---- (4)
RID, ---- (5)
TEXT_CLASSIFY( ---- (6)
問合せ情報表.お問合せ内容, ---- (7)
'クレーム' : ['破損', '混入', '変', '色'], ---- (8)
'異物' : ['虫', 'ゴミ', '金属', '髪'], ---- (9)
'その他') グループ１, ---- (10)
TEXT_CLASSIFY( ---- (11)
問合せ情報表.お問合せ内容, ---- (12)
'異物' : ['虫', 'ゴミ', '金属', '髪'], ---- (13)
'その他') グループ２, ---- (14)
TEXT_CLASSIFY( ---- (15)
問合せ情報表.お問合せ内容, 
'虫' : ['虫'],
'ゴミ’ : [‘ゴミ’],
'金属' : ['金属'],
'髪' : ['髪'], ---- (16)
'その他') グループ３ ---- (17)
) カテゴリ表 ---- (18)
WHERE問合せ情報表.RID = カテゴリ表.RID
AND カテゴリ表.グループ１= 'クレーム' 
AND カテゴリ表.グループ２= '異物' ---- (19)
GROUP BY
カテゴリ表.グループ１,
カテゴリ表.グループ２,
カテゴリ表.グループ３ ---- (20)
【００４３】
上記ＳＱＬ文の各行(1)〜(20)の意味は以下の通りである。
(1) 第１射影カラムに「カテゴリ表.グループ１」、その代替項目名に「グループ１」を指定。第２射影カラムに「カテゴリ表.グループ２」、その代替項目名に「グループ２」を指定。また、第３射影カラムに「カテゴリ表.グループ３」、その代替項目名に「グループ３」を指定。さらに、RIDの重複除去指定のCOUNT関数、その代替項目名に「出現度数」を指定。
(2)〜(14) 「例３．TEXT_CLASSIFY関数とTEXT_EXTRACT関数とで絞り込み２次元カテゴリ集約表を作成する例」の行(2)〜(14)と同じ。
(15) TEXT_EXTRACT関数の第４引数としてTEXT_CLASSIFY関数を指定。
(16) グループ２のメンバーを展開できるように、行(15)で示されるTEXT_CLASSIFY関数の各引数をカテゴリとメンバーとが同一となるように指定。
(17) 行(15)で示されるTEXT_CLASSIFY関数の代替項目名に「グループ３」を指定。
(18) TEXT_EXTRACT関数の表参照代替名を「カテゴリ表」と指定。
(19) 問合せ情報表とカテゴリ表をRIDで内部結合するように指定。「カテゴリ表.グループ１= 'クレーム'」で第１次元項目を'クレーム'のみに絞り込み、かつ、「カテゴリ表.グループ２= '異物'」で第２次元項目を'異物'のみに絞り込むように指定。
(20) 結合した結果表を対象に「カテゴリ表.グループ１」、「カテゴリ表.グループ２」、「カテゴリ表.グループ３」でグルーピング演算するように指定。
【００４４】
この例において、行(6)に示すTEXT_CLASSIFY関数の戻り値であるカテゴリリストは、以下の通りとなる。
ＲＩＤ＝１  戻り値＝['クレーム']
ＲＩＤ＝２  戻り値＝['クレーム', '異物']
ＲＩＤ＝３  戻り値＝['クレーム']
ＲＩＤ＝４  戻り値＝['クレーム']
ＲＩＤ＝５  戻り値＝['異物']
ＲＩＤ＝６  戻り値＝['その他']
【００４５】
また、行(11)に示すTEXT_CLASSIFY関数の戻り値であるカテゴリリストは、以下の通りとなる。
ＲＩＤ＝１  戻り値＝['その他']
ＲＩＤ＝２  戻り値＝['異物']
ＲＩＤ＝３  戻り値＝['その他']
ＲＩＤ＝４  戻り値＝['その他']
ＲＩＤ＝５  戻り値＝['異物']
ＲＩＤ＝６  戻り値＝['その他']
【００４６】
また、行(15)に示すTEXT_CLASSIFY関数の戻り値であるカテゴリリストは、以下の通りとなる。
ＲＩＤ＝１  戻り値＝['その他']
ＲＩＤ＝２  戻り値＝['金属']
ＲＩＤ＝３  戻り値＝['その他']
ＲＩＤ＝４  戻り値＝['その他']
ＲＩＤ＝５  戻り値＝['髪']
ＲＩＤ＝６  戻り値＝['その他']
【００４７】
これら３つのカテゴリリストに基づいて行(6)のTEXT_EXTRACT関数に従って一時表生成部１１により生成される一時表（カテゴリ表）は、図１０に示す通りである。また、行(19)に示すＳＱＬ文に基づいて表結合部１２により生成される内部結合結果表、つまり、ＲＤＢ３０の元表（図２の問合せ情報表）と、一時表生成部１１により生成された一時表（図１０のカテゴリ表）とをＲＩＤで内部結合した結果の表は、図１１に示す通りである。ここでは、属性項目「グループ１」で示されるカテゴリが'クレーム'、属性項目「グループ２」で示されるカテゴリが'異物'となっているもののみに絞り込んだ状態で内部結合が行われている。
【００４８】
さらに、行(20)で示すＳＱＬ文に基づいて行(1)で示されるグルーピング演算を実行した結果は、図１２に示す通りである。この行(1)で示すグルーピング演算は、表結合部１２により生成された図１１に示す内部結合表のうちカテゴリ表の部分において、属性項目「グループ１」で示されるカテゴリ（この例では'クレーム'というカテゴリのみに絞られている）と属性項目「グループ２」で示されるカテゴリ（この例では'異物'というカテゴリのみに絞られている）と属性項目「グループ３」で示される各カテゴリとの異なる組み合わせ毎に、その出現度数をカウントするというものである。
【００４９】
以上詳しく説明したように、本実施形態では、リレーショナルデータベースの元表のテキストデータに含まれる文字列が、TEXT_CLASSIFY関数においてパラメータとして与えられたカテゴリのメンバー文字列の何れかに一致するか否かを解析し、一致したメンバー文字列について、TEXT_CLASSIFY関数において名義尺度のパラメータとして与えられたカテゴリ文字列を取得する。そして、当該取得したカテゴリ文字列を元表に統合するようにしている。また、テキストデータから変換したカテゴリ文字列を元表に統合する際に、TEXT_EXTRACT関数を用いて一時表を生成し、当該一時表と元表とを統合することも可能にしている。
【００５０】
このように構成した本実施形態によれば、テキストデータから変換されるカテゴリ文字列をパラメータによって任意に変えることができる。また、テキストデータをカテゴリ文字列に変換する際の一致判定に用いるカテゴリのメンバー文字列もパラメータによって任意に変えることができる。このため、カテゴリ文字列やカテゴリに属するメンバー文字列を試行錯誤的に変えながら、テキストデータを対話型にて自由自在にカテゴリ化することができる。
【００５１】
また、テキストデータから変換されたカテゴリ文字列がリレーショナルデータベースに統合されるので、当該カテゴリ文字列を属性項目の１つとして含むリレーショナルデータベースに対する分析（上述のグルーピング演算など）のための操作も対話型にて試行錯誤的に行うことができる。これにより、テキストデータの試行錯誤的な分析を簡単かつ迅速に繰り返すことが可能となる。
【００５２】
つまり、本実施形態によれば、定型的な文字項目データ、数値項目データ、日付項目データ、期間項目データ（以下、これらを属性データと呼ぶ）を対象とする従来の非定型ＯＬＡＰ操作の枠組みを崩すことなく、テキストデータを非定型ＯＬＡＰ操作の枠組みに統合し、テキストデータを対象として非定型ＯＬＡＰ操作をシームレスに実行することができる。このとき、テキストデータから変換するカテゴリ文字列や、カテゴリに属するメンバー文字列をパラメータとして任意に変えながら、非定型ＯＬＡＰ操作を試行錯誤的に行うことができる。
【００５３】
例えば、上述の例２のような１次元のカテゴリによる出現度数のレポート、例３のような２次元のカテゴリによる出現度数のレポート、例４のような３次元のカテゴリによる出現度数のレポートの如く、実行時に定義する任意のカテゴリ（名義尺度）の組による分類をリレーショナルデータベース操作の一部として実行することによって、テキストデータを対象に自由自在に非定型ＯＬＡＰ操作を行うことができる。具体的な例は示していないが、属性データとテキストデータから取得したカテゴリ（名義尺度）との組み合わせを対象として自由自在に非定型ＯＬＡＰ操作を行うこともできる。
【００５４】
リレーショナルデータベース操作の一部としてテキストデータのカテゴリ化の機能を備えた本実施形態では、以下のような効果的な応用も可能になる。例えば、非定型ＯＬＡＰ操作を支える非定型集約クエリーにおいて、グルーピング演算の集約キーとしてカテゴリの組と日付項目（例えば、年、年月、年月週、年月日など）とを指定することにより、カテゴリの組毎に出現度数の時系列推移を調べることができる。このとき、日付項目を年、年月、年月週、年月日の如くドリルダウンしていけば、カテゴリの組毎における出現度数の時系列推移を細かく追跡していくことができる。さらに、テキストデータを対象にカテゴリの組を複数定義し、粒度の粗いカテゴリの組から粒度の細かいカテゴリの組へドリルダウンすることによって、時系列項目と共にカテゴリの組毎における出現度数の推移を細かく追跡していくこともできる。
【００５５】
具体的には、昨今話題となった食品偽装問題などの予兆をできるだけ早期に発見したいというケースを考える。この場合、お客様相談センターなどに寄せられるクレームのテキストデータの集合を調査対象として、過去の経験から分かっているリスクの高いクレームのカテゴリを粗い粒度の組から細かい粒度の組へ複数定め、カテゴリの組毎に日々の時系列出現度数の変化をモニタすればよい。例えば、ある日を境に出現度数が急に上がり始めたり下がり始めたりした場合には、何らかの予兆の疑いがある。このとき、上述したカテゴリの組と日付項目による非定型ＯＬＡＰ操作が予兆の発見に威力を発揮する。
【００５６】
なお、上記実施形態では、ＲＤＢ３０の元表に格納されているテキストデータを対象としてカテゴリ化を行う例について説明したが、本発明はこれに限定されない。例えば、ＲＤＢ３０の元表に格納されたテキストデータに代えて、当該テキストデータから生成されたインデックス情報を対象としてカテゴリ化を行うようにしても良い。インデックス情報は、元表に格納されたテキストデータから生成した全文検索用のインデックスであっても良いし、元表に格納されたテキストデータから自然言語処理の主題抽出処理や係り受け処理などによって生成したカテゴリのインデックスであっても良い。
【００５７】
また、上記実施形態では、テキストデータをカテゴリ化するのにTEXT_CLASSIFY関数を用いる例について説明したが、本発明はこれに限定されない。テキストデータからカテゴリを抽出できるならば、その具体的な方法は問わない。
また、上記実施形態では、テキストデータの非定型ＯＬＡＰ操作の例として４つの例を挙げたが、これ以外の非定型ＯＬＡＰ操作を行うことができることは言うまでもない。
【００５８】
その他、上記実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００５９】
１  パラメータ設定部
２  カテゴリ化部
３  統合部
１０  テキストデータ処理装置
１１  一時表生成部
１２  表結合部
３０  リレーショナルデータベース
【図１】
2010250480.tif 000003
【図２】
2010250480.tif 000004
【図３】
2010250480.tif 000005
【図４】
2010250480.tif 000006
【図５】
2010250480.tif 000007
【図６】
2010250480.tif 000008
【図７】
2010250480.tif 000009
【図８】
2010250480.tif 000010
【図９】
2010250480.tif 000011
【図１０】
2010250480.tif 000012
【図１１】
2010250480.tif 000013
【図１２】
2010250480.tif 000014