JP2014146076A - 文字列抽出方法、文字列抽出装置、および文字列抽出プログラム - Google Patents

文字列抽出方法、文字列抽出装置、および文字列抽出プログラム Download PDF

Info

Publication number
JP2014146076A
JP2014146076A JP2013012692A JP2013012692A JP2014146076A JP 2014146076 A JP2014146076 A JP 2014146076A JP 2013012692 A JP2013012692 A JP 2013012692A JP 2013012692 A JP2013012692 A JP 2013012692A JP 2014146076 A JP2014146076 A JP 2014146076A
Authority
JP
Japan
Prior art keywords
character string
character
name
character strings
word
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2013012692A
Other languages
English (en)
Inventor
Koki Kato
光幾 加藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013012692A priority Critical patent/JP2014146076A/ja
Publication of JP2014146076A publication Critical patent/JP2014146076A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】プログラムの機能を把握し易くすること。
【解決手段】文字列抽出装置100は、Tf−Idfスコアリスト111から、各々の単語のTf−Idfに基づいて、各々の単語から少なくとも2つの単語を選択する。たとえば、文字列抽出装置100は、Tf−Idfスコアが高い、単語“jdbc”と単語“symdatabase”を選択する。そして、文字列抽出装置100は、クラスの名称における、少なくとも2つの単語の出現順序を示す情報を生成する。たとえば、文字列抽出装置100は、選択した少なくとも2つの単語のクラスの名称における出現順序を示す情報として、“jdbc.symdatabase”を生成する。
【選択図】図1

Description

