(57)【要約】【課題】プログラムの機能を把握し易くすること。【解決手段】文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアリスト１１１から、各々の単語のＴｆ−Ｉｄｆに基づいて、各々の単語から少なくとも２つの単語を選択する。たとえば、文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアが高い、単語“ｊｄｂｃ”と単語“ｓｙｍｄａｔａｂａｓｅ”を選択する。そして、文字列抽出装置１００は、クラスの名称における、少なくとも２つの単語の出現順序を示す情報を生成する。たとえば、文字列抽出装置１００は、選択した少なくとも２つの単語のクラスの名称における出現順序を示す情報として、“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ”を生成する。【選択図】図１
2014146076.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択し、
選択した前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行することを特徴とする文字列抽出方法。
【請求項２】
前記情報は、選択した前記少なくとも２つの文字列を、前記命令の名称における前記少なくとも２つの文字列の出現順序に従って結合した文字列であることを特徴とする請求項１に記載の文字列抽出方法。
【請求項３】
前記コンピュータは、
選択した前記少なくとも２つの文字列を前記命令の名称における前記少なくとも２つの文字列の出現順序に従って結合した第１の文字列が前記命令の名称の一部に一致するか否かを判断する、処理を実行し、
前記生成する処理は、
前記第１の文字列が前記命令の名称の一部に一致しないと判断した場合、前記情報を生成しない、
ことを特徴とする請求項１または２に記載の文字列抽出方法。
【請求項４】
前記選択する処理は、
前記記憶部から、前記各々の文字列から前記各々の文字列のレベルが高い順に少なくとも２つの文字列を選択する、
ことを特徴とする請求項１〜３のいずれか一つに記載の文字列抽出方法。
【請求項５】
前記コンピュータは、
前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から３個以上となる第１の個数の文字列を選択し、
選択した前記第１の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
前記第１の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致しない場合、前記各々の文字列から前記第１の個数より少なく２以上となる第２の個数の文字列を選択し、
選択した前記第２の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
前記第２の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致すると判断した場合、前記第２の個数の文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行する請求項１〜４のいずれか一つに記載の文字列抽出方法。
【請求項６】
前記ソースコードは前記命令の名称を複数含み、
前記記憶部は、前記名称の各々を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶しており、
前記コンピュータは、
前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択し、
選択した前記少なくとも２つの文字列を結合した文字列が前記名称の各々のうちの１以上の名称の一部または全部に一致するか否かを判断し、
前記少なくとも２つの文字列を結合した文字列が前記１以上の名称の一部または全部に一致すると判断した場合、前記各々の文字列のうちの、前記１以上の名称における前記少なくとも２つの文字列を結合した文字列の直前の文字列および直後の文字列のうちの少なくともいずれかの文字列を前記１以上の名称に対応して特定し、
前記１以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であるか否かを判断し、
前記１以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であると判断した場合、前記１以上の名称における前記少なくとも２つの文字列および前記いずれかの文字列の出現順序を示す情報を生成する、
処理を実行することを特徴とする請求項１〜５のいずれか一つに記載の文字列抽出方法。
【請求項７】
プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択する選択部と、
前記選択部によって選択された前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する生成部と、
を有することを特徴とする文字列抽出装置。
【請求項８】
コンピュータに、
プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択し、
選択した前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行させることを特徴とする文字列抽出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列抽出方法、文字列抽出装置、および文字列抽出プログラムに関する。
【背景技術】
【０００２】
従来、データベースから文字列を検索する技術がある。関連する先行技術として、たとえば、検索文字列を単語に分割し、分割された単語と同一の単語を構成要素に含む複合語がデータベースに格納された文章に存在する場合、複合語を検索文字列の類義語としてデータベースから検索するものがある。また、文章をｎ個の単語で切り出したｎ−ｇｒａｍ内の各単語の対象文書中の出現頻度と、ｎ−ｇｒａｍ自体の出現頻度とを用いてｎ−ｇｒａｍの共起度を計算する技術がある。さらに、複数の候補を挙げた原文上の単語に対して、複数の候補の中から最適な候補を選定して、翻訳文を生成する技術がある。さらに、漢字表記と仮名表記のような２種類以上の異なる表記の文字列の組に対し、単語同時確率を与える言語モデルおよび文字混同確率を与える文字認識装置モデルを用いて単語列候補を抽出し、単語列候補の中から最も確率が高い単語列を選ぶ技術がある。（たとえば、下記特許文献１〜４を参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−３１９８８４号公報
【特許文献２】特開平８−１６１３４０号公報
【特許文献３】特開平５−１９７７５３号公報
【特許文献４】特開２００３−３３１２１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述した従来技術をプログラムのソースコードに応用することも考えられる。しかしながら、ソースコードにおける出現頻度の高い単語を抽出することによってプログラムの機能を把握しようとしても、抽出した単語のみでは、プログラムの機能を把握することが困難である。
【０００５】
１つの側面では、本発明は、プログラムの機能を把握し易くすることを図る文字列抽出方法、文字列抽出装置、および文字列抽出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、プログラムのソースコードに含まれ、ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、各々の文字列がプログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、各々の文字列のレベルに基づいて、各々の文字列から少なくとも２つの文字列を選択し、選択した少なくとも２つの文字列の命令の名称における出現順序を示す情報を生成する文字列抽出方法、文字列抽出装置、および文字列抽出プログラムが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、プログラムの機能を把握し易くすることを図ることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施の形態にかかる文字列抽出装置の動作例を示す説明図である。
【図２】図２は、文字列抽出装置のハードウェア構成例を示すブロック図である。
【図３】図３は、文字列抽出装置の機能例を示すブロック図である。
【図４】図４は、クラスタに含まれるクラス一覧の例を示す説明図である。
【図５】図５は、完全修飾名を単語に分割した例を示す説明図である。
【図６】図６は、ｎ−ｇｒａｍリストの記憶内容の一例を示す説明図である。
【図７】図７は、Ｔｆ−Ｉｄｆスコアリストの記憶内容の一例を示す説明図である。
【図８】図８は、完全修飾名から、単語を結合した結合文字列を抽出する処理の一例を示す説明図である。
【図９】図９は、完全修飾名から、結合文字列が含まれる完全修飾名に一致する組み合わせの結果の一例を示す説明図である。
【図１０】図１０は、文字列拡張処理の第１の例を示す説明図である。
【図１１】図１１は、文字列拡張処理の第２の例を示す説明図である。
【図１２】図１２は、文字列拡張処理の第３の例を示す説明図である。
【図１３】図１３は、出力結果の例を示す説明図である。
【図１４】図１４は、文字列抽出処理手順の一例を示すフローチャートである。
【図１５】図１５は、クラスタ内文字列抽出処理手順の一例を示すフローチャートである。
【図１６】図１６は、文字列拡張処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、開示の文字列抽出方法、文字列抽出装置、および文字列抽出プログラムの実施の形態を詳細に説明する。
【００１０】
図１は、本実施の形態にかかる文字列抽出装置の動作例を示す説明図である。文字列抽出装置１００は、文字列を抽出するコンピュータである。具体的に、文字列抽出装置１００は、プログラムのソースコードに含まれ、ソースコード内で定義された命令の名称から、プログラムを特徴付ける文字列を抽出する。以下、文字列抽出装置１００が用いられる場面について説明する。
【００１１】
アプリケーションプログラムのソースコードは、保守を行い易くするため、プログラムの構造に基づいて、階層型のディレクトリ構造に分類されることがある。以下、アプリケーションプログラムを、単に「アプリ」と称する。
【００１２】
ここで、ソースコードは、階層構造に分類できるプログラミング言語であれば、どのような言語で記述されていてもよい。たとえば、ソースコードは、Ｃ言語、Ｃ＋＋言語、Ｊａｖａ（登録商標）といったプログラミング言語で記述されている。ソースコード内で定義された命令の名称は、アプリの開発者によって付与されており、命令が有する機能の特徴を表している可能性が高い。また、ソースコード内で定義された命令の名称は、１つの命令に対する名称でもよいし、一連の命令に対して付与された名称でもよい。また、具体的な命令の名称の定義の仕方は、プログラミング言語の仕様によって異なる。そこで、文字列抽出装置１００は、プログラミング言語の仕様に従って構文解析を行うことにより、ソースコード内で定義された命令の名称を抽出する。
【００１３】
具体例として、ソースコードがＣ言語で記述されていれば、ソースコード内で定義された命令の名称は、ソースコード内で定義された命令を纏めた関数の名称である。また、ソースコードがＣ＋＋言語またはＪａｖａで記述されていれば、ソースコード内で定義された命令の名称は、ソースコード内で定義された命令であるメンバ関数や変数であるメンバ変数を纏めた、クラスの名称である。クラスの名称として、クラスの名称そのものでもよいし、クラス内のメンバ関数の名称でもよい。本実施の形態では、ソースコードは、Ｊａｖａで記述されているものとする。
【００１４】
ソースコードがＪａｖａである場合、階層構造が、ファイルシステムのディレクトリに一致する。さらに、Ｊａｖａでは、ディレクトリの名称を結合した文字列が、パッケージの名称となる。パッケージは、複数のクラスを纏めたものである。文字列抽出装置１００は、プログラムのソースコード内のクラスの名称から、プログラムを特徴付ける文字列を抽出する。クラスの名称は、クラスを一意に特定する完全修飾名であることが好ましい。完全修飾名は、クラス名に、パッケージ名を追加した文字列である。
【００１５】
アプリの保守者は、あるディレクトリに含まれるソースコードの機能を、あるディレクトリの名称から、ソースコードの内容を閲覧せずとも、ある程度予測することができる。予測できる理由として、ディレクトリの名称は、ソースコードの機能の概要に基づいて付与されることがあるためである。しかしながら、アプリのソースコードは、変更や改修が行われると、プログラムの構造と、ディレクトリ構造とがずれる傾向がある。たとえば、変更を行う変更者が、プログラムの構造を正しく把握せずに変更を行った結果、あるディレクトリ内に、機能が異なるソースコードが混在して、プログラムの構造とディレクトリ構造とがずれてしまう。プログラムの構造とディレクトリ構造とがずれてしまった場合、アプリの保守者は、あるディレクトリの名称を閲覧しても、あるディレクトリに含まれるソースコードの機能を予測することが難しくなる。このように、アプリの保守者がアプリの機能を理解する際に、ディレクトリは、適切な構造ではない場合がある。
【００１６】
アプリの保守者がプログラムの構造を容易に把握するために、たとえば、複数のソースコードで実現されるアプリを、ソースコード内のクラスの呼び出し関係を用いて、複数のクラスタに分類する技術がある。１つのクラスタが、ある機能を実現することが多いため、クラスタを特徴付ける単語を抽出することにより、クラスタの機能を把握しやすくなる。文字列抽出装置１００は、プログラムのソースコード内のクラスの名称から、プログラムを特徴付ける文字列を抽出してもよいし、プログラムを分類したクラスタに含まれるソースコード内のクラスの名称から、クラスタを特徴付ける文字列を抽出してもよい。以下の説明では、後者の例を用いて説明を行う。
【００１７】
ここで、単語とは、クラスの名称を所定の規則により分割した文字列とする。たとえば、クラスの名称が、所定の規則として単語の最初を大文字で書き表すキャメルケースで表されている場合には、クラスの名称を大文字が出現する度に分割することにより、各単語を得ることができる。また、クラスの名称が、所定の規則としてアンダーバー“＿”等の区切り文字で表されている場合には、クラスの名称を区切り文字が出現する度に分割することにより、各単語を得ることができる。また、プログラム内に、名称がキャメルケースで表されたクラスと、名称が区切り文字を用いて表されたクラスとが混在してもよい。また、単語は、大文字小文字を区別してもしなくてもよい。本実施の形態では、大文字と小文字違いの単語は、同一の単語と見なすこととする。
【００１８】
また、アプリの保守者がクラスタの構造を容易に把握するため、クラスタに含まれる単語の特徴抽出として、Ｔｆ−Ｉｄｆを用いる技術がある。Ｔｆ−Ｉｄｆは、クラスタを特徴付けるレベルである。Ｔｆ−Ｉｄｆスコアが高い単語が、より重要な単語であることを示す。Ｔｆ−Ｉｄｆスコアの具体的な算出方法については、図７にて後述する。また、クラスタごとに、クラスタを特徴付ける単語を抽出する技術が、たとえば、下記参考文献１と参考文献２に記載される。
（参考文献１：Ａｄｒｉａｎ  Ｋｕｈｎ、他２名、「Ｓｅｍａｎｔｉｃ  ｃｌｕｓｔｅｒｉｎｇ：Ｉｄｅｎｔｉｆｙｉｎｇ  ｔｏｐｉｃｓ  ｉｎ  ｓｏｕｒｃｅ  ｃｏｄｅ」、２００７、Ｉｎｆｏｒｍａｔｉｏｎ  ａｎｄ  Ｓｏｆｔｗａｒｅ  Ｔｅｃｈｎｏｌｏｇｙ、４９、ｐｐ．２３０−２４３）
（参考文献２：Ａｎｎａ  Ｃｏｒａｚｚａ、他２名、「Ａ  Ｐｒｏｂａｂｉｌｉｓｔｉｃ  ｂａｓｅｄ  Ａｐｐｒｏａｃｈ  ｔｏｗａｒｄｓ  Ｓｏｆｔｗａｒｅ  Ｓｙｓｔｅｍ  Ｃｌｕｓｔｅｒｉｎｇ」、２０１０、１４ｔｈ  Ｅｕｒｏｐｅａｎ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｓｏｆｔｗａｒｅ  Ｍａｉｎｔｅｎａｎｃｅ  ａｎｄ  Ｒｅｅｎｇｉｎｅｅｒｉｎｇ、ｐｐ．８８−９６）
【００１９】
アプリの保守者は、Ｔｆ−Ｉｄｆスコアが高い単語を閲覧することにより、クラスタを特徴付ける単語を把握することができるが、Ｔｆ−Ｉｄｆスコアが高い単語同士の関係は判らないため、クラスタの特徴を把握することが難しい。
【００２０】
そこで、文字列抽出装置１００は、クラスの完全修飾名から、クラスタ内のＴｆ−Ｉｄｆスコアの高い単語を結合した文字列に一致する部分を抽出する。文字列抽出装置１００を利用したアプリの保守者は、抽出した文字列を閲覧することにより、クラスタの機能を把握し易くなる。以下、アプリの保守者を、「利用者」と呼称する。
【００２１】
図１には、クラスタ１０１を表示してある。クラスタ１０１は、階層構造として、たとえば、ディレクトリｃｏｍ内に、ディレクトリｃｏｍｐａｎｙがある。また、ディレクトリｃｏｍｐａｎｙ内に、たとえば、ディレクトリｐｒｏｄｕｃｔがある。さらに、ディレクトリｐｒｏｄｕｃｔ内に、たとえば、ディレクトリｊｄｂｃがある。さらに、ディレクトリｊｄｂｃ内に、たとえば、ＳＹＭＤａｔａｂａｓｅＭｅｔａＤａｔａ．ｊａｖａファイルがある。ＳＹＭＤａｔａｂａｓｅＭｅｔａＤａｔａ．ｊａｖａファイルは、ＳＹＭＤａｔａｂａｓｅＭｅｔａＤａｔａクラスが記載される。
【００２２】
文字列抽出装置１００は、クラスタ１０１のソースコードに含まれるクラスの名称を所定の規則により分割した各々の単語と、各々の単語がクラスタ１０１を特徴付けるレベルとを関連付けて記憶するＴｆ−Ｉｄｆスコアリスト１１１を生成する。図１に示すＴｆ−Ｉｄｆスコアリスト１１１は、レコード１１１−１〜レコード１１１−３を有する。たとえば、図１の例では、単語“ｊｄｂｃ”のＴｆ−Ｉｄｆスコアが０．０３０３８であり、単語“ｓｙｍｄａｔａｂａｓｅ”のＴｆ−Ｉｄｆスコアが０．０２９３９であり、単語“ｍｅｔａ”のＴｆ−Ｉｄｆスコアが０．０２０６４である。
【００２３】
また、文字列抽出装置１００は、クラスの完全修飾名に基づいて、ｎ−ｇｒａｍリスト１１２を生成する。図１に示すｎ−ｇｒａｍリスト１１２は、レコード１１２−２−１〜レコード１１２−２−４、レコード１１２−３−１を有する。ｎ−ｇｒａｍとは、文字列から切り出したｎ個数の文字の並びの集合である。切り出す単位を変えてもよく、本実施の形態では、ｎ−ｇｒａｍは、文字列から切り出したｎ個の単語の並びの集合とする。また、ｎを長さとし、たとえば、長さ２のｎ−ｇｒａｍを、２−ｇｒａｍと表現することもある。また、本実施の形態では、ｎ−ｇｒａｍ内の単語の区切りとして、ピリオド“．”を用いる。
【００２４】
たとえば、図１の例では、ＳＹＭＤａｔａｂａｓｅＭｅｔａＤａｔａクラスの完全修飾名“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ＳＹＭｄａｔａｂａｓｅＭｅｔａＤａｔａ”に基づいたｎ−ｇｒａｍを示す。たとえば、ｎ−ｇｒａｍリスト１１２は、２−ｇｒａｍとして、“ｃｏｍ．ｃｏｍｐａｎｙ”、“ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ”、…、を記憶し、３−ｇｒａｍとして、…、“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ”、…、を記憶する。
【００２５】
Ｔｆ−Ｉｄｆスコアリスト１１１およびｎ−ｇｒａｍリスト１１２は、文字列抽出装置１００以外の他の装置によって生成されてもよい。Ｔｆ−Ｉｄｆスコアリスト１１１およびｎ−ｇｒａｍリスト１１２は、文字列抽出装置１００がアクセス可能な記憶領域に存在する。
【００２６】
文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアリスト１１１から、各々の単語のＴｆ−Ｉｄｆに基づいて、各々の単語から少なくとも２つの単語を選択する。たとえば、文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアが高い、単語“ｊｄｂｃ”と単語“ｓｙｍｄａｔａｂａｓｅ”を選択する。
【００２７】
そして、文字列抽出装置１００は、選択した少なくとも２つの単語のクラスの名称における出現順序を示す情報を生成する。クラスの名称における少なくとも２つの単語の出現順序は、ｎ−ｇｒａｍリスト１１２を参照することにより特定することができる。具体的に、単語“ｊｄｂｃ”と単語“ｓｙｍｄａｔａｂａｓｅ”の出現順序は、レコード１１２−２−４が示す“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ”である。
【００２８】
たとえば、文字列抽出装置１００は、クラスの名称における少なくとも２つの単語の出現順序を示す情報の第１の例として、レコード１１２−２−４が示す“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ”を生成する。また、文字列抽出装置１００は、クラスの名称における少なくとも２つの単語の出現順序を示す情報の第２の例として、完全修飾名から抽出した“ｊｄｂｃ．ＳＹＭｄａｔａｂａｓｅ”を生成してもよい。さらに、文字列抽出装置１００は、クラスの名称における少なくとも２つの単語の出現順序を示す情報の第３の例として、少なくとも２つの単語の出現順序の値が付与された“４：ｊｄｂｃ，５：ｓｙｍｄａｔａｂａｓｅ”を生成してもよい。生成された“：”の左側の数値が、“：”の右側にある単語の出現順序を示す。
【００２９】
生成された情報を出力することにより、文字列抽出装置１００は、利用者に、単語の関係が判り易くなったクラスタの機能を特徴付ける文字列を提供することができる。提供を受けた利用者は、クラスタの機能を特徴付ける文字列を閲覧することにより、クラスタの機能を把握し易くなる。以下、図２〜図１６を用いて、文字列抽出装置１００の詳細について説明する。
【００３０】
図２は、文字列抽出装置のハードウェア構成例を示すブロック図である。図２において、文字列抽出装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、文字列抽出装置１００は、ディスクドライブ２０４と、ディスク２０５と、通信インターフェース２０６と、を含む。また、文字列抽出装置１００は、ディスプレイ２０７と、キーボード２０８と、マウス２０９とを含む。また、ＣＰＵ２０１〜マウス２０９はバス２１０によってそれぞれ接続されている。
【００３１】
ＣＰＵ２０１は、文字列抽出装置１００の全体の制御を司る演算処理装置である。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリである。
【００３２】
ディスクドライブ２０４は、ＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ２０４には、たとえば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する不揮発性メモリである。たとえばディスクドライブ２０４が磁気ディスクドライブである場合、ディスク２０５には、磁気ディスクを採用することができる。また、ディスクドライブ２０４が光ディスクドライブである場合、ディスク２０５には、光ディスクを採用することができる。また、ディスクドライブ２０４がソリッドステートドライブである場合、ディスク２０５には、半導体素子メモリを採用することができる。
【００３３】
通信インターフェース２０６は、ネットワーク２１１と内部とのインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース２０６は、通信回線を通じてネットワーク２１１となるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどに接続され、ネットワーク２１１を介して他の装置に接続される。通信インターフェース２０６には、たとえば、モデムやＬＡＮアダプタなどを採用することができる。
【００３４】
ディスプレイ２０７は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ２０７には、たとえば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３５】
キーボード２０８は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード２０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２０９は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス２０９は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【００３６】
（文字列抽出装置１００の機能）
次に、文字列抽出装置１００の機能について説明する。図３は、文字列抽出装置の機能例を示すブロック図である。文字列抽出装置１００は、選択部３０１と、判断部３０２と、特定部３０３と、生成部３０４と、を含む。制御部となる選択部３０１〜生成部３０４は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、選択部３０１〜生成部３０４の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などである。または、通信インターフェース２０６を経由して他のＣＰＵが実行することにより、選択部３０１〜生成部３０４の機能を実現してもよい。
【００３７】
また、文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアリスト１１１とｎ−ｇｒａｍリスト１１２にアクセス可能である。Ｔｆ−Ｉｄｆスコアリスト１１１とｎ−ｇｒａｍリスト１１２は、ＲＡＭ２０３、ディスク２０５といった記憶装置に格納される。
【００３８】
Ｔｆ−Ｉｄｆスコアリスト１１１は、クラスタ１０１のソースコードに含まれ、ソースコード内で定義されたクラスの名称を所定の規則により分割した各々の単語と、各々の文字列がクラスタ１０１を特徴付けるレベルとを関連付けて記憶する。また、Ｔｆ−Ｉｄｆスコアリスト１１１は、複数のクラスの名称を所定の規則により分割した各々の単語と、各々の文字列がクラスタ１０１を特徴付けるレベルとを関連付けて記憶してもよい。
【００３９】
ｎ−ｇｒａｍリスト１１２は、クラスタ１０１のソースコードに含まれ、ソースコード内で定義されたクラスの名称を切り出したｎ個の単語の並びを記憶する。単語には、クラスの名称の先頭または末尾を示す情報が含まれてもよい。
【００４０】
選択部３０１は、Ｔｆ−Ｉｄｆスコアリスト１１１から、各々の単語のレベルに基づいて、各々の単語から少なくとも２つの単語を選択する。選択する単語数は、２つ以上であり、クラスの名称となる全ての単語より１少ない数である。たとえば、選択部３０１は、Ｔｆ−Ｉｄｆスコアがある閾値以上となる単語全てを選択する。
【００４１】
また、選択部３０１は、Ｔｆ−Ｉｄｆスコアリスト１１１から、各々の単語から各々の単語のレベルが高い順に少なくとも２つの単語を選択してもよい。たとえば、選択部３０１は、Ｔｆ−Ｉｄｆスコアが高い順に、利用者により予め指定された個数となる単語を選択する。
【００４２】
また、選択部３０１は、Ｔｆ−Ｉｄｆスコアリスト１１１から、各々の単語のレベルに基づいて、各々の単語から３個以上となる第１の個数の単語を選択してもよい。さらに、選択部３０１は、判断部３０２が第１の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致しないと判断した場合、各々の単語から第１の個数より少なく２以上となる第２の個数の単語を選択してもよい。なお、選択された単語は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００４３】
判断部３０２は、選択部３０１によって選択された少なくとも２つの単語をクラスの名称における出現順序に従って結合した第１の文字列がクラスの名称の一部に一致するか否かを判断する。クラスの名称における出現順序は、ｎ−ｇｒａｍリスト１１２を参照することにより特定することができる。
【００４４】
たとえば、判断部３０２は、第１の文字列が、ｎ−ｇｒａｍリスト１１２のｎ−ｇｒａｍとして登録されていない場合、第１の文字列がクラスの名称の一部に一致しないと判断する。また、判断部３０２は、ｎ−ｇｒａｍリスト１１２を参照せず、選択された少なくとも２つの単語を結合する順序を入れ替えることにより得られる文字列群の文字列ごとに、該当の文字列がクラスの名称の一部に一致するか否かを判断してもよい。文字列群の全てがクラスの名称の一部に一致しない場合、判断部３０２は、第１の文字列がクラスの名称の一部に一致しないと判断する。
【００４５】
また、判断部３０２は、第１の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致するか否かを判断してもよい。さらに、判断部３０２は、第２の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致するか否かを判断してもよい。
【００４６】
また、判断部３０２は、選択部３０１によって選択された少なくとも２つの単語を結合した文字列が少なくともいずれか一つのクラスの名称の一部または全部に一致するか否かを判断してもよい。たとえば、少なくとも２つの単語が“ｊｄｂｃ”と“ｍｅｔａ”とであるとする。このとき、判断部３０２は、“ｊｄｂｃ”と“ｍｅｔａ”を結合した文字列“ｊｄｂｃ．ｍｅｔａ”と“ｍｅｔａ．ｊｄｂｃ”という文字列群のうち、少なくともいずれか一つのクラスの名称の一部または全部に一致する文字列があるか否かを判断する。
【００４７】
また、判断部３０２は、選択部３０１によって選択された少なくとも２つの単語を結合した文字列が複数のクラスのうちの１以上のクラスの名称の一部または全部に一致するか否かを判断する。このとき、判断部３０２は、少なくとも２つの単語を結合した文字列が、２以上、３以上、…、のクラスの名称の一部または全部に一致するか否かを判断してもよい。たとえば、判断部３０２は、ソースコードに含まれるクラスの名称の個数に基づいて、一致するクラスの個数を変化させてもよい。たとえば、ソースコードに含まれるクラスの名称の個数がある閾値以下の場合、判断部３０２は、１以上のクラスの名称の一部または全部に一致するか否かを判断してもよい。
【００４８】
なお、少なくとも２つの単語を結合した文字列が１つのクラスだけでなく２以上のクラスの名称の一部または全部に一致すれば、少なくとも２つの単語を結合した文字列がクラスタ内に複数回出現していることになる。したがって、少なくとも２つの単語を結合した文字列は、クラスタを特徴付ける文字列の候補に相応しいものと言える。たとえば、判断部３０２は、Ｔｆ−Ｉｄｆスコアがある閾値以上の単語を結合した文字列がｎ−ｇｒａｍリスト１１２にあるか否かを判断する。
【００４９】
また、判断部３０２は、特定部３０３によって１以上のクラスの名称に対応して特定された文字列の直前の単語または直後の単語のうちの少なくともいずれかの単語が全て同一の内容であるか否かを判断してもよい。
【００５０】
たとえば、いずれかの単語が直前の単語であれば、ｎ−ｇｒａｍリスト１１２に、直前の単語の次に、少なくとも２つの単語を結合した文字列が出現するレコードがただ１つある場合に、少なくともいずれかの単語が全て同一の内容であると判断できる。また、少なくともいずれかの単語が直後の単語であれば、ｎ−ｇｒａｍリスト１１２に、少なくとも２つの単語を結合した文字列の次に直後の単語が出現するレコードがただ１つある場合に、全て同一の内容であると判断できる。さらに、少なくともいずれかの単語が直前の単語および直後の単語であれば、ｎ−ｇｒａｍリスト１１２に、直前の文字列、少なくとも２つの単語を結合した文字列、直後の単語の順となるレコードがただ１つある場合に、全て同一の内容であると判断できる。
【００５１】
たとえば、少なくとも２つの単語を結合した文字列が、“ｓｙｍｒｅｓｕｌｔ．ｓｅｔ”であるとする。このとき、特定部３０３によって特定された、少なくとも２つの単語を結合した文字列の直後の単語が“ｍｅｔａ”とクラスの名称の先頭または末尾を示す“＊”とである場合、判断部３０２は、特定されたいずれかの単語が同一の内容でないと判断する。なお、判断結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００５２】
特定部３０３は、次に示す条件の場合、各々の単語のうちの、１以上のクラスの名称における少なくとも２つの単語を結合した文字列の直前の単語および直後の単語のうちの少なくともいずれかの単語を１以上のクラスに対応して特定する。次に示す条件は、判断部３０２によって少なくとも２つの単語を結合した文字列が１以上のクラスの名称の一部または全部に一致すると判断された場合である。
【００５３】
たとえば、特定部３０３は、ｎ−ｇｒａｍリスト１１２を参照して、Ｔｆ−Ｉｄｆスコアがある閾値以上の単語を結合した第１の文字列を含むｎ−ｇｒａｍを取得する。そして、特定部３０３は、取得したｎ−ｇｒａｍから、直前の単語および直後の単語のうちの少なくともいずれかの単語を特定する。また、特定部３０３は、ｎ−ｇｒａｍリスト１１２を参照せずに、複数のクラスの名称から少なくとも２つの単語を結合した文字列を検索して、１以上のクラスの名称から検出できた場合、検出した箇所にある文字列の直前の単語または直後の単語を特定してもよい。特定した単語は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００５４】
生成部３０４は、選択部３０１によって選択された少なくとも２つの単語のクラスの名称における出現順序を示す情報を生成する。たとえば、クラスの名称が、“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ＳＹＭｄａｔａｂａｓｅＭｅｔａＤａｔａ”であるとする。さらに、２つの単語が、“ｊｄｂｃ”と“ｓｙｍｄａｔａｂａｓｅ”とであり、２つの単語の出現順序がｎ−ｇｒａｍリスト１１２のレコード１１２−２−４が示す“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ”であるとする。このとき、生成部３０４は、“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ”を生成する。また、生成部３０４は、クラスの名称のうち、２つの単語の出現位置に相当する文字列“ｊｄｂｃ．ＳＹＭｄａｔａｂａｓｅ”を生成してもよい。
【００５５】
さらに、少なくとも２つの文字列は、隣り合った位置になく、離れた位置にあってもよい。たとえば、クラスの名称は前述の例と同じであり、２つの単語が“ｊｄｂｃ”と“ｍｅｔａ”とであり、２つの単語の出現順序がｎ−ｇｒａｍリスト１１２のレコード１１２−３−１が示す“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ”であるとする。このとき、生成部３０４は、“＿”を、何らかの単語があることを示す識別子として用いて、“ｊｄｂｃ．＿．ｍｅｔａ”を生成する。
【００５６】
また、生成部３０４は、判断部３０２によって第１の文字列がクラスの名称の一部かつ全部に一致しないと判断された場合、クラスの名称における少なくとも２つの単語の出現順序を示す情報を生成しなくてもよい。
【００５７】
また、生成部３０４は、第２の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致すると判断した場合、第２の個数の単語のクラスの名称における出現順序を示す情報を生成してもよい。
【００５８】
また、生成部３０４は、判断部３０２が１以上のクラスの名称に対応して特定したいずれかの単語が全て同一の内容であると判断した場合、少なくとも２つの単語およびいずれかの単語の１以上のクラスの名称における出現順序とを示す情報を生成してもよい。たとえば、少なくとも２つの単語が、“ｓｙｍｐｒｅｐａｒｅｄ”と“ｓｔａｔｅｍｅｎｔ”であり、いずれかの単語として、直後の単語が“＊”である場合、生成部３０４は、“ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ．＊”を生成する。なお、生成した情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。また、生成した情報は、ディスプレイ２０７に表示されてもよいし、ネットワーク２１１を経由して他の装置に送信されてもよい。
【００５９】
図４は、クラスタに含まれるクラス一覧の例を示す説明図である。表４０１は、あるクラスタに含まれるクラス一覧を表示する。表４０１では、クラスを、クラス名とパッケージ名と結合した完全修飾名として表示する。本実施の形態では、パッケージの階層構造が、実際のファイルシステム中では階層ディレクトリ構造に対応するものとする。表４０１で示すクラス群４０２とクラス群４０３は、Ｊａｖａとリレーショナルデータベースの接続のためのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）であるＪＤＢＣに関する機能を有するクラス群である。
【００６０】
表４０１で示すクラス群４０２とクラス群４０３は、“ｃｏｍ”フォルダ内の、“ｃｏｍｐａｎｙ”フォルダ内の、“ｐｒｏｄｕｃｔ”フォルダ内にある。そして、クラス群４０２は、“ｐｒｏｄｕｃｔ”フォルダ内の“ｊｄｂｃ”フォルダに含まれる。一方、クラス群４０３は、“ｐｒｏｄｕｃｔ”フォルダ内の“ｊｄｂｃ２”フォルダに含まれる。このように、クラス群４０２とクラス群４０３は、共にＪＤＢＣに関する機能を有するクラスであるにも関わらず、異なるフォルダに分類される。
【００６１】
図５は、完全修飾名を単語に分割した例を示す説明図である。表５０１は、完全修飾名を単語に分割した例を示す。表５０１は、レコード５０１−１〜レコード５０１−３を含む。表５０１は、クラスタ内完全修飾名と、単語に分割した結果とを含む。クラスタ内完全修飾名フィールドには、分割する前となる完全修飾名が格納される。単語に分割した結果フィールドには、分割した結果が格納される。
【００６２】
たとえば、レコード５０１−１は、“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．Ｊｄｂｃ３ＡｂｓＳＹＭＲｅｓｕｌｔＳｅｔＭｅｔａＤａｔａ”を分割した結果を示す。分割した結果は、“ｃｏｍ”、“ｃｏｍｐａｎｙ”、“ｐｒｏｄｕｃｔ”、“ｊｄｂｃ”、“ｊｄｂｃ３”、“ａｂｓ”、“ｓｙｍｒｅｓｕｌｔ”、“ｓｅｔ”、“ｍｅｔａ”、“ｄａｔａ”となる。
【００６３】
図６は、ｎ−ｇｒａｍリストの記憶内容の一例を示す説明図である。図６では、完全修飾名を分割した単語群と、完全修飾名の先頭または末尾を示す端末文字とからｎ−ｇｒａｍを生成した結果を記憶するｎ−ｇｒａｍリストの記憶内容の一例を示す。ｎ−ｇｒａｍリスト１１２は、レコード６０１−２−１〜レコード６０１−８−１を示す。端末文字は、クラスの名称およびパッケージの名称に出現しない文字であることが好ましい。たとえば、Ｊａｖａの例では、端末文字は、クラスの名称として用いることができない文字であり、かつ、パッケージ名として用いることができない文字であれば、どのような文字であってもよい。以下、端末文字も単語として扱う。本実施の形態では、“＊”を端末文字とする。
【００６４】
ｎ−ｇｒａｍリスト１１２は、“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ＳＹＭＰｒｅｐａｒｅｄＳｔａｔｅｍｅｎｔ”からｎ−ｇｒａｍを生成した例である。ｎ−ｇｒａｍリスト１１２は、レコード６０１−２−１〜レコード６０１−２−７が示す単語数２から、レコード６０１−８−１が示す単語数８までを示す。
【００６５】
図７は、Ｔｆ−Ｉｄｆスコアリストの記憶内容の一例を示す説明図である。図７では、あるクラスタに含まれる単語のＴｆ−Ｉｄｆスコアの高い順にソートした結果を記憶するＴｆ−Ｉｄｆスコアリスト１１１の記憶内容の一覧を示す。Ｔｆ−Ｉｄｆスコアリスト１１１の各フィールドには、“：”の左側には単語が格納され、“：”の右側には単語のＴｆ−Ｉｄｆスコアが格納される。Ｔｆ−Ｉｄｆスコアリスト１１１は、たとえば、“ｊｄｂｃ”が最もＴｆ−Ｉｄｆスコアが高く“０．０３０３８”であり、“ｓｙｍｄａｔａｂａｓｅ”と“ｓｙｍｐｒｅｐａｒｅｄ”とが次にＴｆ−Ｉｄｆスコアが高く“０．０２９３９”である。
【００６６】
ここで、具体的なＴｆ−Ｉｄｆスコアの算出方法について説明する。クラスタｊにおける単語ｉのスコアＴｆ−Ｉｄｆ（ｉ，ｊ）は下記（１）式により算出される。
【００６７】
Ｔｆ−Ｉｄｆ（ｉ，ｊ）＝ＴＦ（ｉ，ｊ）×ＩＤＦ（ｉ）  …（１）
【００６８】
ただし、ＴＦ（ｉ，ｊ）はクラスタｊ内に単語ｉが出現する頻度を求める関数である。また、ＩＤＦ（ｉ）は、全てのクラスタに単語ｉが出現する頻度の逆数を求める関数である。
【００６９】
クラスタｊにおける単語ｉの出現回数をｆｒｅｑ（ｉ，ｊ）、クラスタｊに含まれる単語ｉ以外の単語のうち最大の出現回数をｍａｘＯｔｈｅｒｓ（ｉ，ｊ）とすると、クラスタｊにおける単語ｉの単語頻度ＴＦ（ｉ，ｊ）は、下記（２）式により算出される。
【００７０】
ＴＦ（ｉ，ｊ）＝ｆｒｅｑ（ｉ，ｊ）／ｍａｘＯｔｈｅｒｓ（ｉ，ｊ）  …（２）
【００７１】
また、クラスタの総数をＮ、クラスタのうち単語ｉが表れるクラスタ数をｎ（ｉ）とするとき、逆文書頻度ＩＤＦ（ｉ）は、下記（３）式により算出される。
【００７２】
ＩＤＦ（ｉ）＝ｌｏｇ（Ｎ／ｎ（ｉ））  …（３）
【００７３】
図８は、完全修飾名から、単語を結合した結合文字列を抽出する処理の一例を示す説明図である。文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアリスト１１１から、上位Ｘ個の単語を選択し、選択した単語の集合を、Ｒｅｍａｉｎとする。たとえば、Ｘを１０とする。続けて、文字列抽出装置１００は、Ｒｅｍａｉｎに含まれる単語の組み合わせを持つｎ−ｇｒａｍが存在するか否かを検索する。
【００７４】
具体的に、図８の例では、文字列抽出装置１００は、ｎ−ｇｒａｍリスト１１２で示す８−ｇｒａｍには、Ｒｅｍａｉｎに含まれる単語の組み合わせを持つｎ−ｇｒａｍが存在しないと判断する。ｎ−ｇｒａｍが存在しないと判断した場合、文字列抽出装置１００は、Ｒｅｍａｉｎに含まれる単語から、さらに単語数が少ない組み合わせを生成する。たとえば、文字列抽出装置１００は、Ｒｅｍａｉｎから、“ｓｙｍｃｃｏｎｎｅｃｔｉｏｎ”を取り除いた単語群の組み合わせを持つｎ−ｇｒａｍが存在するか否かを検索する。図８の例では、文字列抽出装置１００は、ｎ−ｇｒａｍリスト１１２で示す８−ｇｒａｍには、Ｒｅｍａｉｎから、“ｓｙｍｃｃｏｎｎｅｃｔｉｏｎ”を取り除いた単語の組み合わせを持つｎ−ｇｒａｍが存在しないと判断する。同様に、文字列抽出装置１００は、Ｒｅｍａｉｎから、“ｄａｔａ”を取り除いた単語の組み合わせを持つｎ−ｇｒａｍが存在しないと判断する。
【００７５】
Ｒｅｍａｉｎから取り除く単語の選択方法は、どのような単語を選択してもよいが、たとえば、文字列抽出装置１００は、Ｔｆ−Ｉｄｆのスコアの小さい単語から選択してもよい。これにより、文字列抽出装置１００は、可能な限り、クラスタの特徴を表す単語の組み合わせを持つｎ−ｇｒａｍを取得することができる。
【００７６】
このように、文字列抽出装置１００は、Ｒｅｍａｉｎから単語を取り除く処理を繰り返して、取り除いた残余の単語の組み合わせを持つｎ−ｇｒａｍを検索する。図８の例では、Ｒｅｍａｉｎから、“ｅｘ，ｌｏｇ，ｓｔａｔｅｍｅｎｔ，ｓｙｍｃｃｏｎｎｅｃｔｉｏｎ，ｓｙｍｐｒｅｐａｒｅｄ，ｓｙｍｒｅｓｕｌｔ”を取り除いた単語の組み合わせを持つ４−ｇｒａｍが存在したと判断する。文字列抽出装置１００は、存在した“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ”をＲｅｍａｉｎから除いて図８に示す抽出する処理を、Ｒｅｍａｉｎに含まれる単語がなくなるまで続行する。
【００７７】
図９は、完全修飾名から、結合文字列が含まれる完全修飾名に一致する組み合わせの結果の一例を示す説明図である。表９０１は、単語の組み合わせとｎ−ｇｒａｍとの一致結果とを有する。図９に示す表９０１は、レコード９０１−１０−１、レコード９０１−９−１〜レコード９０１−９−３、…、レコード９０１−４−１、…、レコード９０１−２−１を有する。
【００７８】
単語の組み合わせフィールドには、完全修飾名を分割した各単語の一部また全部による組み合わせが格納される。ｎ−ｇｒａｍとの一致結果フィールドは、単語の組み合わせフィールドに格納された単語の組み合わせが、生成済みのｎ−ｇｒａｍと一致するか否かを示す値が格納される。
【００７９】
たとえば、レコード９０１−１０−１は、単語“ｄａｔａ，ｅｘ，ｊｄｂｃ，ｌｏｇ，ｍｅｔａ，ｓｔａｔｅｍｅｎｔ，ｓｙｍｃｃｏｎｎｅｃｔｉｏｎ，ｓｙｍｄａｔａｂａｓｅ，ｓｙｍｐｒｅｐａｒｅｄ，ｓｙｍｒｅｓｕｌｔ”の組み合わせが、生成済みのｎ−ｇｒａｍと一致しないことを示す。また、レコード９０１−４−１は、単語“ｄａｔａ，ｊｄｂｃ，ｍｅｔａ，ｓｙｍｄａｔａｂａｓｅ”の組み合わせが、生成済みのｎ−ｇｒａｍと一致することを示す。次に、ｎ−ｇｒａｍと一致した“ｄａｔａ，ｊｄｂｃ，ｍｅｔａ，ｓｙｍｄａｔａｂａｓｅ”と、“ｓｔａｔｅｍｅｎｔ，ｓｙｍｐｒｅｐａｒｅｄ”と、ｎ−ｇｒａｍに一致しなかった“ｅｘ，ｌｏｇ，ｓｙｍｃｃｏｎｎｅｃｔｉｏｎ，ｓｙｍｒｅｓｕｌｔ”について、文字列拡張処理を行う。
【００８０】
図１０は、文字列拡張処理の第１の例を示す説明図である。図１０では、“ｄａｔａ，ｊｄｂｃ，ｍｅｔａ，ｓｙｍｄａｔａｂａｓｅ”について、文字列拡張処理を行う場合の例である。文字列抽出装置１００は、生成済みのｎ−ｇｒａｍから、単語列ｎｇ“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ”から始まり、長さが１長い５−ｇｒａｍを検索する。図１０の例では、レコード６０１−５−５が示す“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”という１つの５−ｇｒａｍが検出される。
【００８１】
１つのｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、単語列ｎｇを“ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”に設定して、単語列ｎｇから始まり、長さが１長い６−ｇｒａｍを検索する。図１０の例では、単語列ｎｇから始まり、長さが１長い６−ｇｒａｍが検出できなかったとする。この場合、文字列抽出装置１００は、単語列ｎｇで終わり、長さが１長い６−ｇｒａｍを検索する。図１０の例では、レコード６０１−６−４が示す“ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”という１つの６−ｇｒａｍが検出される。
【００８２】
１つのｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、単語列ｎｇを“ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”に設定して、単語列ｎｇで終わり、長さが１長い７−ｇｒａｍを検索する。図１０の例では、レコード６０１−７−３が示す“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”という１つの７−ｇｒａｍが検出される。
【００８３】
１つのｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、単語列ｎｇを“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”に設定して、単語列ｎｇで終わり長さが１長い８−ｇｒａｍを検索する。図１０の例では、レコード６０１−８−２が示す“＊．ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”という１つの８−ｇｒａｍが検出される。８−ｇｒａｍより長いｎ−ｇｒａｍがないため、文字列抽出装置１００は、“＊．ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ．＊”から端末文字を取り除いて出力する。具体的に、文字列抽出装置１００は、“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ”を出力する。
【００８４】
図１１は、文字列拡張処理の第２の例を示す説明図である。図１１では、“ｓｔａｔｅｍｅｎｔ，ｓｙｍｐｒｅｐａｒｅｄ”について、文字列拡張処理を行う場合の例である。文字列抽出装置１００は、生成済みのｎ−ｇｒａｍから、単語列ｎｇ“ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ”から始まり、長さが１長い３−ｇｒａｍを検索する。図１１の例では、レコード６０１−３−６が示す“ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ．＊”という１つの３−ｇｒａｍが検出される。
【００８５】
１つのｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、単語列ｎｇを“ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ．＊”に設定して、単語列ｎｇから始まり、長さが１長い４−ｇｒａｍを検索する。図１１の例では、単語列ｎｇから始まり、長さが１長い４−ｇｒａｍが検出できなかったとする。この場合、文字列抽出装置１００は、単語列ｎｇで終わり、長さが１長い４−ｇｒａｍを検索する。図１１の例では、レコード６０１−４−５が示す“ｊｄｂｃ．ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ．＊”と、レコード６０１−４−７が示す“ａｂｓ．ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ．＊”という２つの４−ｇｒａｍが検出される。
【００８６】
２つ以上のｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、単語列ｎｇから端末文字を取り除いた場合の単語数が２個以上であり、単語列ｎｇ内の単語の関係が利用者にとって判り易くなったため、これ以上の文字列拡張処理を行わない。したがって、文字列抽出装置１００は、“ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ．＊”から端末文字を取り除いた“ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ”を出力する。
【００８７】
図１２は、文字列拡張処理の第３の例を示す説明図である。図１２では、“ｓｙｍｒｅｓｕｌｔ”について、文字列拡張処理を行う場合の例である。単語列ｎｇに含まれる単語数が１つである場合、文字列抽出装置１００は、単語列ｎｇと他の単語を結合して、利用者にとって判り易くなることを図る。文字列抽出装置１００は、生成済みのｎ−ｇｒａｍから、単語列ｎｇ“ｓｙｍｒｅｓｕｌｔ”から始まり、長さが１長い２−ｇｒａｍを検索する。図１２の例では、レコード６０１−２−８が示す“ｓｙｍｒｅｓｕｌｔ．ｓｅｔ”という１つの２−ｇｒａｍが検出される。
【００８８】
１つのｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、単語列ｎｇを“ｓｙｍｒｅｓｕｌｔ．ｓｅｔ”に設定して、単語列ｎｇから始まり、長さが１長い３−ｇｒａｍを検索する。図１２の例では、レコード６０１−３−７が示す“ｓｙｍｒｅｓｕｌｔ．ｓｅｔ．ｍｅｔａ”と、レコード６０１−３−８が示す“ｓｙｍｒｅｓｕｌｔ．ｓｅｔ．＊”という２つの３−ｇｒａｍが検出される。
【００８９】
２つ以上のｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、可能な限り１つのｎ−ｇｒａｍを検出するために、単語列ｎｇで終わり、長さが１長い３−ｇｒａｍを検索する。図１２の例では、レコード６０１−３−９が示す“ａｂｓ．ｓｙｍｒｅｓｕｌｔ．ｓｅｔ”と、レコード６０１−３−１０が示す“ｊｄｂｃ．ｓｙｍｒｅｓｕｌｔ．ｓｅｔ”という２つの３−ｇｒａｍが検出される。
【００９０】
２つ以上のｎ−ｇｒａｍを検出した場合、文字列抽出装置１００は、単語列ｎｇから端末文字を取り除いた場合の単語数が２個以上であり、単語列ｎｇ内の単語の関係が利用者にとって判り易くなったため、これ以上の文字列拡張処理を行わない。したがって、文字列抽出装置１００は、“ｓｙｍｒｅｓｕｌｔ．ｓｅｔ”を出力する。
【００９１】
図１３は、出力結果の例を示す説明図である。表１３０１は、文字列拡張処理後の文字列と、文字列拡張処理前の文字列とを示す。表１３０１は、レコード１３０１−１〜レコード１３０１−６を含む。各レコードの括弧（）の外に示した文字列が文字列拡張処理後の文字列を示す。また、各レコードの括弧の中に示した文字列が文字列拡張処理前の文字列を示す。
【００９２】
たとえば、レコード１３０１−１が示す“ｃｏｍ．ｃｏｍｐａｎｙ．ｐｒｏｄｕｃｔ．ｊｄｂｃ．ｓｙｍｄａｔａｂａｓｅ．ｍｅｔａ．ｄａｔａ”から、利用者は、データベースのメタデータに関する処理を行うことが予測できる。また、レコード１３０１−２が示す“ｓｙｍｐｒｅｐａｒｅｄ．ｓｔａｔｅｍｅｎｔ”から、利用者は、検索文字列を扱う処理があることを予測できる。さらに、レコード１３０１−３が示す“ｓｙｍｒｅｓｕｌｔ．ｓｅｔ”から、利用者は、検索結果を一纏めにして処理することがあることを予測できる。同様に、レコード１３０１−４が示す“ｌｄｕｓｅｒ．ｌｏｇ”と“ｓｙｍｕｓｅｒ．ｌｏｇ”から、利用者は、ユーザログに関する処理があることを予測できる。
【００９３】
また、レコード１３０１−５が示す“ｉｃｏｎｎｅｃｔｉｏｎ．ｅｘ”と“ｓｔａｔｅｍｅｎｔ．ｅｘ”から、利用者は、ｉｃｏｎｎｅｃｔｉｏｎおよびｓｔａｔｅｍｅｎｔの拡張処理があることを予測できる。さらに、レコード１３０１−６が示す“ａｂｓ．ｓｙｍｃｃｏｎｎｅｃｔｉｏｎ”から、利用者は、ｓｙｍｃｃｏｎｎｅｃｔｉｏｎについて纏めて処理を行う箇所があることを予測できる。
【００９４】
続けて、図４〜図１３で示した動作を行うフローチャートを、図１４〜図１６を用いて説明する。
【００９５】
図１４は、文字列抽出処理手順の一例を示すフローチャートである。文字列抽出処理は、クラスの完全修飾名からクラスタを特徴付ける文字列を抽出する処理である。文字列抽出装置１００は、クラスタ分割結果から、クラスタ名とクラスタに含まれるクラス名の完全修飾名の集合を取得する（ステップＳ１４０１）。次に、文字列抽出装置１００は、完全修飾名を単語に分割する（ステップＳ１４０２）。単語に分割した結果が、表５０１となる。続けて、文字列抽出装置１００は、分割した各単語のＴｆ−Ｉｄｆスコアを算出する（ステップＳ１４０３）。次に、文字列抽出装置１００は、クラスタ名と、クラスタに含まれる単語および単語のＴｆ−Ｉｄｆスコアとを関連付ける（ステップＳ１４０４）。関連付けた結果が、Ｔｆ−Ｉｄｆスコアリスト１１１となる。
【００９６】
続けて、文字列抽出装置１００は、複数のクラスタの中から、１つ目のクラスタを選択する（ステップＳ１４０５）。次に、文字列抽出装置１００は、選択したクラスタに対してクラスタ内文字列抽出処理を実行する（ステップＳ１４０６）。クラスタ内文字列抽出処理は、図１５にて後述する。続けて、文字列抽出装置１００は、全てのクラスタを選択したか否かを判断する（ステップＳ１４０７）。まだ選択していない場合（ステップＳ１４０７：Ｎｏ）、文字列抽出装置１００は、次のクラスタを選択する（ステップＳ１４０８）。ステップＳ１４０８の処理終了後、文字列抽出装置１００は、ステップＳ１４０６の処理に移行する。
【００９７】
全てのクラスタを選択した場合（ステップＳ１４０７：Ｙｅｓ）、文字列抽出装置１００は、文字列抽出処理を終了する。文字列抽出処理を実行することにより、文字列抽出装置１００は、クラスの完全修飾名からクラスタを特徴付ける文字列を抽出することができる。
【００９８】
図１５は、クラスタ内文字列抽出処理手順の一例を示すフローチャートである。クラスタ内の文字列抽出処理は、選択したクラスタに含まれるクラスの完全修飾名からクラスタを特徴付ける文字列を抽出する処理である。文字列抽出装置１００は、選択したクラスタ内のクラスごとに、クラスの完全修飾名の先頭と末尾に端末文字を付けた文字列から、ｎ−ｇｒａｍを生成する（ステップＳ１５０１）。生成した結果の一覧が、ｎ−ｇｒａｍリスト１１２となる。
【００９９】
次に、文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアが高い順にＸ個の単語を選択する（ステップＳ１５０２）。ステップＳ１５０２の処理において、文字列抽出装置１００は、Ｔｆ−Ｉｄｆスコアが０より大きいものを使用するようにしてもよい。続けて、文字列抽出装置１００は、選択した単語の集合をＲｅｍａｉｎに設定する（ステップＳ１５０３）。次に、文字列抽出装置１００は、ｎｕｍをＲｅｍａｉｎに含まれる単語の数に設定する（ステップＳ１５０４）。続けて、文字列抽出装置１００は、Ｒｅｍａｉｎに含まれる単語からｎｕｍ個選択する単語の組み合わせの集合Ｃｏｍｂを生成する（ステップＳ１５０５）。たとえば、Ｒｅｍａｉｎが単語Ａ、単語Ｂ、単語Ｃという３つの単語を含んでおり、ｎｕｍが２であるとする。このとき、Ｃｏｍｂは、単語Ａおよび単語Ｂと、単語Ａおよび単語Ｃと、単語Ｂおよび単語Ｃという３つの組み合わせを含む。
【０１００】
次に、文字列抽出装置１００は、Ｃｏｍｂから、未選択の単語の組み合わせを選択する（ステップＳ１５０６）。未選択のうちのどの単語の組み合わせを優先して選択するかは、たとえば、文字列抽出装置１００は、Ｔｆ−Ｉｄｆのスコアの高い単語同士の組み合わせを優先して選択してもよい。これにより、文字列抽出装置１００は、可能な限り、クラスタの特徴を表す単語の組み合わせを持つｎ−ｇｒａｍを取得することができる。
【０１０１】
続けて、文字列抽出装置１００は、選択した単語の組み合わせがｎ−ｇｒａｍに存在するか否かを判断する（ステップＳ１５０７）。選択した単語の組み合わせがｎ−ｇｒａｍに存在する場合（ステップＳ１５０７：Ｙｅｓ）、文字列抽出装置１００は、選択した単語の組み合わせに対して、文字列拡張処理を実行する（ステップＳ１５０８）。文字列拡張処理は、図１６にて後述する。続けて、文字列抽出装置１００は、Ｒｅｍａｉｎから、ｎ−ｇｒａｍに存在した単語の組み合わせに含まれる単語を除去する（ステップＳ１５０９）。ステップＳ１５０９の実行終了後、文字列抽出装置１００は、ステップＳ１５０４の処理に移行する。
【０１０２】
選択した単語の組み合わせがｎ−ｇｒａｍに存在しない場合（ステップＳ１５０７：Ｎｏ）、文字列抽出装置１００は、続けて、Ｃｏｍｂに含まれる単語の組み合わせを全て選択したか否かを判断する（ステップＳ１５１０）。まだ選択していない単語の組み合わせがある場合（ステップＳ１５１０：Ｎｏ）、文字列抽出装置１００は、ステップＳ１５０６の処理に移行する。
【０１０３】
全ての単語の組み合わせを選択した場合（ステップＳ１５１０：Ｙｅｓ）、文字列抽出装置１００は、ｎｕｍをデクリメントする（ステップＳ１５１１）。続けて、文字列抽出装置１００は、ｎｕｍが１か否かを判断する（ステップＳ１５１２）。ｎｕｍが２以上である場合（ステップＳ１５１２：Ｎｏ）、文字列抽出装置１００は、ステップＳ１５０５の処理に移行する。ｎｕｍが１である場合（ステップＳ１５１２：Ｙｅｓ）、文字列抽出装置１００は、Ｒｅｍａｉｎに残った単語ごとに、文字列拡張処理を実行する（ステップＳ１５１３）。ステップＳ１５１３の処理終了後、文字列抽出装置１００は、クラスタ内文字列抽出処理を終了する。クラスタ内文字列抽出処理を実行することにより、文字列抽出装置１００は、選択したクラスタに含まれるクラスの完全修飾名からクラスタを特徴付ける文字列を抽出することができる。
【０１０４】
図１６は、文字列拡張処理手順の一例を示すフローチャートである。文字列拡張処理は、ｎ−ｇｒａｍの文字列を末尾方向または先頭方向に長くする処理である。また、入力された単語列を、ｎｇとする。文字列抽出装置１００は、単語列ｎｇから始まり長さが１長いｎ−ｇｒａｍを検索する（ステップＳ１６０１）。検索した結果、文字列抽出装置１００は、１つのｎ−ｇｒａｍを検出したか否かを判断する（ステップＳ１６０２）。１つのｎ−ｇｒａｍを検出した場合（ステップＳ１６０２：Ｙｅｓ）、文字列抽出装置１００は、検出したｎ−ｇｒａｍに対して文字列拡張処理を実行する（ステップＳ１６０３）。具体的に、ステップＳ１６０３の処理は、文字列拡張処理を再帰的に行うことを示す。ステップＳ１６０３にて呼び出された文字列拡張処理の終了後、文字列抽出装置１００は、ステップＳ１６０４の処理を行う。
【０１０５】
ステップＳ１６０３の処理終了後、文字列抽出装置１００は、ステップＳ１６０３の文字列拡張処理の出力結果をｎｇに設定する（ステップＳ１６０４）。２つ以上のｎ−ｇｒａｍを検出した、またはｎ−ｇｒａｍを検出しなかった場合（ステップＳ１６０２：Ｎｏ）、またはステップＳ１６０４の処理終了後、文字列抽出装置１００は、単語列ｎｇで終わり長さが１長いｎ−ｇｒａｍを検索する（ステップＳ１６０５）。ステップＳ１６０６〜ステップＳ１６０８の処理は、ステップＳ１６０２〜ステップＳ１６０４と同一であるため、説明を省略する。
【０１０６】
２つ以上のｎ−ｇｒａｍを検出した、またはｎ−ｇｒａｍを検出しなかった場合（ステップＳ１６０６：Ｎｏ）、またはステップＳ１６０８の処理終了後、文字列抽出装置１００は、ｎｇから端末文字を取り除いた場合の単語数が１か否かを判断する（ステップＳ１６０９）。単語数が１でない場合（ステップＳ１６０９：Ｎｏ）、文字列抽出装置１００は、ｎｇを出力する（ステップＳ１６１０）。ステップＳ１６１０の処理において、文字列拡張処理がステップＳ１５０８の処理またはステップＳ１５１３の処理から呼ばれた場合、文字列抽出装置１００は、ｎｇをクラスタを特徴付ける文字列として生成する。また、文字列拡張処理がステップＳ１６０３の処理またはステップＳ１６０７の処理から呼ばれた再帰処理であれば、文字列抽出装置１００は、ｎｇを出力結果として呼び元に返す。
【０１０７】
単語数が１である場合（ステップＳ１６０９：Ｙｅｓ）、文字列抽出装置１００は、ｎｇを含む２−ｇｒａｍを出力する（ステップＳ１６１１）。ステップＳ１６１１の処理において、文字列拡張処理がステップＳ１５０８の処理またはステップＳ１５１３の処理から呼ばれた場合、文字列抽出装置１００は、ｎｇを含む２−ｇｒａｍをクラスタを特徴付ける文字列として生成する。また、文字列拡張処理がステップＳ１６０３の処理またはステップＳ１６０７の処理から呼ばれた再帰処理であれば、文字列抽出装置１００は、ｎｇを含む２−ｇｒａｍを出力結果として呼び元に返す。
【０１０８】
ステップＳ１６１０、またはステップＳ１６１１の処理終了後、文字列抽出装置１００は、文字列拡張処理を終了する。文字列拡張処理を実行することにより、文字列抽出装置１００は、ｎ−ｇｒａｍの文字列を末尾方向または先頭方向に長くすることができる。
【０１０９】
以上説明したように、文字列抽出装置１００によれば、クラスの完全修飾名から、クラスタ内のＴｆ−ｉｄｆスコアに基づいて選択した少なくとも２つの単語の出現順序を示す情報を生成する。利用者は、少なくとも２つの単語の出現順序を示す情報を閲覧することにより、クラスタの機能を把握し易くなる。また、単純に特徴付ける単語をスコア順に列挙するのに比べると、文字列抽出装置１００は、完全修飾名の部分文字列として纏める方が把握すべき文字列数が減少し、さらに意味のある文字列を構成することができる。したがって、利用者がクラスタの機能を把握しやすくなることが期待できる。
【０１１０】
また、文字列抽出装置１００によれば、少なくとも２つの単語を、クラスの名称における少なくとも２つの単語の出現順序に従って結合した文字列を生成してもよい。結合した文字列は、クラスの完全修飾名に近い内容となるため、利用者は、クラスタの機能をより把握しやすくなる。また、文字列抽出装置１００によれば、少なくとも２つの文字列が隣り合った位置になく、離れた位置にあっても、何らかの単語があることを示す識別子を用いて、少なくとも２つの文字列を結合した文字列を生成してもよい。何らかの単語があることを示す識別子が“＿”であり、生成された文字列が“ｓｅｎｄ．＿．ｄａｔａ”であるとする。利用者は、生成された文字列を閲覧することにより、クラスタの機能が、ｄａｔａをいずれかに送信する処理であることを予測することができる。
【０１１１】
また、文字列抽出装置１００によれば、クラスタ内のＴｆ−ｉｄｆスコアに基づいて選択した単語を結合した文字列が、クラスの名称の一部に一致しない場合、単語を結合した文字列を出力しない。これにより、文字列抽出装置１００は、クラスタを特徴付ける可能性が低い文字列を出力しなくなるため、利用者のクラスタの機能の把握を妨げることを抑制することができる。
【０１１２】
また、文字列抽出装置１００によれば、Ｔｆ−ｉｄｆスコアの高い順に、単語を選択してもよい。これにより、文字列抽出装置１００は、クラスタをより特徴付ける単語が結合された文字列を抽出することができる。
【０１１３】
また、文字列抽出装置１００によれば、３以上の第１の個数の単語を結合した文字列が、クラスの名称の一部に一致しない場合、第１の個数より少ない第２の個数の単語を結合した文字列が、クラスの名称の一部に一致するか否かを判断してもよい。これにより、文字列抽出装置１００は、クラスタを特徴付け、かつ、より長い文字列を抽出することができる。
【０１１４】
また、文字列抽出装置１００によれば、選択した単語を結合した文字列が１つ以上のクラスの名称の一部に一致した場合、文字列の直前および直後にある単語が、１つ以上のクラスの名称間で一致するならば、前述の単語を含めて出力してもよい。これにより、文字列抽出装置１００は、クラスタをより特徴付ける文字列に結合して出力することになり、出力される文字列が長くなるため、利用者は、よりクラスタの機能を把握し易くなる。
【０１１５】
なお、本実施の形態で説明した文字列抽出方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本文字列抽出プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本文字列抽出プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１１６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１７】
（付記１）コンピュータが、
プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択し、
選択した前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行することを特徴とする文字列抽出方法。
【０１１８】
（付記２）前記情報は、選択した前記少なくとも２つの文字列を、前記命令の名称における前記少なくとも２つの文字列の出現順序に従って結合した文字列であることを特徴とする付記１に記載の文字列抽出方法。
【０１１９】
（付記３）前記コンピュータは、
選択した前記少なくとも２つの文字列を前記命令の名称における前記少なくとも２つの文字列の出現順序に従って結合した第１の文字列が前記命令の名称の一部に一致するか否かを判断する、処理を実行し、
前記生成する処理は、
前記第１の文字列が前記命令の名称の一部に一致しないと判断した場合、前記情報を生成しない、
ことを特徴とする付記１または２に記載の文字列抽出方法。
【０１２０】
（付記４）前記選択する処理は、
前記記憶部から、前記各々の文字列から前記各々の文字列のレベルが高い順に少なくとも２つの文字列を選択する、
ことを特徴とする付記１〜３のいずれか一つに記載の文字列抽出方法。
【０１２１】
（付記５）前記コンピュータは、
前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から３個以上となる第１の個数の文字列を選択し、
選択した前記第１の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
前記第１の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致しない場合、前記各々の文字列から前記第１の個数より少なく２以上となる第２の個数の文字列を選択し、
選択した前記第２の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
前記第２の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致すると判断した場合、前記第２の個数の文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行する付記１〜４のいずれか一つに記載の文字列抽出方法。
【０１２２】
（付記６）前記ソースコードは前記命令の名称を複数含み、
前記記憶部は、前記名称の各々を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶しており、
前記コンピュータは、
前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択し、
選択した前記少なくとも２つの文字列を結合した文字列が前記名称の各々のうちの１以上の名称の一部または全部に一致するか否かを判断し、
前記少なくとも２つの文字列を結合した文字列が前記１以上の名称の一部または全部に一致すると判断した場合、前記各々の文字列のうちの、前記１以上の名称における前記少なくとも２つの文字列を結合した文字列の直前の文字列および直後の文字列のうちの少なくともいずれかの文字列を前記１以上の名称に対応して特定し、
前記１以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であるか否かを判断し、
前記１以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であると判断した場合、前記１以上の名称における前記少なくとも２つの文字列および前記いずれかの文字列の出現順序を示す情報を生成する、
処理を実行することを特徴とする付記１〜５のいずれか一つに記載の文字列抽出方法。
【０１２３】
（付記７）プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択する選択部と、
前記選択部によって選択された前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する生成部と、
を有することを特徴とする文字列抽出装置。
【０１２４】
（付記８）プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択する選択部と、
前記選択部によって選択された前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する生成部と、
を有するコンピュータを含むことを特徴とする文字列抽出装置。
【０１２５】
（付記９）コンピュータに、
プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択し、
選択した前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行させることを特徴とする文字列抽出プログラム。
【０１２６】
（付記１０）プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも２つの文字列を選択し、
選択した前記少なくとも２つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理をコンピュータに実行させる文字列抽出プログラムを記憶したことを特徴とする記憶媒体。
【符号の説明】
【０１２７】
１００  文字列抽出装置
１０１  クラスタ
１１１  Ｔｆ−Ｉｄｆスコアリスト
１１２  ｎ−ｇｒａｍリスト
３０１  選択部
３０２  判断部
３０３  特定部
３０４  生成部
【図１】
2014146076.tif 000003
【図２】
2014146076.tif 000004
【図３】
2014146076.tif 000005
【図４】
2014146076.tif 000006
【図５】
2014146076.tif 000007
【図６】
2014146076.tif 000008
【図７】
2014146076.tif 000009
【図８】
2014146076.tif 000010
【図９】
2014146076.tif 000011
【図１０】
2014146076.tif 000012
【図１１】
2014146076.tif 000013
【図１２】
2014146076.tif 000014
【図１３】
2014146076.tif 000015
【図１４】
2014146076.tif 000016
【図１５】
2014146076.tif 000017
【図１６】
2014146076.tif 000018