(57)【特許請求の範囲】
【請求項１】
テキストデータを言語要素の単位に分割する分割部と、 
前記テキストデータに含まれる言語要素列を抽出し、前記言語要素列の間の包含関係によるリンク情報を生成するとともに、前記言語要素列の統計的独立性を表す統計値を算出する分析部と、 
前記分析部によって抽出された前記言語要素列における言語要素の連鎖数と、前記分析部によって算出された前記言語要素列の前記統計値と、前記言語要素列に関する前記リンク情報が、所定の条件を満たすような言語要素列を抽出して出力する抽出部と、 
を具備することを特徴とするフレーズ検出装置。 
【請求項２】
前記抽出部は、ある連鎖数に対して前記統計値が所定の第１閾値以上であるような、前記連鎖数と前記統計値との組合せを有するキーフレーズ領域に属する前記言語要素列を、抽出して出力する、ことを特徴とする請求項１に記載のフレーズ検出装置。
【請求項３】
コンピューターを、 
テキストデータを言語要素の単位に分割する分割部と、 
前記テキストデータに含まれる言語要素列を抽出し、前記言語要素列の間の包含関係によるリンク情報を生成するとともに、前記言語要素列の統計的独立性を表す統計値を算出する分析部と、 
前記分析部によって抽出された前記言語要素列における言語要素の連鎖数と、前記分析部によって算出された前記言語要素列の前記統計値と、前記言語要素列に関する前記リンク情報が、所定の条件を満たすような言語要素列を抽出して出力する抽出部と、 
を具備するフレーズ検出装置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、与えられた文からキーフレーズ等を検出するフレーズ検出装置およびそのプログラムに関する。
【背景技術】
【０００２】
ＳＮＳ（ソーシャル・ネットワーク・システム）等における発言を蓄積して分析することにより、商品やサービスや放送番組等に関する評判の情報を獲得することができる。キーとなる言い回し（本明細書では、以下、キーフレーズと呼ぶ）を見つけることは、評判の情報を分析する場合に重要であり、その自動検出技術に対するニーズは高い。従来は、基本的に、蓄積された発言をひとつひとつ人間が読みながら、キーフレーズを見つける作業が行なわれていた。自動処理技術を導入するにしても、高頻度で出現する単語（本明細書では、以下、キーワードと呼ぶ）をまず検出し、全文検索によりそれらを含む発言に絞り込むところまでを自動で処理し、その結果の中から、キーフレーズを人手で抜き出す作業が行われてきた。
【０００３】
また、テキストから所定のフレーズを検出する技術として、特許文献１には、論文等のテキスト間で類似度を計算することにより、文の引用の有無を判定するための引用判定支援装置の構成が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２０５６７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術による方法を用いる場合、人間の手作業の労力は多大であった。
また、頻出単語を手がかりとするために検索技術を用いる場合にも、１〜２語程度の単語表現をキーとして用いるしかなく、そのような表現は文中におけるより長い言い回しの一部にすぎない。そのため、頻出単語を手がかりとして用いた場合にも、必ずしも意味が正確に掴めないという問題があった。さらに、同一の単語に異なる単語が組み合わされている場合、同一の言い回しとしてまとめるべきか、別の言い回しとして区別するべきかを考えなければならなかった。
【０００６】
本発明は、上記の課題認識に基づいて行なわれたものであり、単語の出現頻度や２〜３語程度の短い表現の出現頻度によらず、テキストからより長いキーフレーズ（表現）を検出することのできるフレーズ検出装置およびそのプログラムを提供するものである。
【課題を解決するための手段】
【０００７】
［１］上記の課題を解決するため、本発明の一態様によるフレーズ検出装置は、テキストデータを言語要素の単位に分割する分割部と、前記テキストデータに含まれる言語要素列を抽出し、前記言語要素列の間の包含関係によるリンク情報を生成するとともに、前記言語要素列の統計的独立性を表す統計値を算出する分析部と、前記分析部によって抽出された前記言語要素列における言語要素の連鎖数と、前記分析部によって算出された前記言語要素列の前記統計値と、前記言語要素列に関する前記リンク情報が、所定の条件を満たすような言語要素列を抽出して出力する抽出部と、を具備することを特徴とする。
【０００８】
ここで、言語要素とは、例えば、単語や、文字など、自然言語における所定の単位の表現である。そして、この構成によれば、抽出部は、言語要素列における言語要素の連鎖数と言語要素列の統計値との組合せにより、また、言語要素列に関するリンク情報により、キーフレーズを自動的に抽出する。
【０００９】
［２］また、本発明の一態様は、上記のフレーム検出装置において、前記抽出部は、ある連鎖数に対して前記統計値が所定の第１閾値以上であるような、前記連鎖数と前記統計値との組合せを有するキーフレーズ領域に属する前記言語要素列を、抽出して出力する、ものである。
この構成によれば、抽出部は、連鎖数と統計値との組合せが、所定のキーフレーズ領域に属する言語要素列を、抽出する。
【００１４】
［３］また、本発明の一態様は、コンピューターを、テキストデータを言語要素の単位に分割する分割部と、前記テキストデータに含まれる言語要素列を抽出し、前記言語要素列の間の包含関係によるリンク情報を生成するとともに、前記言語要素列の統計的独立性を表す統計値を算出する分析部と、前記分析部によって抽出された前記言語要素列における言語要素の連鎖数と、前記分析部によって算出された前記言語要素列の前記統計値と、前記言語要素列に関する前記リンク情報が、所定の条件を満たすような言語要素列を抽出して出力する抽出部と、を具備するフレーズ検出装置として機能させるプログラムである。
【発明の効果】
【００１５】
本発明によれば、単語や、２〜３語の単語連鎖ではなく、より長いフレーズの単位で、キーフレーズ（多数出現する表現を長い単位で取り出したもの。多くの人が関心を寄せ、言及しているもの）を自動的に検出できる。
また、ユーザーは、本発明のフレーズ検出装置によって検出されたフレーズのみを見て、意味を理解することができる。つまり、ソーシャルストリーム等において独立性の高いテキストを容易に把握することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施形態によるフレーズ検出装置の機能構成を示すブロック図である。
【図２】同実施形態によるツイート記憶部が記憶する発言データの構成を示す概略図である。
【図３】同実施形態によるグラフ記憶部が記憶する、ｎ−ｇｒａｍのグラフデータの構成要素を示す概略図である。
【図４】同実施形態によるグラフ記憶部が記憶する、ｎ−ｇｒａｍのグラフの一例である。
【図５】同実施形態によるｎ−ｇｒａｍのグラフを、連鎖数の軸とχ２値の軸からなる直交座標系にマッピングして表した概略図である。当該座標平面が、異常値領域とキーフレーズ領域とその他の領域とに分割されている。
【図６】同実施形態により、連鎖数の軸とχ２値の軸からなる直交座標系を表した概略図である。当該座標平面を、図５とは別の方法で異常値領域とキーフレーズ領域とその他の領域とに分割した例を示す。
【図７】同実施形態によるフレーズ検出装置がツイートのデータを分析してｎ−ｇｒａｍのグラフデータに展開する処理の手順を示すフローチャートである。
【図８】同実施形態によるフレーズ検出装置がグラフ記憶部に展開されているｎ−ｇｒａｍのグラフデータを元にキーフレーズノードを抽出する処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１７】
次に、本発明の一実施形態について、図面を参照しながら説明する。
図１は、本実施形態によるフレーズ検出装置の機能構成を示すブロック図である。図示するように、フレーズ検出装置１は、読込部１１と、ツイート記憶部１２と、分割部１３と、グラフ生成部１４（分析部）と、グラフ記憶部１５と、ノード抽出部１６（抽出部）とを含んで構成される。これら各部は、電子回路等を用いて実現される。また、ツイート記憶部１２とグラフ記憶部１５とは、磁気ハードディスク装置や半導体メモリ装置を用いて実現される。
【００１８】
読込部１１は、テキストデータを読み込み、ツイート記憶部１２に記憶させる。ここでは、このテキストデータは、ソーシャル・ネットワーク・システムにおける発言のテキストであり、発言単位で識別されるものである。テキストデータの一例は、ツイッター（Twitter）におけるツイート（tweet，発言単位）のテキストである。ツイートは、ユーザーによる発言の一単位である。ツイートの長さに関して本来的には制約はないが、システムによっては１ツイートの長さ（文字数）が制限されている場合もある。
【００１９】
なお、ソーシャル・ネットワーク・システムの典型例においては、そのユーザーが、ツイート単位でテキスト情報を発信する。ユーザーは、他のユーザーから発信されるツイートであって、所定の関係にあるツイートのみを、ソーシャルストリーム上で閲覧する。ここで、所定の関係とは、例えば、フォロー／被フォロー、フレンド（友達）、共通のクラスター（興味、話題、リスト等）への所属等である。
【００２０】
ツイート記憶部１２は、読込部１１によって読み込まれたテキストデータを、発言単位で記憶する。ツイート記憶部１２が記憶するデータの構成については、後述する。
【００２１】
分割部１３は、読込部１１によって読み込まれたテキストデータ（文）を、単語（言語要素）の単位に分割する。
【００２２】
グラフ生成部１４は、分割部１３によって分割された結果に基づき、テキストデータに含まれる単語のｎ−ｇｒａｍ（エヌグラム、言語要素列）を抽出し、複数の単語ｎ−ｇｒａｍの間の包含関係（ある単語列が、別の単語列に包含されるか否か）によるリンク情報を生成するとともに、各々の単語ｎ−ｇｒａｍの統計的独立性を表すχ２値（統計値）を算出する。また、グラフ生成部１４は、ｎ−ｇｒａｍを抽出する際に、そのｎ−ｇｒａｍを含む前記発言単位の識別情報（ツイートＩＤ）のリストを生成する。なお、グラフ生成部１４がリンク情報を生成する際、単語の連鎖数（単語数）の差が１である（つまり１段階差の）ｎ−ｇｒａｍ間のリンク情報のみを直接生成する。それらのリンク情報を順にたどることにより、単語の連鎖数の差が２以上である（つまり多段階差の）ｎ−ｇｒａｍのリンクも把握できる。ある単語ｎ−ｇｒａｍをノードと捉えたとき、グラフ生成部１４が生成するリンク情報によって、グラフ構造のデータが形成される。ここではこれを便宜上、グラフデータと呼ぶ。グラフ生成部１４は、グラフデータをグラフ記憶部１５に書き込む。
【００２３】
グラフ記憶部１５は、グラフ生成部１４によって生成されたグラフデータを記憶する。グラフ記憶部１５が記憶するデータの詳細な構成については、後述する。
【００２４】
ノード抽出部１６は、グラフ生成部１４によって抽出された単語ｎ−ｇｒａｍの連鎖数と、グラフ生成部１４によって算出された単語ｎ−ｇｒａｍのχ２値と、単語ｎ−ｇｒａｍに関するリンク情報が、所定の条件を満たすようなノード（ｎ−ｇｒａｍ）を抽出して出力する。
【００２５】
具体的には、ノード抽出部１６は、ある連鎖数に対してχ２値が所定の第１閾値以上であるような、連鎖数とχ２値との組合せを有するキーフレーズ領域に属するｎ−ｇｒａｍを、抽出して出力する。これにより、ノード抽出部１６は、有意に出現頻度の高い（独立性が低いと検定される）フレーズを検出して出力できる。但し、ノード抽出部１６は、連鎖数に対してχ２値が所定の第２閾値以上であるような、連鎖数とχ２値との組合せを有する異常値領域に属するｎ−ｇｒａｍを、除外して抽出する。これにより、出現頻度の高すぎるフレーズを検出しないように除外することができる。そのような異常値領域に属するフレーズは、他のツイートからコピー・アンド・ペースト（いわゆる「コピペ」）されたものである可能性が高いからである。
【００２６】
図２は、ツイート記憶部１２が記憶するデータの構成を示す概略図である。図示するように、ツイート記憶部１２は、表形式のデータを記憶するものである。ツイート記憶部１２は、ツイートを識別するためのツイートＩＤに関連付けて、発言者およびツイート内容を記憶する。図示する例では、ツイート記憶部１２は、ツイートＩＤ「１２３４５６７８」に関連付けて、発言者「ａｂｃ＿２０１１」およびツイート内容「今日はいい天気です」というデータを記憶している。
【００２７】
図３は、グラフ記憶部１５が記憶するデータの構成要素を示す概略図である。グラフ記憶部１５は、ノードと有向リンク（リンク情報）で構成されるグラフのデータを記憶する。ここで、各ノードは、単語のｎ−ｇｒａｍに対応する。また、各有向リンクは、ノード間におけるｎ−ｇｒａｍの包含関係を表すものであり、具体的には例えばリンク先のノードを指し示すポインタ情報等で実現される。
【００２８】
図示するように、ノードは、連鎖数と、文字列と、χ２（カイ２乗）値と、ツイートＩＤリスト（発言単位の識別情報のリスト）へのリンク情報とを格納する。図示する例では、連鎖数は、当該ｎ−ｇｒａｍにおける単語の連鎖数である。本例では、連鎖数は４である。また、文字列は、当該ｎ−ｇｒａｍが表す文字列である。この文字列内においては、単語の区切りをハイフン「−」で表している。つまり「今日−は−いい−天気」という文字列は、「今日」、「は」、「いい」、「天気」という４つの単語の連鎖で構成されている。χ２値は、当該ｎ−ｇｒａｍの統計的性質を表す数値であり、その詳細については後述する。また、ツイートＩＤリストへのリンク情報は、当該ｎ−ｇｒａｍが表す文字列「今日はいい天気」を含むツイートのツイートＩＤリストの所在を示す情報である。図示する例では、「１２３４５６７８」、「２３４５６７８９」、「４４５５４５４５」、「６７８９６７８９」、「７７８９６７８９」の５個のＩＤが、該当するツイートＩＤである。ツイートＩＤリストは、同一のＩＤを複数含むことがないように、ユニークリストとして実装される。
【００２９】
子ｎ−ｇｒａｍへのリンクは、当該ｎ−ｇｒａｍの文字列を含む、一段階下位の子のｎ−ｇｒａｍへのリンク情報である。ここで、直接リンクされている下位のｎ−ｇｒａｍは、文字列「今日−は−いい」（単語の連鎖数３）を表すｎ−ｇｒａｍと、文字列「は−いい−天気」（単語の連鎖数３）を表すｎ−ｇｒａｍの２つである。例えば、文字列「今日−は」（単語の連鎖数２）や「いい−天気」（単語の連鎖数２）や「天気」（単語の連鎖数１）なども、文字列[今日−は−いい−天気]に含まれるが、これらの文字列のｎ−ｇｒａｍへも、複数段階のリンクを経て到達可能である。逆に、親ｎ−ｇｒａｍからのリンクは、文字列「今日−は−いい−天気」を含む、連鎖数が５のｎ−ｇｒａｍに対応するノードからのリンクである。
【００３０】
図４は、グラフ記憶部１５が記憶するｎ−ｇｒａｍのグラフの一例である。図示するデータ例には、ｎ−ｇｒａｍに相当する１５個のノードと、ノード間の親子関係を表す２０本の有向リンクが含まれている。このグラフの元となる例文は「今日はいい天気です」というツイートである。同図の最も右側には、連鎖数５の５−ｇｒａｍのノードが存在し、その文字列は「今日−は−いい−天気−です」である。その子ノードとして２つのノードが存在し、それらの連鎖数はいずれも４であり、文字列はそれぞれ「今日−は−いい−天気」および「は−いい−天気−です」である。以下、同様に、３個の３−ｇｒａｍ（トライグラム）のノード、４個の２−ｇｒａｍ（バイグラム）のノード、５個の１−ｇｒａｍ（ユニグラム）のノードが存在し、親子関係があるノード間が有向リンクで結ばれている。
【００３１】
図５は、前述のグラフ記憶部１５が記憶するｎ−ｇｒａｍのグラフを、連鎖数の軸とχ２値の軸からなる直交座標系にマッピングして表したものである。同図において、横軸は連鎖数であり、縦軸はχ２値である。また、この座標平面における第１象限は、異常値領域（コピー・アンド・ペースト領域とも呼ぶ）と、キーフレーズ領域と、その他の領域とに分割されている。同図において、境界線４２は、異常値領域とキーフレーズ領域を分割する。また、境界線４１は、キーフレーズ領域とその他の領域とを分割する。ここで示す例では、異常値領域は、連鎖数ｎがｎ２以上で且つχ２値がｋ２（第２閾値）以上の領域である。また、キーフレーズ領域は、連鎖数ｎがｎ１以上で且つχ２値がｋ１（第１閾値）以上の領域（慣用句らしい表現が含まれる領域）であって尚且つ異常値領域ではない領域である。言い換えれば、キーフレーズ領域は、（連鎖数ｎがｎ１以上且つｎ２以下）または（（χ２値がｋ１以上且つｋ２以下）、であるような領域である。つまり、境界線４１は、ｎ＞ｎ１の領域において第１閾値を示す。また、境界線４２は、ｎ＞ｎ２の領域において第２閾値を示す。なお、この座標軸上において、本来は各ｎ−ｇｒａｍのノードは面積を持たないが、ここでは便宜的に楕円形でノードを表している。
【００３２】
図５内では、ｎ−ｇｒａｍの複数のノードを模式的に示している。これらのノードのうち、斜線でハッチングしたノード５１、５２および５３は、キーフレーズとして抽出されるノードである。また、その他のノードは、キーフレーズには該当しないノードである。キーフレーズとして抽出されるノードは、キーフレーズ領域に属し、且つ後述する所定の条件を満たすノードである。
【００３３】
なお、パラメーターの一例は、次の通りである。図５において、ｎ１＝５とし、ｎ２＝１０とする。また、σを標準偏差としたとき、ｋ１を２σに相当するχ２値とし、ｋ２を４σに相当するχ２値とする。
【００３４】
図６は、図５と同様に連鎖数の軸とχ２値の軸からなる直交座標平面を示すものであり、異常値領域とキーフレーズ領域とその他の領域とを分割する境界線が図５のそれらと異なる例である。図６において、境界線４４は、異常値領域とキーフレーズ領域を分割する。また、境界線４３は、キーフレーズ領域とその他の領域とを分割する。ここで示す例では、異常値領域は、連鎖数ｎがｎ４以上で、且つχ２値が関数ｆ２（ｎ）の値以上の領域である。つまり、関数ｆ２（ｎ）は第２閾値を与える。また、キーフレーズ領域は、連鎖数ｎがｎ３以上で、且つχ２値が関数ｆ１（ｎ）の値以上の領域であって尚且つ異常値領域ではない領域である。つまり、関数ｆ１（ｎ）は第１閾値を与える。ここで、関数ｆ２（ｎ）は、ｎ≧ｎ４の領域で定義される単調減少関数である。また、関数ｆ１（ｎ）は、ｎ≧ｎ３の領域で定義される単調減少関数である。一例として、ｆ２（ｎ）＝α２／ｎ  （但し、ｎ≧ｎ４），  ｆ１（ｎ）＝α１／ｎ  （但し、ｎ≧ｎ３）という関数を用いることができる。なお、α１およびα２は、それぞれ適宜定められる定数である。
【００３５】
図５および図６のそれぞれにおける異常値領域およびキーフレーズ領域の設定は、次の（１）および（２）の条件を満足させる。即ち、（１）連鎖数ｎ＝ｎ０においてχ２値がａである位置が異常値領域であるならば、ｎ≧ｎ０であって且つχ２値がａである位置もまた異常値領域である。また、連鎖数ｎ＝ｎ０においてχ２値がａである位置が異常値領域であるならば、ｎ＝ｎ０であって且つχ２値がａ以上である位置もまた異常値領域である。（２）連鎖数ｎ＝ｎ０においてχ２値がａである位置がキーフレーズ領域あるいは異常値領域のいずれかであるならば、ｎ≧ｎ０であって且つχ２値がａである位置もまたキーフレーズ領域あるいは異常値領域のいずれかである。また、連鎖数ｎ＝ｎ０においてχ２値がａである位置がキーフレーズ領域あるいは異常値領域のいずれかであるならば、ｎ＝ｎ０であって且つχ２値がａ以上である位置もまたキーフレーズ領域あるいは異常値領域のいずれかである。ここで述べたように、フレーズ検出装置１は、異常値領域およびキーフレーズ領域を設定する。
【００３６】
なお、異常値領域に属するｎ−ｇｒａｍノードは、異常に高頻度なｎ−ｇｒａｍを表す。このような高頻度なｎ−ｇｒａｍは、あるツイートがコピー・アンド・ペーストされて別のツイートとして発信される場合に生じる。ＳＮＳ等においては、しばしば、所定時間内にこのような高頻度なｎ−ｇｒａｍが発生する。フレーズ検出装置１は、異常値領域に属するｎ−ｇｒａｍを、コピー・アンド・ペーストによるツイートとして検出することができる。また、キーフレーズ領域に属するｎ−ｇｒａｍノードは、異常とは言えないまでも、有意に高い頻度で出現するｎ−ｇｒａｍを表している。フレーズ検出装置１は、キーフレーズ領域に属するｎ−ｇｒａｍを、ＳＮＳ等における高頻度なキーフレーズとして検出する。
【００３７】
図７は、フレーズ検出装置１がツイートのデータを読み込んでｎ−ｇｒａｍのグラフ構造への展開を行い、グラフデータをグラフ記憶部１５に書き込むまでの処理の手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
【００３８】
まずステップＳ１において、読込部１１が、ツイートのデータを外部から読み込むとともに、読み込んだツイートをツイート記憶部１２に登録する。
次にステップＳ２において、分割部１３が、ツイート記憶部１２に登録されている各ツイートの文を形態素解析する。形態素解析の処理自体は、既存の技術を用いて行なうことができる。形態素解析の結果、各文は、単語（形態素）の列に分解される。例えば、分割部１３は、文「今日はいい天気です」を、「今日−は−いい−天気−です」という単語列（連鎖数は、５）に分解する。
【００３９】
次にステップＳ３において、グラフ生成部１４は、分割部１３によって形態素解析された後の各ツイートを、ｎ−ｇｒａｍのグラフ構造に展開する処理を行う。グラフ構造への展開の処理は次の通りである。まず、グラフ生成部１４は、単語の列に分解されているツイートを取り出し、そのツイート全体に相当する連鎖数のｎ−ｇｒａｍノードを生成し、グラフ記憶部１５に書き込む。例えば、「今日−は−いい−天気−です」という単語列の連鎖数は５であるので、グラフ生成部１４は、まずこれに対応する５−ｇｒａｍのノードを生成する。そして、次に、グラフ生成部１４は、その部分単語列である２種類の４−ｇｒａｍのノードを生成する。即ち、それらは、「今日−は−いい−天気」と「は−いい−天気−です」の２つである。さらに、３−ｇｒａｍ、２−ｇｒａｍ、１−ｇｒａｍの順に、部分単語列のノードを生成していく（図４も参照）。このとき、展開するノードのツイートＩＤリストには、当該ツイートのＩＤを書き込む（図３も参照）。
【００４０】
さらに、グラフ生成部１４は、次のツイートについても同様の処理を行い、これを繰り返すことにより、ツイート記憶部１２に登録されているすべてのツイートについて、ｎ−ｇｒａｍのグラフ構造への展開を行なう。なお、グラフ生成部１４がグラフ構造への展開を行なう際に、既に処理したツイートと重複するｎ−ｇｒａｍを展開する場合には、新たなノードを生成するのではなく、当該ｎ−ｇｒａｍ用の既存のノードを利用する。つまり、グラフ生成部１４は、既存のノードのツイートＩＤリストにツイートのＩＤを追記する。
【００４１】
次にステップＳ４において、グラフ生成部１４は、グラフ記憶部１５に展開されたグラフの各ノードのχ２値を算出する。なお、χ２値を算出するために、入力データにおける各ｎ−ｇｒａｍの出現回数を用いるが、この出現回数は、グラフ生成時に予めカウントしておいても良いし、χ２値の計算の時点でカウントするようにしても良い。連鎖数Ｎのｎ−ｇｒａｍ「Ａ１−Ａ２−・・・・・・−ＡＮ」（ここで、Ａ１，Ａ２，・・・，ＡＮの各々は単語）のχ２値を算出する方法は、次の通りである。
このｎ−ｇｒａｍの出現確率ｐ（Ａ１−Ａ２−・・・・・・−ＡＮ）は、下の式（１）によって算出される。
【００４２】
【数１】
0005879150.tif 000002
【００４３】
ここで、ＭＮは、対象データに含まれる連鎖数Ｎのｎ−ｇｒａｍ全体の集合である。また、ｕは、集合ＭＮに属するｎ−ｇｒａｍである。また、ｄ（ｕ）は、対象データ全体におけるｕの出現回数である。また、ｄ（Ａ１−Ａ２−・・・・・・−ＡＮ）は、対象データ全体におけるｎ−ｇｒａｍ「Ａ１−Ａ２−・・・・・・−ＡＮ」の出現回数である。
【００４４】
また、単語Ａｉ（１≦ｉ≦Ｎ）は、各々が１−ｇｒａｍであり、これら各々の１−ｇｒａｍの出現確率は、下の式（２）によって算出される。
【００４５】
【数２】
0005879150.tif 000003
【００４６】
ここで、Ｍ１は、対象データに含まれる全ての１−ｇｒａｍの集合である。また、ｕは、集合Ｍ１に属するｎ−ｇｒａｍ（つまり、１−ｇｒａｍ）である。また、ｄ（ｕ）は、対象データ全体におけるｕの出現回数である。また、ｄ（Ａｉ）は、対象データ全体における単語（１−ｇｒａｍ）Ａｉの出現回数である。つまり、式（２）で計算される値は、単語Ａｉの出現確率を表す。
【００４７】
そして、式（１）および式（２）で算出された値を用いて、ｎ−ｇｒａｍ「Ａ１−Ａ２−・・・・・・−ＡＮ」のχ２値は、下の式（３）によって算出される。
【００４８】
【数３】
0005879150.tif 000004
【００４９】
そして、グラフ生成部１４は、計算されたχ２値を、グラフ記憶部１５内の各ノードに書き込む。このようにして、グラフ生成部１４によってｎ−ｇｒａｍのグラフのデータが生成される。つまり、独立性検定に用いるχ２値を算出できる。χ２値は、ｎ−ｇｒａｍ確率と、そのｎ−ｇｒａｍをｎ個の１−ｇｒａｍに分解したときの１−ｇｒａｍ（単語）確率とから算出される。これは、連続するｎ単語が、1単語ずつばらばらに出現する時に比べて有意に大きいかどうか検定するために用いられる値である。つまり、式（３）で計算されるχ２値は、そのｎ−ｇｒａｍに含まれる個々の単語の出現頻度を考慮に入れながら、ｎ−ｇｒａｍそのものの出現頻度を測る指標となり得る値である。
【００５０】
図８は、フレーズ検出装置１がグラフ記憶部１５のデータを元にキーフレーズノードを抽出する処理の手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
【００５１】
まずステップＳ１１において、ノード抽出部１６は、グラフ記憶部１５に記憶されているノードのうち、キーフレーズ領域に含まれるノードであって、且つ未処理のノードがまだ残っているか否かを判定する。キーフレーズ領域に含まれるか否かは、図５および図６にも示したように、ノードの連鎖数およびχ２値の組合せにより判定できる。未処理のノードがキーフレーズ領域に残っている場合（ステップＳ１１：ＹＥＳ）には次のステップＳ１２に進み、残っていない場合（ステップＳ１１：ＮＯ）にはこのフローチャート全体の処理を終了する。
【００５２】
ステップＳ１２からＳ１６においては、未処理で、且つキーフレーズ領域に残っている、ひとつのノードを処理対象とする。ステップＳ１２において、ノード抽出部１６は、処理対象のノードが親を持つか否かを判断する。ここで、あるノードが親を持つということは、そのノードに流入する他のノードからのリンクが存在するということである。言い換えれば、あるノードが親を持つということは、そのノードのｎ−ｇｒａｍに対応する文字列を包含する、連鎖数が１つ多いｎ−ｇｒａｍの文字列が、読み込んだ入力データに含まれていたということである。親を持つ場合（ステップＳ１２：ＹＥＳ）には、次の条件を判定するためにステップＳ１３に進む。親を持たない場合（ステップＳ１２：ＮＯ）には、当該ノードはキーフレーズに対応するものであり、ステップＳ１６に進む。
【００５３】
ステップＳ１３に進んだ場合には、ノード抽出部１６は、処理対象のノードが、キーフレーズ領域または異常値領域に先祖を持つか否かを判定する。先祖とは、処理対象のノードのｎ−ｇｒａｍを包含する、より連鎖数の多いｎ−ｇｒａｍに対応するノードである。言い換えれば、本ステップでは、ノード抽出部１６は、処理対象のノードが、キーフレーズ領域または異常値領域に存在するｎ−ｇｒａｍの部分列に相当するか否かを判定する。先祖を持つ場合（ステップＳ１３：ＹＥＳ）には、次の条件を判定するためにステップＳ１４に進む。先祖を持たない場合（ステップＳ１３：ＮＯ）には、当該ノードはキーフレーズに対応するものであり、ステップＳ１６に進む。
【００５４】
ステップＳ１４に進んだ場合には、ノード抽出部１６は、処理対象のノードに関してツイートの流入があるか否かを判定する。ステップＳ１２において処理対象のノードは親ノードを有することを既に判定済みであるので、一般に、処理対象のノードは、単数または複数の親ノード（直接の親）を有する。ここで、異なるツイートの流入があるか否かは、次に述べる条件で判定可能である。即ち、各々の親ノードが有するツイートリストのうち、要素数が最多であるリストを、要素数最多リストと呼ぶ。要素数最多のリストが複数ある場合には、それらのうちの任意の一つを要素数最多リストとする。そして、要素数最多リストの要素数と、処理対象のノードの要素数が同じである場合には、異なるツイートの流入はないと言える。逆に、要素数最多リストの要素数が、処理対象のノードの要素数よりも少ない場合には、異なるツイートの流入があると言える。なお、この判定基準によれば、そもそも親が１ノードしかない場合には、異なるツイートの流入はない。異なる（新たな）ツイートの流入がある場合（ステップＳ１４：ＹＥＳ）には、当該ノードはキーフレーズに対応するものであり、ステップＳ１６に進む。異なるツイートの流入がない場合（ステップＳ１４：ＮＯ）には、ステップＳ１５に進む。
【００５５】
なお、ステップＳ１４の処理において、異なるツイートの判定条件を要素数の比較で処理できたのは、図３に示したデータにおいて、ツイートＩＤのユニークリストを保持するようにしたためである。このデータ構造は、処理の効率化のためであり、本特許の基本となる考えは、集合の包含関係の判定である。
【００５６】
ステップＳ１５に進んだ場合には、処理対象のノードはキーフレーズに該当するものではないと、ノード抽出部１６は認識する。そして、ステップＳ１１の処理に戻る。
【００５７】
ステップＳ１６に進んだ場合には、ノード抽出部１６は、処理対象のノードをキーフレーズに該当するものとして検出する。そして、ステップＳ１１の処理に戻る。
【００５８】
以上の処理をまとめると、ノード抽出部１６がキーフレーズとして抽出するのは、キーフレーズ領域に存在して、且つ、次の（ａ）〜（ｃ）のいずれかの条件を満たす単語列である。（ａ）親を持たない（つまり、そのｎ−ｇｒａｍを包含する、より連鎖数の多いｎ−ｇｒａｍがグラフ内に存在しない）。（ｂ）親が存在するにしても、先祖のいずれもが、キーフレーズ領域または異常値領域のいずれにも属さない。（ｃ）異なるツイートからの流入がある（つまり、要素数最多リストに含まれないツイートＩＤが、いずれかの親のツイートリストに含まれる）。ノード抽出部１６は、上記の処理によって抽出されたノードを、キーフレーズとして、またはキーフレーズ候補として、外部に出力する。
【００５９】
これを言い換えれば、次の通りである。ノード抽出部１６は、ノード間のリンク情報に基づき、
（ａ）当該ｎ−ｇｒａｍを包含し、且つ当該ｎ−ｇｒａｍよりも連鎖数の大きい他のｎ−ｇｒａｍが存在しない、または、
（ｂ）当該ｎ−ｇｒａｍを包含し且つ当該ｎ−ｇｒａｍよりも連鎖数の大きい他のｎ−ｇｒａｍについての連鎖数およびχ２値の組合せが、いずれの前記の「他のｎ−ｇｒａｍ」に関しても、キーフレーズ領域に属しない、
のいずれかの条件を満たす場合に限り、そのｎ−ｇｒａｍを抽出して出力する、これにより、包含関係にある単語列を重複して抽出してしまうことを防ぐことができる。
【００６０】
また、ノード抽出部１６は、ノード間のリンク情報に基づき、前記（ａ）または前記（ｂ）に加えて、（ｃ）当該ｎ−ｇｒａｍを包含し且つ当該ｎ−ｇｒａｍの連鎖数よりも連鎖数が１だけ大きいｎ−ｇｒａｍのそれぞれ対応するツイートＩＤリストのうち、要素数が最多のツイートＩＤリストには含まれないツイートＩＤが、他のツイートＩＤリストに含まれている、という条件を満たす場合にも当該ｎ−ｇｒａｍを抽出して出力する。この（ｃ）の条件は、当該ｎ−ｇｒａｍに、異なるツイートからの流入があることを判定するための条件である。（ｃ）の条件を用いることにより、包含関係にある単語列（ｎ−ｇｒａｍ）を除外しすぎてしまうことを防ぐことができる。
【００６１】
なお、上述した実施形態におけるフレーズ検出装置の各部の機能をコンピューターで実現するようにしても良い。その場合、この制御機能を実現するためのプログラムをコンピューター読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピューターシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピューターシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバーやクライアントとなるコンピューターシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【００６２】
本実施形態によるフレーズ検出装置を用いることにより、テレビ番組を見ながら（ツイッターなどの）ソーシャルストリームを利用して情報発信をする人たちの声を分析したい時に役立つ。特に、コピー・アンド・ペーストというオリジナリティーの少ない情報を除外しながら、多数出現する発言を検出したい時に役立つ。
【００６３】
以上、一実施形態を説明したが、本発明はさらに次のような変形例でも実施することが可能である。なお、下で説明する複数の変形例の構成を組み合わせても良い。
【００６４】
（変形例１）この変形例では、ノード抽出部１６が常套句リストを予め記憶しておく。この常套句リストは、慣用句を予め列挙することによって構成されたデータである。そして、ノード抽出部１６は、図８に示した手順によってキーフレーズとして検出された単語列のうち、この常套句リストに含まれる表現を除外して、キーフレーズを出力する。これにより、常套的な慣用句がキーフレーズとして検出されるのを防ぐことができる。
【００６５】
（変形例２）この変形例では、ノード抽出部１６は、異常値領域に属するノードをも抽出し、出力する。また、異常値領域に属するノードの各々に対して、図８に示したステップＳ１２からＳ１４までの判定を行なって、重複する単語列を除外するようにしても良い。この変形例では、フレーズ検出装置１は、ソーシャルストリーム等においてコピー・アンド・ペーストされたフレーズを検出することもできる。
【００６６】
（変形例３）この変形例では、分割部１３は、読込部１１によって読み込まれたツイートを、単語単位ではなく文字（言語要素）単位に分割する。文字単位に分割する場合には、分割部１３は、形態素解析の処理を行なう必要がない。そして、グラフ生成部１４は、単語のｎ−ｇｒａｍではなく文字のｎ−ｇｒａｍによって、グラフのデータを展開する。そして、ノード抽出部１６は、文字のｎ−ｇｒａｍを用いてキーワードフレーズを抽出し、出力する。
【００６７】
（変形例４）この変形例では、実装するメモリ量等に応じて、取り扱うｎ−ｇｒａｍの連鎖数に上限を設ける。例えば、連鎖数の上限値を３０としたとき、グラフ生成部１４は、この上限値を超える連鎖数のｎ−ｇｒａｍのノードを生成しない。
【００６８】
（変形例５）この変形例では、ノード抽出部１６は、検出されたキーフレーズとともに、そのキーフレーズを含むツイートＩＤのリストを出力する。また、さらに、ノード抽出部１６が、それらのツイートＩＤの各々に対応するＵＲＬ（ユニフォーム・リソース・ロケーター）を出力するようにしても良い。
【００６９】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【産業上の利用可能性】
【００７０】
本発明は、テキスト処理に利用可能である。特に、ウェブページや、ブログ（web log）や、ＳＮＳサイトなどに投稿されるテキストを効率よく自動解析するために利用可能である。
【符号の説明】
【００７１】
１  フレーズ検出装置
１１  読込部
１２  ツイート記憶部
１３  分割部
１４  グラフ生成部（分析部）
１５  グラフ記憶部
１６  ノード抽出部（抽出部）
【図１】
0005879150.tif 000005
【図２】
0005879150.tif 000006
【図３】
0005879150.tif 000007
【図４】
0005879150.tif 000008
【図５】
0005879150.tif 000009
【図６】
0005879150.tif 000010
【図７】
0005879150.tif 000011
【図８】
0005879150.tif 000012