本発明は、文字列抽出方法、文字列抽出装置、および文字列抽出プログラムに関する。
従来、データベースから文字列を検索する技術がある。関連する先行技術として、たとえば、検索文字列を単語に分割し、分割された単語と同一の単語を構成要素に含む複合語がデータベースに格納された文章に存在する場合、複合語を検索文字列の類義語としてデータベースから検索するものがある。また、文章をn個の単語で切り出したn−gram内の各単語の対象文書中の出現頻度と、n−gram自体の出現頻度とを用いてn−gramの共起度を計算する技術がある。さらに、複数の候補を挙げた原文上の単語に対して、複数の候補の中から最適な候補を選定して、翻訳文を生成する技術がある。さらに、漢字表記と仮名表記のような2種類以上の異なる表記の文字列の組に対し、単語同時確率を与える言語モデルおよび文字混同確率を与える文字認識装置モデルを用いて単語列候補を抽出し、単語列候補の中から最も確率が高い単語列を選ぶ技術がある。(たとえば、下記特許文献1〜4を参照。)
特開平7−319884号公報 特開平8−161340号公報 特開平5−197753号公報 特開2003−331214号公報
上述した従来技術をプログラムのソースコードに応用することも考えられる。しかしながら、ソースコードにおける出現頻度の高い単語を抽出することによってプログラムの機能を把握しようとしても、抽出した単語のみでは、プログラムの機能を把握することが困難である。
1つの側面では、本発明は、プログラムの機能を把握し易くすることを図る文字列抽出方法、文字列抽出装置、および文字列抽出プログラムを提供することを目的とする。
本発明の一側面によれば、プログラムのソースコードに含まれ、ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、各々の文字列がプログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、各々の文字列のレベルに基づいて、各々の文字列から少なくとも2つの文字列を選択し、選択した少なくとも2つの文字列の命令の名称における出現順序を示す情報を生成する文字列抽出方法、文字列抽出装置、および文字列抽出プログラムが提案される。
本発明の一態様によれば、プログラムの機能を把握し易くすることを図ることができるという効果を奏する。
図1は、本実施の形態にかかる文字列抽出装置の動作例を示す説明図である。 図2は、文字列抽出装置のハードウェア構成例を示すブロック図である。 図3は、文字列抽出装置の機能例を示すブロック図である。 図4は、クラスタに含まれるクラス一覧の例を示す説明図である。 図5は、完全修飾名を単語に分割した例を示す説明図である。 図6は、n−gramリストの記憶内容の一例を示す説明図である。 図7は、Tf−Idfスコアリストの記憶内容の一例を示す説明図である。 図8は、完全修飾名から、単語を結合した結合文字列を抽出する処理の一例を示す説明図である。 図9は、完全修飾名から、結合文字列が含まれる完全修飾名に一致する組み合わせの結果の一例を示す説明図である。 図10は、文字列拡張処理の第1の例を示す説明図である。 図11は、文字列拡張処理の第2の例を示す説明図である。 図12は、文字列拡張処理の第3の例を示す説明図である。 図13は、出力結果の例を示す説明図である。 図14は、文字列抽出処理手順の一例を示すフローチャートである。 図15は、クラスタ内文字列抽出処理手順の一例を示すフローチャートである。 図16は、文字列拡張処理手順の一例を示すフローチャートである。
以下に添付図面を参照して、開示の文字列抽出方法、文字列抽出装置、および文字列抽出プログラムの実施の形態を詳細に説明する。
図1は、本実施の形態にかかる文字列抽出装置の動作例を示す説明図である。文字列抽出装置100は、文字列を抽出するコンピュータである。具体的に、文字列抽出装置100は、プログラムのソースコードに含まれ、ソースコード内で定義された命令の名称から、プログラムを特徴付ける文字列を抽出する。以下、文字列抽出装置100が用いられる場面について説明する。
アプリケーションプログラムのソースコードは、保守を行い易くするため、プログラムの構造に基づいて、階層型のディレクトリ構造に分類されることがある。以下、アプリケーションプログラムを、単に「アプリ」と称する。
ここで、ソースコードは、階層構造に分類できるプログラミング言語であれば、どのような言語で記述されていてもよい。たとえば、ソースコードは、C言語、C++言語、Java(登録商標)といったプログラミング言語で記述されている。ソースコード内で定義された命令の名称は、アプリの開発者によって付与されており、命令が有する機能の特徴を表している可能性が高い。また、ソースコード内で定義された命令の名称は、1つの命令に対する名称でもよいし、一連の命令に対して付与された名称でもよい。また、具体的な命令の名称の定義の仕方は、プログラミング言語の仕様によって異なる。そこで、文字列抽出装置100は、プログラミング言語の仕様に従って構文解析を行うことにより、ソースコード内で定義された命令の名称を抽出する。
具体例として、ソースコードがC言語で記述されていれば、ソースコード内で定義された命令の名称は、ソースコード内で定義された命令を纏めた関数の名称である。また、ソースコードがC++言語またはJavaで記述されていれば、ソースコード内で定義された命令の名称は、ソースコード内で定義された命令であるメンバ関数や変数であるメンバ変数を纏めた、クラスの名称である。クラスの名称として、クラスの名称そのものでもよいし、クラス内のメンバ関数の名称でもよい。本実施の形態では、ソースコードは、Javaで記述されているものとする。
ソースコードがJavaである場合、階層構造が、ファイルシステムのディレクトリに一致する。さらに、Javaでは、ディレクトリの名称を結合した文字列が、パッケージの名称となる。パッケージは、複数のクラスを纏めたものである。文字列抽出装置100は、プログラムのソースコード内のクラスの名称から、プログラムを特徴付ける文字列を抽出する。クラスの名称は、クラスを一意に特定する完全修飾名であることが好ましい。完全修飾名は、クラス名に、パッケージ名を追加した文字列である。
アプリの保守者は、あるディレクトリに含まれるソースコードの機能を、あるディレクトリの名称から、ソースコードの内容を閲覧せずとも、ある程度予測することができる。予測できる理由として、ディレクトリの名称は、ソースコードの機能の概要に基づいて付与されることがあるためである。しかしながら、アプリのソースコードは、変更や改修が行われると、プログラムの構造と、ディレクトリ構造とがずれる傾向がある。たとえば、変更を行う変更者が、プログラムの構造を正しく把握せずに変更を行った結果、あるディレクトリ内に、機能が異なるソースコードが混在して、プログラムの構造とディレクトリ構造とがずれてしまう。プログラムの構造とディレクトリ構造とがずれてしまった場合、アプリの保守者は、あるディレクトリの名称を閲覧しても、あるディレクトリに含まれるソースコードの機能を予測することが難しくなる。このように、アプリの保守者がアプリの機能を理解する際に、ディレクトリは、適切な構造ではない場合がある。
アプリの保守者がプログラムの構造を容易に把握するために、たとえば、複数のソースコードで実現されるアプリを、ソースコード内のクラスの呼び出し関係を用いて、複数のクラスタに分類する技術がある。1つのクラスタが、ある機能を実現することが多いため、クラスタを特徴付ける単語を抽出することにより、クラスタの機能を把握しやすくなる。文字列抽出装置100は、プログラムのソースコード内のクラスの名称から、プログラムを特徴付ける文字列を抽出してもよいし、プログラムを分類したクラスタに含まれるソースコード内のクラスの名称から、クラスタを特徴付ける文字列を抽出してもよい。以下の説明では、後者の例を用いて説明を行う。
ここで、単語とは、クラスの名称を所定の規則により分割した文字列とする。たとえば、クラスの名称が、所定の規則として単語の最初を大文字で書き表すキャメルケースで表されている場合には、クラスの名称を大文字が出現する度に分割することにより、各単語を得ることができる。また、クラスの名称が、所定の規則としてアンダーバー“_”等の区切り文字で表されている場合には、クラスの名称を区切り文字が出現する度に分割することにより、各単語を得ることができる。また、プログラム内に、名称がキャメルケースで表されたクラスと、名称が区切り文字を用いて表されたクラスとが混在してもよい。また、単語は、大文字小文字を区別してもしなくてもよい。本実施の形態では、大文字と小文字違いの単語は、同一の単語と見なすこととする。
また、アプリの保守者がクラスタの構造を容易に把握するため、クラスタに含まれる単語の特徴抽出として、Tf−Idfを用いる技術がある。Tf−Idfは、クラスタを特徴付けるレベルである。Tf−Idfスコアが高い単語が、より重要な単語であることを示す。Tf−Idfスコアの具体的な算出方法については、図7にて後述する。また、クラスタごとに、クラスタを特徴付ける単語を抽出する技術が、たとえば、下記参考文献1と参考文献2に記載される。
(参考文献1:Adrian Kuhn、他2名、「Semantic clustering:Identifying topics in source code」、2007、Information and Software Technology、49、pp.230−243)
(参考文献2:Anna Corazza、他2名、「A Probabilistic based Approach towards Software System Clustering」、2010、14th European Conference on Software Maintenance and Reengineering、pp.88−96)
アプリの保守者は、Tf−Idfスコアが高い単語を閲覧することにより、クラスタを特徴付ける単語を把握することができるが、Tf−Idfスコアが高い単語同士の関係は判らないため、クラスタの特徴を把握することが難しい。
そこで、文字列抽出装置100は、クラスの完全修飾名から、クラスタ内のTf−Idfスコアの高い単語を結合した文字列に一致する部分を抽出する。文字列抽出装置100を利用したアプリの保守者は、抽出した文字列を閲覧することにより、クラスタの機能を把握し易くなる。以下、アプリの保守者を、「利用者」と呼称する。
図1には、クラスタ101を表示してある。クラスタ101は、階層構造として、たとえば、ディレクトリcom内に、ディレクトリcompanyがある。また、ディレクトリcompany内に、たとえば、ディレクトリproductがある。さらに、ディレクトリproduct内に、たとえば、ディレクトリjdbcがある。さらに、ディレクトリjdbc内に、たとえば、SYMDatabaseMetaData.javaファイルがある。SYMDatabaseMetaData.javaファイルは、SYMDatabaseMetaDataクラスが記載される。
文字列抽出装置100は、クラスタ101のソースコードに含まれるクラスの名称を所定の規則により分割した各々の単語と、各々の単語がクラスタ101を特徴付けるレベルとを関連付けて記憶するTf−Idfスコアリスト111を生成する。図1に示すTf−Idfスコアリスト111は、レコード111−1〜レコード111−3を有する。たとえば、図1の例では、単語“jdbc”のTf−Idfスコアが0.03038であり、単語“symdatabase”のTf−Idfスコアが0.02939であり、単語“meta”のTf−Idfスコアが0.02064である。
また、文字列抽出装置100は、クラスの完全修飾名に基づいて、n−gramリスト112を生成する。図1に示すn−gramリスト112は、レコード112−2−1〜レコード112−2−4、レコード112−3−1を有する。n−gramとは、文字列から切り出したn個数の文字の並びの集合である。切り出す単位を変えてもよく、本実施の形態では、n−gramは、文字列から切り出したn個の単語の並びの集合とする。また、nを長さとし、たとえば、長さ2のn−gramを、2−gramと表現することもある。また、本実施の形態では、n−gram内の単語の区切りとして、ピリオド“.”を用いる。
たとえば、図1の例では、SYMDatabaseMetaDataクラスの完全修飾名“com.company.product.jdbc.SYMdatabaseMetaData”に基づいたn−gramを示す。たとえば、n−gramリスト112は、2−gramとして、“com.company”、“company.product”、…、を記憶し、3−gramとして、…、“jdbc.symdatabase.meta”、…、を記憶する。
Tf−Idfスコアリスト111およびn−gramリスト112は、文字列抽出装置100以外の他の装置によって生成されてもよい。Tf−Idfスコアリスト111およびn−gramリスト112は、文字列抽出装置100がアクセス可能な記憶領域に存在する。
文字列抽出装置100は、Tf−Idfスコアリスト111から、各々の単語のTf−Idfに基づいて、各々の単語から少なくとも2つの単語を選択する。たとえば、文字列抽出装置100は、Tf−Idfスコアが高い、単語“jdbc”と単語“symdatabase”を選択する。
そして、文字列抽出装置100は、選択した少なくとも2つの単語のクラスの名称における出現順序を示す情報を生成する。クラスの名称における少なくとも2つの単語の出現順序は、n−gramリスト112を参照することにより特定することができる。具体的に、単語“jdbc”と単語“symdatabase”の出現順序は、レコード112−2−4が示す“jdbc.symdatabase”である。
たとえば、文字列抽出装置100は、クラスの名称における少なくとも2つの単語の出現順序を示す情報の第1の例として、レコード112−2−4が示す“jdbc.symdatabase”を生成する。また、文字列抽出装置100は、クラスの名称における少なくとも2つの単語の出現順序を示す情報の第2の例として、完全修飾名から抽出した“jdbc.SYMdatabase”を生成してもよい。さらに、文字列抽出装置100は、クラスの名称における少なくとも2つの単語の出現順序を示す情報の第3の例として、少なくとも2つの単語の出現順序の値が付与された“4:jdbc,5:symdatabase”を生成してもよい。生成された“:”の左側の数値が、“:”の右側にある単語の出現順序を示す。
生成された情報を出力することにより、文字列抽出装置100は、利用者に、単語の関係が判り易くなったクラスタの機能を特徴付ける文字列を提供することができる。提供を受けた利用者は、クラスタの機能を特徴付ける文字列を閲覧することにより、クラスタの機能を把握し易くなる。以下、図2〜図16を用いて、文字列抽出装置100の詳細について説明する。
図2は、文字列抽出装置のハードウェア構成例を示すブロック図である。図2において、文字列抽出装置100は、CPU(Central Processing Unit)201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、を含む。また、文字列抽出装置100は、ディスクドライブ204と、ディスク205と、通信インターフェース206と、を含む。また、文字列抽出装置100は、ディスプレイ207と、キーボード208と、マウス209とを含む。また、CPU201〜マウス209はバス210によってそれぞれ接続されている。
CPU201は、文字列抽出装置100の全体の制御を司る演算処理装置である。ROM202は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM203は、CPU201のワークエリアとして使用される揮発性メモリである。
ディスクドライブ204は、CPU201の制御に従ってディスク205に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ204には、たとえば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する不揮発性メモリである。たとえばディスクドライブ204が磁気ディスクドライブである場合、ディスク205には、磁気ディスクを採用することができる。また、ディスクドライブ204が光ディスクドライブである場合、ディスク205には、光ディスクを採用することができる。また、ディスクドライブ204がソリッドステートドライブである場合、ディスク205には、半導体素子メモリを採用することができる。
通信インターフェース206は、ネットワーク211と内部とのインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース206は、通信回線を通じてネットワーク211となるLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどに接続され、ネットワーク211を介して他の装置に接続される。通信インターフェース206には、たとえば、モデムやLANアダプタなどを採用することができる。
ディスプレイ207は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ207には、たとえば、CRT(Cathode Ray Tube)、TFT(Thin Film Transistor)液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
キーボード208は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード208は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス209は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス209は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
(文字列抽出装置100の機能)
次に、文字列抽出装置100の機能について説明する。図3は、文字列抽出装置の機能例を示すブロック図である。文字列抽出装置100は、選択部301と、判断部302と、特定部303と、生成部304と、を含む。制御部となる選択部301〜生成部304は、記憶装置に記憶されたプログラムをCPU201が実行することにより、選択部301〜生成部304の機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、ディスク205などである。または、通信インターフェース206を経由して他のCPUが実行することにより、選択部301〜生成部304の機能を実現してもよい。
また、文字列抽出装置100は、Tf−Idfスコアリスト111とn−gramリスト112にアクセス可能である。Tf−Idfスコアリスト111とn−gramリスト112は、RAM203、ディスク205といった記憶装置に格納される。
Tf−Idfスコアリスト111は、クラスタ101のソースコードに含まれ、ソースコード内で定義されたクラスの名称を所定の規則により分割した各々の単語と、各々の文字列がクラスタ101を特徴付けるレベルとを関連付けて記憶する。また、Tf−Idfスコアリスト111は、複数のクラスの名称を所定の規則により分割した各々の単語と、各々の文字列がクラスタ101を特徴付けるレベルとを関連付けて記憶してもよい。
n−gramリスト112は、クラスタ101のソースコードに含まれ、ソースコード内で定義されたクラスの名称を切り出したn個の単語の並びを記憶する。単語には、クラスの名称の先頭または末尾を示す情報が含まれてもよい。
選択部301は、Tf−Idfスコアリスト111から、各々の単語のレベルに基づいて、各々の単語から少なくとも2つの単語を選択する。選択する単語数は、2つ以上であり、クラスの名称となる全ての単語より1少ない数である。たとえば、選択部301は、Tf−Idfスコアがある閾値以上となる単語全てを選択する。
また、選択部301は、Tf−Idfスコアリスト111から、各々の単語から各々の単語のレベルが高い順に少なくとも2つの単語を選択してもよい。たとえば、選択部301は、Tf−Idfスコアが高い順に、利用者により予め指定された個数となる単語を選択する。
また、選択部301は、Tf−Idfスコアリスト111から、各々の単語のレベルに基づいて、各々の単語から3個以上となる第1の個数の単語を選択してもよい。さらに、選択部301は、判断部302が第1の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致しないと判断した場合、各々の単語から第1の個数より少なく2以上となる第2の個数の単語を選択してもよい。なお、選択された単語は、RAM203、ディスク205などの記憶領域に記憶される。
判断部302は、選択部301によって選択された少なくとも2つの単語をクラスの名称における出現順序に従って結合した第1の文字列がクラスの名称の一部に一致するか否かを判断する。クラスの名称における出現順序は、n−gramリスト112を参照することにより特定することができる。
たとえば、判断部302は、第1の文字列が、n−gramリスト112のn−gramとして登録されていない場合、第1の文字列がクラスの名称の一部に一致しないと判断する。また、判断部302は、n−gramリスト112を参照せず、選択された少なくとも2つの単語を結合する順序を入れ替えることにより得られる文字列群の文字列ごとに、該当の文字列がクラスの名称の一部に一致するか否かを判断してもよい。文字列群の全てがクラスの名称の一部に一致しない場合、判断部302は、第1の文字列がクラスの名称の一部に一致しないと判断する。
また、判断部302は、第1の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致するか否かを判断してもよい。さらに、判断部302は、第2の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致するか否かを判断してもよい。
また、判断部302は、選択部301によって選択された少なくとも2つの単語を結合した文字列が少なくともいずれか一つのクラスの名称の一部または全部に一致するか否かを判断してもよい。たとえば、少なくとも2つの単語が“jdbc”と“meta”とであるとする。このとき、判断部302は、“jdbc”と“meta”を結合した文字列“jdbc.meta”と“meta.jdbc”という文字列群のうち、少なくともいずれか一つのクラスの名称の一部または全部に一致する文字列があるか否かを判断する。
また、判断部302は、選択部301によって選択された少なくとも2つの単語を結合した文字列が複数のクラスのうちの1以上のクラスの名称の一部または全部に一致するか否かを判断する。このとき、判断部302は、少なくとも2つの単語を結合した文字列が、2以上、3以上、…、のクラスの名称の一部または全部に一致するか否かを判断してもよい。たとえば、判断部302は、ソースコードに含まれるクラスの名称の個数に基づいて、一致するクラスの個数を変化させてもよい。たとえば、ソースコードに含まれるクラスの名称の個数がある閾値以下の場合、判断部302は、1以上のクラスの名称の一部または全部に一致するか否かを判断してもよい。
なお、少なくとも2つの単語を結合した文字列が1つのクラスだけでなく2以上のクラスの名称の一部または全部に一致すれば、少なくとも2つの単語を結合した文字列がクラスタ内に複数回出現していることになる。したがって、少なくとも2つの単語を結合した文字列は、クラスタを特徴付ける文字列の候補に相応しいものと言える。たとえば、判断部302は、Tf−Idfスコアがある閾値以上の単語を結合した文字列がn−gramリスト112にあるか否かを判断する。
また、判断部302は、特定部303によって1以上のクラスの名称に対応して特定された文字列の直前の単語または直後の単語のうちの少なくともいずれかの単語が全て同一の内容であるか否かを判断してもよい。
たとえば、いずれかの単語が直前の単語であれば、n−gramリスト112に、直前の単語の次に、少なくとも2つの単語を結合した文字列が出現するレコードがただ1つある場合に、少なくともいずれかの単語が全て同一の内容であると判断できる。また、少なくともいずれかの単語が直後の単語であれば、n−gramリスト112に、少なくとも2つの単語を結合した文字列の次に直後の単語が出現するレコードがただ1つある場合に、全て同一の内容であると判断できる。さらに、少なくともいずれかの単語が直前の単語および直後の単語であれば、n−gramリスト112に、直前の文字列、少なくとも2つの単語を結合した文字列、直後の単語の順となるレコードがただ1つある場合に、全て同一の内容であると判断できる。
たとえば、少なくとも2つの単語を結合した文字列が、“symresult.set”であるとする。このとき、特定部303によって特定された、少なくとも2つの単語を結合した文字列の直後の単語が“meta”とクラスの名称の先頭または末尾を示す“*”とである場合、判断部302は、特定されたいずれかの単語が同一の内容でないと判断する。なお、判断結果は、RAM203、ディスク205などの記憶領域に記憶される。
特定部303は、次に示す条件の場合、各々の単語のうちの、1以上のクラスの名称における少なくとも2つの単語を結合した文字列の直前の単語および直後の単語のうちの少なくともいずれかの単語を1以上のクラスに対応して特定する。次に示す条件は、判断部302によって少なくとも2つの単語を結合した文字列が1以上のクラスの名称の一部または全部に一致すると判断された場合である。
たとえば、特定部303は、n−gramリスト112を参照して、Tf−Idfスコアがある閾値以上の単語を結合した第1の文字列を含むn−gramを取得する。そして、特定部303は、取得したn−gramから、直前の単語および直後の単語のうちの少なくともいずれかの単語を特定する。また、特定部303は、n−gramリスト112を参照せずに、複数のクラスの名称から少なくとも2つの単語を結合した文字列を検索して、1以上のクラスの名称から検出できた場合、検出した箇所にある文字列の直前の単語または直後の単語を特定してもよい。特定した単語は、RAM203、ディスク205などの記憶領域に記憶される。
生成部304は、選択部301によって選択された少なくとも2つの単語のクラスの名称における出現順序を示す情報を生成する。たとえば、クラスの名称が、“com.company.product.jdbc.SYMdatabaseMetaData”であるとする。さらに、2つの単語が、“jdbc”と“symdatabase”とであり、2つの単語の出現順序がn−gramリスト112のレコード112−2−4が示す“jdbc.symdatabase”であるとする。このとき、生成部304は、“jdbc.symdatabase”を生成する。また、生成部304は、クラスの名称のうち、2つの単語の出現位置に相当する文字列“jdbc.SYMdatabase”を生成してもよい。
さらに、少なくとも2つの文字列は、隣り合った位置になく、離れた位置にあってもよい。たとえば、クラスの名称は前述の例と同じであり、2つの単語が“jdbc”と“meta”とであり、2つの単語の出現順序がn−gramリスト112のレコード112−3−1が示す“jdbc.symdatabase.meta”であるとする。このとき、生成部304は、“_”を、何らかの単語があることを示す識別子として用いて、“jdbc._.meta”を生成する。
また、生成部304は、判断部302によって第1の文字列がクラスの名称の一部かつ全部に一致しないと判断された場合、クラスの名称における少なくとも2つの単語の出現順序を示す情報を生成しなくてもよい。
また、生成部304は、第2の個数の単語をクラスの名称における出現順序に従って結合した文字列がクラスの名称の一部に一致すると判断した場合、第2の個数の単語のクラスの名称における出現順序を示す情報を生成してもよい。
また、生成部304は、判断部302が1以上のクラスの名称に対応して特定したいずれかの単語が全て同一の内容であると判断した場合、少なくとも2つの単語およびいずれかの単語の1以上のクラスの名称における出現順序とを示す情報を生成してもよい。たとえば、少なくとも2つの単語が、“symprepared”と“statement”であり、いずれかの単語として、直後の単語が“*”である場合、生成部304は、“symprepared.statement.*”を生成する。なお、生成した情報は、RAM203、ディスク205などの記憶領域に記憶される。また、生成した情報は、ディスプレイ207に表示されてもよいし、ネットワーク211を経由して他の装置に送信されてもよい。
図4は、クラスタに含まれるクラス一覧の例を示す説明図である。表401は、あるクラスタに含まれるクラス一覧を表示する。表401では、クラスを、クラス名とパッケージ名と結合した完全修飾名として表示する。本実施の形態では、パッケージの階層構造が、実際のファイルシステム中では階層ディレクトリ構造に対応するものとする。表401で示すクラス群402とクラス群403は、Javaとリレーショナルデータベースの接続のためのAPI(Application Programming Interface)であるJDBCに関する機能を有するクラス群である。
表401で示すクラス群402とクラス群403は、“com”フォルダ内の、“company”フォルダ内の、“product”フォルダ内にある。そして、クラス群402は、“product”フォルダ内の“jdbc”フォルダに含まれる。一方、クラス群403は、“product”フォルダ内の“jdbc2”フォルダに含まれる。このように、クラス群402とクラス群403は、共にJDBCに関する機能を有するクラスであるにも関わらず、異なるフォルダに分類される。
図5は、完全修飾名を単語に分割した例を示す説明図である。表501は、完全修飾名を単語に分割した例を示す。表501は、レコード501−1〜レコード501−3を含む。表501は、クラスタ内完全修飾名と、単語に分割した結果とを含む。クラスタ内完全修飾名フィールドには、分割する前となる完全修飾名が格納される。単語に分割した結果フィールドには、分割した結果が格納される。
たとえば、レコード501−1は、“com.company.product.jdbc.Jdbc3AbsSYMResultSetMetaData”を分割した結果を示す。分割した結果は、“com”、“company”、“product”、“jdbc”、“jdbc3”、“abs”、“symresult”、“set”、“meta”、“data”となる。
図6は、n−gramリストの記憶内容の一例を示す説明図である。図6では、完全修飾名を分割した単語群と、完全修飾名の先頭または末尾を示す端末文字とからn−gramを生成した結果を記憶するn−gramリストの記憶内容の一例を示す。n−gramリスト112は、レコード601−2−1〜レコード601−8−1を示す。端末文字は、クラスの名称およびパッケージの名称に出現しない文字であることが好ましい。たとえば、Javaの例では、端末文字は、クラスの名称として用いることができない文字であり、かつ、パッケージ名として用いることができない文字であれば、どのような文字であってもよい。以下、端末文字も単語として扱う。本実施の形態では、“*”を端末文字とする。
n−gramリスト112は、“com.company.product.jdbc.SYMPreparedStatement”からn−gramを生成した例である。n−gramリスト112は、レコード601−2−1〜レコード601−2−7が示す単語数2から、レコード601−8−1が示す単語数8までを示す。
図7は、Tf−Idfスコアリストの記憶内容の一例を示す説明図である。図7では、あるクラスタに含まれる単語のTf−Idfスコアの高い順にソートした結果を記憶するTf−Idfスコアリスト111の記憶内容の一覧を示す。Tf−Idfスコアリスト111の各フィールドには、“:”の左側には単語が格納され、“:”の右側には単語のTf−Idfスコアが格納される。Tf−Idfスコアリスト111は、たとえば、“jdbc”が最もTf−Idfスコアが高く“0.03038”であり、“symdatabase”と“symprepared”とが次にTf−Idfスコアが高く“0.02939”である。
ここで、具体的なTf−Idfスコアの算出方法について説明する。クラスタjにおける単語iのスコアTf−Idf(i,j)は下記(1)式により算出される。
Tf−Idf(i,j)=TF(i,j)×IDF(i) …(1)
ただし、TF(i,j)はクラスタj内に単語iが出現する頻度を求める関数である。また、IDF(i)は、全てのクラスタに単語iが出現する頻度の逆数を求める関数である。
クラスタjにおける単語iの出現回数をfreq(i,j)、クラスタjに含まれる単語i以外の単語のうち最大の出現回数をmaxOthers(i,j)とすると、クラスタjにおける単語iの単語頻度TF(i,j)は、下記(2)式により算出される。
TF(i,j)=freq(i,j)/maxOthers(i,j) …(2)
また、クラスタの総数をN、クラスタのうち単語iが表れるクラスタ数をn(i)とするとき、逆文書頻度IDF(i)は、下記(3)式により算出される。
IDF(i)=log(N/n(i)) …(3)
図8は、完全修飾名から、単語を結合した結合文字列を抽出する処理の一例を示す説明図である。文字列抽出装置100は、Tf−Idfスコアリスト111から、上位X個の単語を選択し、選択した単語の集合を、Remainとする。たとえば、Xを10とする。続けて、文字列抽出装置100は、Remainに含まれる単語の組み合わせを持つn−gramが存在するか否かを検索する。
具体的に、図8の例では、文字列抽出装置100は、n−gramリスト112で示す8−gramには、Remainに含まれる単語の組み合わせを持つn−gramが存在しないと判断する。n−gramが存在しないと判断した場合、文字列抽出装置100は、Remainに含まれる単語から、さらに単語数が少ない組み合わせを生成する。たとえば、文字列抽出装置100は、Remainから、“symcconnection”を取り除いた単語群の組み合わせを持つn−gramが存在するか否かを検索する。図8の例では、文字列抽出装置100は、n−gramリスト112で示す8−gramには、Remainから、“symcconnection”を取り除いた単語の組み合わせを持つn−gramが存在しないと判断する。同様に、文字列抽出装置100は、Remainから、“data”を取り除いた単語の組み合わせを持つn−gramが存在しないと判断する。
Remainから取り除く単語の選択方法は、どのような単語を選択してもよいが、たとえば、文字列抽出装置100は、Tf−Idfのスコアの小さい単語から選択してもよい。これにより、文字列抽出装置100は、可能な限り、クラスタの特徴を表す単語の組み合わせを持つn−gramを取得することができる。
このように、文字列抽出装置100は、Remainから単語を取り除く処理を繰り返して、取り除いた残余の単語の組み合わせを持つn−gramを検索する。図8の例では、Remainから、“ex,log,statement,symcconnection,symprepared,symresult”を取り除いた単語の組み合わせを持つ4−gramが存在したと判断する。文字列抽出装置100は、存在した“jdbc.symdatabase.meta.data”をRemainから除いて図8に示す抽出する処理を、Remainに含まれる単語がなくなるまで続行する。
図9は、完全修飾名から、結合文字列が含まれる完全修飾名に一致する組み合わせの結果の一例を示す説明図である。表901は、単語の組み合わせとn−gramとの一致結果とを有する。図9に示す表901は、レコード901−10−1、レコード901−9−1〜レコード901−9−3、…、レコード901−4−1、…、レコード901−2−1を有する。
単語の組み合わせフィールドには、完全修飾名を分割した各単語の一部また全部による組み合わせが格納される。n−gramとの一致結果フィールドは、単語の組み合わせフィールドに格納された単語の組み合わせが、生成済みのn−gramと一致するか否かを示す値が格納される。
たとえば、レコード901−10−1は、単語“data,ex,jdbc,log,meta,statement,symcconnection,symdatabase,symprepared,symresult”の組み合わせが、生成済みのn−gramと一致しないことを示す。また、レコード901−4−1は、単語“data,jdbc,meta,symdatabase”の組み合わせが、生成済みのn−gramと一致することを示す。次に、n−gramと一致した“data,jdbc,meta,symdatabase”と、“statement,symprepared”と、n−gramに一致しなかった“ex,log,symcconnection,symresult”について、文字列拡張処理を行う。
図10は、文字列拡張処理の第1の例を示す説明図である。図10では、“data,jdbc,meta,symdatabase”について、文字列拡張処理を行う場合の例である。文字列抽出装置100は、生成済みのn−gramから、単語列ng“jdbc.symdatabase.meta.data”から始まり、長さが1長い5−gramを検索する。図10の例では、レコード601−5−5が示す“jdbc.symdatabase.meta.data.*”という1つの5−gramが検出される。
1つのn−gramを検出した場合、文字列抽出装置100は、単語列ngを“jdbc.symdatabase.meta.data.*”に設定して、単語列ngから始まり、長さが1長い6−gramを検索する。図10の例では、単語列ngから始まり、長さが1長い6−gramが検出できなかったとする。この場合、文字列抽出装置100は、単語列ngで終わり、長さが1長い6−gramを検索する。図10の例では、レコード601−6−4が示す“product.jdbc.symdatabase.meta.data.*”という1つの6−gramが検出される。
1つのn−gramを検出した場合、文字列抽出装置100は、単語列ngを“product.jdbc.symdatabase.meta.data.*”に設定して、単語列ngで終わり、長さが1長い7−gramを検索する。図10の例では、レコード601−7−3が示す“com.company.product.jdbc.symdatabase.meta.data.*”という1つの7−gramが検出される。
1つのn−gramを検出した場合、文字列抽出装置100は、単語列ngを“com.company.product.jdbc.symdatabase.meta.data.*”に設定して、単語列ngで終わり長さが1長い8−gramを検索する。図10の例では、レコード601−8−2が示す“*.com.company.product.jdbc.symdatabase.meta.data.*”という1つの8−gramが検出される。8−gramより長いn−gramがないため、文字列抽出装置100は、“*.com.company.product.jdbc.symdatabase.meta.data.*”から端末文字を取り除いて出力する。具体的に、文字列抽出装置100は、“com.company.product.jdbc.symdatabase.meta.data”を出力する。
図11は、文字列拡張処理の第2の例を示す説明図である。図11では、“statement,symprepared”について、文字列拡張処理を行う場合の例である。文字列抽出装置100は、生成済みのn−gramから、単語列ng“symprepared.statement”から始まり、長さが1長い3−gramを検索する。図11の例では、レコード601−3−6が示す“symprepared.statement.*”という1つの3−gramが検出される。
1つのn−gramを検出した場合、文字列抽出装置100は、単語列ngを“symprepared.statement.*”に設定して、単語列ngから始まり、長さが1長い4−gramを検索する。図11の例では、単語列ngから始まり、長さが1長い4−gramが検出できなかったとする。この場合、文字列抽出装置100は、単語列ngで終わり、長さが1長い4−gramを検索する。図11の例では、レコード601−4−5が示す“jdbc.symprepared.statement.*”と、レコード601−4−7が示す“abs.symprepared.statement.*”という2つの4−gramが検出される。
2つ以上のn−gramを検出した場合、文字列抽出装置100は、単語列ngから端末文字を取り除いた場合の単語数が2個以上であり、単語列ng内の単語の関係が利用者にとって判り易くなったため、これ以上の文字列拡張処理を行わない。したがって、文字列抽出装置100は、“symprepared.statement.*”から端末文字を取り除いた“symprepared.statement”を出力する。
図12は、文字列拡張処理の第3の例を示す説明図である。図12では、“symresult”について、文字列拡張処理を行う場合の例である。単語列ngに含まれる単語数が1つである場合、文字列抽出装置100は、単語列ngと他の単語を結合して、利用者にとって判り易くなることを図る。文字列抽出装置100は、生成済みのn−gramから、単語列ng“symresult”から始まり、長さが1長い2−gramを検索する。図12の例では、レコード601−2−8が示す“symresult.set”という1つの2−gramが検出される。
1つのn−gramを検出した場合、文字列抽出装置100は、単語列ngを“symresult.set”に設定して、単語列ngから始まり、長さが1長い3−gramを検索する。図12の例では、レコード601−3−7が示す“symresult.set.meta”と、レコード601−3−8が示す“symresult.set.*”という2つの3−gramが検出される。
2つ以上のn−gramを検出した場合、文字列抽出装置100は、可能な限り1つのn−gramを検出するために、単語列ngで終わり、長さが1長い3−gramを検索する。図12の例では、レコード601−3−9が示す“abs.symresult.set”と、レコード601−3−10が示す“jdbc.symresult.set”という2つの3−gramが検出される。
2つ以上のn−gramを検出した場合、文字列抽出装置100は、単語列ngから端末文字を取り除いた場合の単語数が2個以上であり、単語列ng内の単語の関係が利用者にとって判り易くなったため、これ以上の文字列拡張処理を行わない。したがって、文字列抽出装置100は、“symresult.set”を出力する。
図13は、出力結果の例を示す説明図である。表1301は、文字列拡張処理後の文字列と、文字列拡張処理前の文字列とを示す。表1301は、レコード1301−1〜レコード1301−6を含む。各レコードの括弧()の外に示した文字列が文字列拡張処理後の文字列を示す。また、各レコードの括弧の中に示した文字列が文字列拡張処理前の文字列を示す。
たとえば、レコード1301−1が示す“com.company.product.jdbc.symdatabase.meta.data”から、利用者は、データベースのメタデータに関する処理を行うことが予測できる。また、レコード1301−2が示す“symprepared.statement”から、利用者は、検索文字列を扱う処理があることを予測できる。さらに、レコード1301−3が示す“symresult.set”から、利用者は、検索結果を一纏めにして処理することがあることを予測できる。同様に、レコード1301−4が示す“lduser.log”と“symuser.log”から、利用者は、ユーザログに関する処理があることを予測できる。
また、レコード1301−5が示す“iconnection.ex”と“statement.ex”から、利用者は、iconnectionおよびstatementの拡張処理があることを予測できる。さらに、レコード1301−6が示す“abs.symcconnection”から、利用者は、symcconnectionについて纏めて処理を行う箇所があることを予測できる。
続けて、図4〜図13で示した動作を行うフローチャートを、図14〜図16を用いて説明する。
図14は、文字列抽出処理手順の一例を示すフローチャートである。文字列抽出処理は、クラスの完全修飾名からクラスタを特徴付ける文字列を抽出する処理である。文字列抽出装置100は、クラスタ分割結果から、クラスタ名とクラスタに含まれるクラス名の完全修飾名の集合を取得する(ステップS1401)。次に、文字列抽出装置100は、完全修飾名を単語に分割する(ステップS1402)。単語に分割した結果が、表501となる。続けて、文字列抽出装置100は、分割した各単語のTf−Idfスコアを算出する(ステップS1403)。次に、文字列抽出装置100は、クラスタ名と、クラスタに含まれる単語および単語のTf−Idfスコアとを関連付ける(ステップS1404)。関連付けた結果が、Tf−Idfスコアリスト111となる。
続けて、文字列抽出装置100は、複数のクラスタの中から、1つ目のクラスタを選択する(ステップS1405)。次に、文字列抽出装置100は、選択したクラスタに対してクラスタ内文字列抽出処理を実行する(ステップS1406)。クラスタ内文字列抽出処理は、図15にて後述する。続けて、文字列抽出装置100は、全てのクラスタを選択したか否かを判断する(ステップS1407)。まだ選択していない場合(ステップS1407:No)、文字列抽出装置100は、次のクラスタを選択する(ステップS1408)。ステップS1408の処理終了後、文字列抽出装置100は、ステップS1406の処理に移行する。
全てのクラスタを選択した場合(ステップS1407:Yes)、文字列抽出装置100は、文字列抽出処理を終了する。文字列抽出処理を実行することにより、文字列抽出装置100は、クラスの完全修飾名からクラスタを特徴付ける文字列を抽出することができる。
図15は、クラスタ内文字列抽出処理手順の一例を示すフローチャートである。クラスタ内の文字列抽出処理は、選択したクラスタに含まれるクラスの完全修飾名からクラスタを特徴付ける文字列を抽出する処理である。文字列抽出装置100は、選択したクラスタ内のクラスごとに、クラスの完全修飾名の先頭と末尾に端末文字を付けた文字列から、n−gramを生成する(ステップS1501)。生成した結果の一覧が、n−gramリスト112となる。
次に、文字列抽出装置100は、Tf−Idfスコアが高い順にX個の単語を選択する(ステップS1502)。ステップS1502の処理において、文字列抽出装置100は、Tf−Idfスコアが0より大きいものを使用するようにしてもよい。続けて、文字列抽出装置100は、選択した単語の集合をRemainに設定する(ステップS1503)。次に、文字列抽出装置100は、numをRemainに含まれる単語の数に設定する(ステップS1504)。続けて、文字列抽出装置100は、Remainに含まれる単語からnum個選択する単語の組み合わせの集合Combを生成する(ステップS1505)。たとえば、Remainが単語A、単語B、単語Cという3つの単語を含んでおり、numが2であるとする。このとき、Combは、単語Aおよび単語Bと、単語Aおよび単語Cと、単語Bおよび単語Cという3つの組み合わせを含む。
次に、文字列抽出装置100は、Combから、未選択の単語の組み合わせを選択する(ステップS1506)。未選択のうちのどの単語の組み合わせを優先して選択するかは、たとえば、文字列抽出装置100は、Tf−Idfのスコアの高い単語同士の組み合わせを優先して選択してもよい。これにより、文字列抽出装置100は、可能な限り、クラスタの特徴を表す単語の組み合わせを持つn−gramを取得することができる。
続けて、文字列抽出装置100は、選択した単語の組み合わせがn−gramに存在するか否かを判断する(ステップS1507)。選択した単語の組み合わせがn−gramに存在する場合(ステップS1507:Yes)、文字列抽出装置100は、選択した単語の組み合わせに対して、文字列拡張処理を実行する(ステップS1508)。文字列拡張処理は、図16にて後述する。続けて、文字列抽出装置100は、Remainから、n−gramに存在した単語の組み合わせに含まれる単語を除去する(ステップS1509)。ステップS1509の実行終了後、文字列抽出装置100は、ステップS1504の処理に移行する。
選択した単語の組み合わせがn−gramに存在しない場合(ステップS1507:No)、文字列抽出装置100は、続けて、Combに含まれる単語の組み合わせを全て選択したか否かを判断する(ステップS1510)。まだ選択していない単語の組み合わせがある場合(ステップS1510:No)、文字列抽出装置100は、ステップS1506の処理に移行する。
全ての単語の組み合わせを選択した場合(ステップS1510:Yes)、文字列抽出装置100は、numをデクリメントする(ステップS1511)。続けて、文字列抽出装置100は、numが1か否かを判断する(ステップS1512)。numが2以上である場合(ステップS1512:No)、文字列抽出装置100は、ステップS1505の処理に移行する。numが1である場合(ステップS1512:Yes)、文字列抽出装置100は、Remainに残った単語ごとに、文字列拡張処理を実行する(ステップS1513)。ステップS1513の処理終了後、文字列抽出装置100は、クラスタ内文字列抽出処理を終了する。クラスタ内文字列抽出処理を実行することにより、文字列抽出装置100は、選択したクラスタに含まれるクラスの完全修飾名からクラスタを特徴付ける文字列を抽出することができる。
図16は、文字列拡張処理手順の一例を示すフローチャートである。文字列拡張処理は、n−gramの文字列を末尾方向または先頭方向に長くする処理である。また、入力された単語列を、ngとする。文字列抽出装置100は、単語列ngから始まり長さが1長いn−gramを検索する(ステップS1601)。検索した結果、文字列抽出装置100は、1つのn−gramを検出したか否かを判断する(ステップS1602)。1つのn−gramを検出した場合(ステップS1602:Yes)、文字列抽出装置100は、検出したn−gramに対して文字列拡張処理を実行する(ステップS1603)。具体的に、ステップS1603の処理は、文字列拡張処理を再帰的に行うことを示す。ステップS1603にて呼び出された文字列拡張処理の終了後、文字列抽出装置100は、ステップS1604の処理を行う。
ステップS1603の処理終了後、文字列抽出装置100は、ステップS1603の文字列拡張処理の出力結果をngに設定する(ステップS1604)。2つ以上のn−gramを検出した、またはn−gramを検出しなかった場合(ステップS1602:No)、またはステップS1604の処理終了後、文字列抽出装置100は、単語列ngで終わり長さが1長いn−gramを検索する(ステップS1605)。ステップS1606〜ステップS1608の処理は、ステップS1602〜ステップS1604と同一であるため、説明を省略する。
2つ以上のn−gramを検出した、またはn−gramを検出しなかった場合(ステップS1606:No)、またはステップS1608の処理終了後、文字列抽出装置100は、ngから端末文字を取り除いた場合の単語数が1か否かを判断する(ステップS1609)。単語数が1でない場合(ステップS1609:No)、文字列抽出装置100は、ngを出力する(ステップS1610)。ステップS1610の処理において、文字列拡張処理がステップS1508の処理またはステップS1513の処理から呼ばれた場合、文字列抽出装置100は、ngをクラスタを特徴付ける文字列として生成する。また、文字列拡張処理がステップS1603の処理またはステップS1607の処理から呼ばれた再帰処理であれば、文字列抽出装置100は、ngを出力結果として呼び元に返す。
単語数が1である場合(ステップS1609:Yes)、文字列抽出装置100は、ngを含む2−gramを出力する(ステップS1611)。ステップS1611の処理において、文字列拡張処理がステップS1508の処理またはステップS1513の処理から呼ばれた場合、文字列抽出装置100は、ngを含む2−gramをクラスタを特徴付ける文字列として生成する。また、文字列拡張処理がステップS1603の処理またはステップS1607の処理から呼ばれた再帰処理であれば、文字列抽出装置100は、ngを含む2−gramを出力結果として呼び元に返す。
ステップS1610、またはステップS1611の処理終了後、文字列抽出装置100は、文字列拡張処理を終了する。文字列拡張処理を実行することにより、文字列抽出装置100は、n−gramの文字列を末尾方向または先頭方向に長くすることができる。
以上説明したように、文字列抽出装置100によれば、クラスの完全修飾名から、クラスタ内のTf−idfスコアに基づいて選択した少なくとも2つの単語の出現順序を示す情報を生成する。利用者は、少なくとも2つの単語の出現順序を示す情報を閲覧することにより、クラスタの機能を把握し易くなる。また、単純に特徴付ける単語をスコア順に列挙するのに比べると、文字列抽出装置100は、完全修飾名の部分文字列として纏める方が把握すべき文字列数が減少し、さらに意味のある文字列を構成することができる。したがって、利用者がクラスタの機能を把握しやすくなることが期待できる。
また、文字列抽出装置100によれば、少なくとも2つの単語を、クラスの名称における少なくとも2つの単語の出現順序に従って結合した文字列を生成してもよい。結合した文字列は、クラスの完全修飾名に近い内容となるため、利用者は、クラスタの機能をより把握しやすくなる。また、文字列抽出装置100によれば、少なくとも2つの文字列が隣り合った位置になく、離れた位置にあっても、何らかの単語があることを示す識別子を用いて、少なくとも2つの文字列を結合した文字列を生成してもよい。何らかの単語があることを示す識別子が“_”であり、生成された文字列が“send._.data”であるとする。利用者は、生成された文字列を閲覧することにより、クラスタの機能が、dataをいずれかに送信する処理であることを予測することができる。
また、文字列抽出装置100によれば、クラスタ内のTf−idfスコアに基づいて選択した単語を結合した文字列が、クラスの名称の一部に一致しない場合、単語を結合した文字列を出力しない。これにより、文字列抽出装置100は、クラスタを特徴付ける可能性が低い文字列を出力しなくなるため、利用者のクラスタの機能の把握を妨げることを抑制することができる。
また、文字列抽出装置100によれば、Tf−idfスコアの高い順に、単語を選択してもよい。これにより、文字列抽出装置100は、クラスタをより特徴付ける単語が結合された文字列を抽出することができる。
また、文字列抽出装置100によれば、3以上の第1の個数の単語を結合した文字列が、クラスの名称の一部に一致しない場合、第1の個数より少ない第2の個数の単語を結合した文字列が、クラスの名称の一部に一致するか否かを判断してもよい。これにより、文字列抽出装置100は、クラスタを特徴付け、かつ、より長い文字列を抽出することができる。
また、文字列抽出装置100によれば、選択した単語を結合した文字列が1つ以上のクラスの名称の一部に一致した場合、文字列の直前および直後にある単語が、1つ以上のクラスの名称間で一致するならば、前述の単語を含めて出力してもよい。これにより、文字列抽出装置100は、クラスタをより特徴付ける文字列に結合して出力することになり、出力される文字列が長くなるため、利用者は、よりクラスタの機能を把握し易くなる。
なお、本実施の形態で説明した文字列抽出方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本文字列抽出プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本文字列抽出プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータが、
プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択し、
選択した前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行することを特徴とする文字列抽出方法。
(付記2)前記情報は、選択した前記少なくとも2つの文字列を、前記命令の名称における前記少なくとも2つの文字列の出現順序に従って結合した文字列であることを特徴とする付記1に記載の文字列抽出方法。
(付記3)前記コンピュータは、
選択した前記少なくとも2つの文字列を前記命令の名称における前記少なくとも2つの文字列の出現順序に従って結合した第1の文字列が前記命令の名称の一部に一致するか否かを判断する、処理を実行し、
前記生成する処理は、
前記第1の文字列が前記命令の名称の一部に一致しないと判断した場合、前記情報を生成しない、
ことを特徴とする付記1または2に記載の文字列抽出方法。
(付記4)前記選択する処理は、
前記記憶部から、前記各々の文字列から前記各々の文字列のレベルが高い順に少なくとも2つの文字列を選択する、
ことを特徴とする付記1〜3のいずれか一つに記載の文字列抽出方法。
(付記5)前記コンピュータは、
前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から3個以上となる第1の個数の文字列を選択し、
選択した前記第1の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
前記第1の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致しない場合、前記各々の文字列から前記第1の個数より少なく2以上となる第2の個数の文字列を選択し、
選択した前記第2の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
前記第2の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致すると判断した場合、前記第2の個数の文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行する付記1〜4のいずれか一つに記載の文字列抽出方法。
(付記6)前記ソースコードは前記命令の名称を複数含み、
前記記憶部は、前記名称の各々を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶しており、
前記コンピュータは、
前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択し、
選択した前記少なくとも2つの文字列を結合した文字列が前記名称の各々のうちの1以上の名称の一部または全部に一致するか否かを判断し、
前記少なくとも2つの文字列を結合した文字列が前記1以上の名称の一部または全部に一致すると判断した場合、前記各々の文字列のうちの、前記1以上の名称における前記少なくとも2つの文字列を結合した文字列の直前の文字列および直後の文字列のうちの少なくともいずれかの文字列を前記1以上の名称に対応して特定し、
前記1以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であるか否かを判断し、
前記1以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であると判断した場合、前記1以上の名称における前記少なくとも2つの文字列および前記いずれかの文字列の出現順序を示す情報を生成する、
処理を実行することを特徴とする付記1〜5のいずれか一つに記載の文字列抽出方法。
(付記7)プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択する選択部と、
前記選択部によって選択された前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する生成部と、
を有することを特徴とする文字列抽出装置。
(付記8)プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択する選択部と、
前記選択部によって選択された前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する生成部と、
を有するコンピュータを含むことを特徴とする文字列抽出装置。
(付記9)コンピュータに、
プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択し、
選択した前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理を実行させることを特徴とする文字列抽出プログラム。
(付記10)プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択し、
選択した前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する、
処理をコンピュータに実行させる文字列抽出プログラムを記憶したことを特徴とする記憶媒体。
100 文字列抽出装置
101 クラスタ
111 Tf−Idfスコアリスト
112 n−gramリスト
301 選択部
302 判断部
303 特定部
304 生成部

Claims (8)

  1. コンピュータが、
    プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択し、
    選択した前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する、
    処理を実行することを特徴とする文字列抽出方法。
  2. 前記情報は、選択した前記少なくとも2つの文字列を、前記命令の名称における前記少なくとも2つの文字列の出現順序に従って結合した文字列であることを特徴とする請求項1に記載の文字列抽出方法。
  3. 前記コンピュータは、
    選択した前記少なくとも2つの文字列を前記命令の名称における前記少なくとも2つの文字列の出現順序に従って結合した第1の文字列が前記命令の名称の一部に一致するか否かを判断する、処理を実行し、
    前記生成する処理は、
    前記第1の文字列が前記命令の名称の一部に一致しないと判断した場合、前記情報を生成しない、
    ことを特徴とする請求項1または2に記載の文字列抽出方法。
  4. 前記選択する処理は、
    前記記憶部から、前記各々の文字列から前記各々の文字列のレベルが高い順に少なくとも2つの文字列を選択する、
    ことを特徴とする請求項1〜3のいずれか一つに記載の文字列抽出方法。
  5. 前記コンピュータは、
    前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から3個以上となる第1の個数の文字列を選択し、
    選択した前記第1の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
    前記第1の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致しない場合、前記各々の文字列から前記第1の個数より少なく2以上となる第2の個数の文字列を選択し、
    選択した前記第2の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致するか否かを判断し、
    前記第2の個数の文字列を前記命令の名称における出現順序に従って結合した文字列が前記命令の名称の一部に一致すると判断した場合、前記第2の個数の文字列の前記命令の名称における出現順序を示す情報を生成する、
    処理を実行する請求項1〜4のいずれか一つに記載の文字列抽出方法。
  6. 前記ソースコードは前記命令の名称を複数含み、
    前記記憶部は、前記名称の各々を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶しており、
    前記コンピュータは、
    前記記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択し、
    選択した前記少なくとも2つの文字列を結合した文字列が前記名称の各々のうちの1以上の名称の一部または全部に一致するか否かを判断し、
    前記少なくとも2つの文字列を結合した文字列が前記1以上の名称の一部または全部に一致すると判断した場合、前記各々の文字列のうちの、前記1以上の名称における前記少なくとも2つの文字列を結合した文字列の直前の文字列および直後の文字列のうちの少なくともいずれかの文字列を前記1以上の名称に対応して特定し、
    前記1以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であるか否かを判断し、
    前記1以上の名称に対応して特定した前記いずれかの文字列が全て同一の内容であると判断した場合、前記1以上の名称における前記少なくとも2つの文字列および前記いずれかの文字列の出現順序を示す情報を生成する、
    処理を実行することを特徴とする請求項1〜5のいずれか一つに記載の文字列抽出方法。
  7. プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択する選択部と、
    前記選択部によって選択された前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する生成部と、
    を有することを特徴とする文字列抽出装置。
  8. コンピュータに、
    プログラムのソースコードに含まれ、前記ソースコード内で定義された命令の名称を所定の規則により分割した各々の文字列と、前記各々の文字列が前記プログラムを特徴付けるレベルとを関連付けて記憶する記憶部から、前記各々の文字列のレベルに基づいて、前記各々の文字列から少なくとも2つの文字列を選択し、
    選択した前記少なくとも2つの文字列の前記命令の名称における出現順序を示す情報を生成する、
    処理を実行させることを特徴とする文字列抽出プログラム。
JP2013012692A 2013-01-25 2013-01-25 文字列抽出方法、文字列抽出装置、および文字列抽出プログラム Pending JP2014146076A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013012692A JP2014146076A (ja) 2013-01-25 2013-01-25 文字列抽出方法、文字列抽出装置、および文字列抽出プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013012692A JP2014146076A (ja) 2013-01-25 2013-01-25 文字列抽出方法、文字列抽出装置、および文字列抽出プログラム

Publications (1)

Publication Number Publication Date
JP2014146076A true JP2014146076A (ja) 2014-08-14

Family

ID=51426320

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013012692A Pending JP2014146076A (ja) 2013-01-25 2013-01-25 文字列抽出方法、文字列抽出装置、および文字列抽出プログラム

Country Status (1)

Country Link
JP (1) JP2014146076A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017156896A (ja) * 2016-02-29 2017-09-07 富士通株式会社 分析支援方法、分析支援装置、および分析支援プログラム
JP2021068226A (ja) * 2019-10-24 2021-04-30 富士通株式会社 名称抽出プログラム,情報処理装置及び名称抽出方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017156896A (ja) * 2016-02-29 2017-09-07 富士通株式会社 分析支援方法、分析支援装置、および分析支援プログラム
JP2021068226A (ja) * 2019-10-24 2021-04-30 富士通株式会社 名称抽出プログラム,情報処理装置及び名称抽出方法
JP7380078B2 (ja) 2019-10-24 2023-11-15 富士通株式会社 名称抽出プログラム,情報処理装置及び名称抽出方法

Similar Documents

Publication Publication Date Title
US8024175B2 (en) Computer program, apparatus, and method for searching translation memory and displaying search result
JP6176017B2 (ja) 検索装置、検索方法、およびプログラム
WO2009154153A1 (ja) 文書検索システム
US11573989B2 (en) Corpus specific generative query completion assistant
US10102199B2 (en) Corpus specific natural language query completion assistant
JP5185402B2 (ja) 文書検索装置、文書検索方法、及び文書検索プログラム
WO2022134824A1 (en) Tuning query generation patterns
US20140358522A1 (en) Information search apparatus and information search method
JP2007025939A (ja) 多言語文書検索装置および多言語文書検索方法、並びに、多言語文書を検索するプログラム
JP2014146076A (ja) 文字列抽出方法、文字列抽出装置、および文字列抽出プログラム
JP5447368B2 (ja) 新規事例生成装置、新規事例生成方法及び新規事例生成用プログラム
JP5491446B2 (ja) 話題語獲得装置、方法、及びプログラム
JP4569179B2 (ja) ドキュメント検索装置
JP2005202924A (ja) 対訳判断装置、方法及びプログラム
JP4426893B2 (ja) 文書検索方法、文書検索プログラムおよびこれを実行する文書検索装置
JP4985096B2 (ja) 文書解析システム、および文書解析方法、並びにコンピュータ・プログラム
JPH06195371A (ja) 未登録語獲得方式
JPWO2017056164A1 (ja) 情報提示システム、及び情報提示方法
JP2008140204A (ja) データ検索システム及びプログラム
JP4496797B2 (ja) 文書管理装置および方法
WO2024047997A1 (ja) 文書分析装置、及び文書分析用プログラム
JP7243196B2 (ja) 情報処理装置及びプログラム
JP2004234582A (ja) 辞書構築方法,システム及び画面
WO2023286340A1 (ja) 情報処理装置および情報処理方法
JP2002099573A (ja) 類似文書検索装置、類似文書検索方法及び記録媒体