treetraversal.c

セマンティックWebを利用した
ソフトウェア検索システムの試み
神戸大学大学院自然科学研究科
庭山直幹/松尾景樹/荻原剛志
{nya, matsuo, ogihara}@cs25.scitec.kobe-u.ac.jp
背景
現在,膨大なソフトウェアが開発されているが,それらの再
利用は,現状では閉じたネットワーク内に限られている.
↓
WWW上にある全てのソフトウェア部品を対象とした検索
システムを構築できれば,再利用性はさらに向上する.
課題
WWW上にあるソフトウェア部品を収集する手法の開発.
大量のソフトウェア部品の中からユーザの必要とするものを検
索するシステムの開発.
概要
セマンティックWebの手法を利用した
ソフトウェア検索システム
ソフトウェア部品としてソースコードを対象とする.
ソースコードの変数名,関数名などの単語や,それらの間の
関係をメタデータとして記述しておく.
ソフトウェアに関する知識をオントロジとして記述しておき,そ
れを用いてユーザからの検索語を拡張する.
こうして検索を行うことにより,意味に基づいた検索を行うこと
ができる.
セマンティックWeb
Web上にある文書などの意味(Semantic)を取り扱う技術.
HTML文書などのHuman-ReadableなデータにMachineReadableなメタデータを付与し,ソフトウェアエージェントによ
る知的な機械処理を可能にする.
従来のWebでは単純なハイパーリンクによるリソース間の関
連付けしか記述できないが,セマンティックWebではリソース
間の知的な関連を表すことができる.
セマンティックWebはW3Cにより標準化が進められているが,
本研究ではその中でメタデータとオントロジを扱う部分である
RDF,RDF Schema,Ontologyを利用する.
RDF (Resource Description Framework)
データとその意味を記述するためのフレームワーク.
W3Cで定められているセマンティックWebでのメタデータを
記述するための書式.
リソース,プロパティ,値の3つ組による有向グラフで情報を
表現.
XMLによる表現形式を持つ.
曖昧な表現を持たず,単純なので,マシンによる自動処理
に適している.
RDFの例
http://kobe-u.ac.jp/~nya/
リソース
http://kobe-u.ac.jp/~nya/
Creator
プロパティ
庭山
値
Creator
Email
Name
[email protected]
庭山
RDF Schema
RDFのステートメントを解釈するためのもの.
リソースのプロパティ定義やリソース間の定義,リソース
のクラスとクラス間の関係と制約条件などを定義.
ボキャブラリ自体の定義ではなく,カテゴリやその記述方
法を示す.
Creator
Domain
URI
Range
人名
Ontology
対象とする世界に存在する物事を体系的に分類し,その
関係を記述.
階層関係,部分全体関係,クラスとインスタンス,デフォ
ルト知識等を表現可能.
オントロジ記述言語OWLは現在W3Cにより標準化中.
ソフトウェア検索システムの概要
参照
スキーマ
参照
ソースコードに
対応するメタ
データ
オントロジ
参照
検索
オントロジ変換
メタデータ検索
検索要求
(文字列)
検索結果
ユーザ
自動抽出
ソースコード
スキーマ
メタデータとオントロジの構造は,RDF Schemaを用いて定
義しておく.
例えば,「構造体はいくつかのメンバ変数を持つ」などと
いった定義である.
この定義は,オントロジのインスタンスからも参照され,こ
うして定義されたものなら構造が同じなのでマッチングの
処理を行うことができる.
メタデータ
ソースコードの変数名やコメントなどの単語を自動抽出し,
RDFメタデータとして記述し,格納する.
例えばC言語の場合は,以下のものを抽出することがで
きる.
•ファイル名
•グローバル変数名
•構造体名
•メンバ変数名
•関数名
•ローカル変数名
•コメント
メタデータ抽出の例
search.c
……
struct data_list{
data_list *prev,*next;
……
};
int main(int argc,char *argv[]){
……
}
……
ソースコード
抽出されたメタデータ
オントロジ
ソースコードの意味を理解するのに役立つ知識をオントロ
ジとして記述しておく.
メタデータと同じスキーマを参照していればよいので,オ
ントロジはネットワーク上に分散して存在していてもよい.
オントロジの例
オントロジ変換
まず,オントロジの中からユーザの検索語に対応するも
のを検索する(Aとおく).
次に,Aをルールに従って拡張する.
ルールとしては例えば,「Aとの関係が以下のいずれかで
あるクラス(B)を再帰的に全て選ぶ」といったものが考えら
れる.
A
• AとBは等しい
• AはBを包含している
• BはAを継承している
SubclassOf
B
等しい
包含
B
B
検索の例
参照
スキーマ
参照
自動抽出
オントロジ
メタデータ
参照
検索
オントロジ変換
メタデータ検索
検索要求:
「検索」
検索結果
「検索に関するソースコードが欲しい」
ユーザ
ソースコード
検索の例
参照
スキーマ
参照
自動抽出
オントロジ
メタデータ
参照
検索
オントロジ変換
メタデータ検索
検索要求:
「検索」
検索結果
「検索に関するソースコードが欲しい」
ユーザ
ソースコード
オントロジ変換
オントロジ変換のルールに基づいて検索語を拡張する.
検索の例
参照
スキーマ
参照
自動抽出
オントロジ
メタデータ
参照
検索
オントロジ変換
メタデータ検索
検索要求
検索結果
「検索に関するソースコードが欲しい」
ユーザ
ソースコード
検索の例(分散環境)
スキーマ
参照
ソースコードを
公開している
サイト
参照
抽出
オントロジ
メタデータ
オントロジを
集積している
サイト
メタデータを
蓄積している
サイト
参照
ソースコード
検索
オントロジ変換
メタデータ検索
検索要求
検索結果
ユーザ
検索サービスを
提供している
サイト
メタデータ検索
オントロジ変換された検索語とメタデータとの間でマッチ
ングを行う.
オントロジ変換された検索語
メタデータ
メタデータ自動抽出
• Cのソースコードからメタデータを自動抽出
するツールを実装中.
• XMLで出力.
• 現在,自動抽出可能なメタデータ
–
–
–
–
–
–
–
ソフトウェア名
作成者名
関数名
構造体名
メンバ変数名
グローバル変数
ローカル変数
ソフトウェア名:treetraversal.c
#include <stdio.h>
#include <stdlib.h>
struct node *newnode (char c)
{・・・・}
typedef struct node {
char data;
struct node *left;
struct node *right;
}treeel;
struct node *root;
main ()
{・・・・}
void preorder (struct node *p)
{・・・・}
void inorder (struct node *p)
{・・・・}
void construct_tree ()
{・・・・}
ソフトウェア名:treetraversal.c
#include <stdio.h>
#include <stdlib.h>
struct node *newnode (char c)
{・・・・}
typedef struct node {
char data;
struct node *left;
struct node *right;
}treeel;
struct node *root;
main ()
{・・・・}
void preorder (struct node *p)
{・・・・}
void inorder (struct node *p)
{・・・・}
void construct_tree ()
{・・・・}
XMLファイル名:treetraversal.xml
<?xml version=“1.0” encoding=“Shift_jis”?>
<software>
<filename>treetraversal.c</filename>
<username> matsuo< /username>
<struct>
<structtag>node</structtag>
<member>data</member>
<member>left<member>
<member>right<member>
</struct>
<structname>treeel</structname>
<structname>root</structname>
<function>
<functionname>preorder</functionname>
<local>・・・・
</function>
現在の状況
• コメントからのメタデータ自動抽出に
ついては未実装.
• それ以外のメタデータの抽出はできて
いるものの,全てのソースコードで抽
出できるかは確実ではない.
• メタデータを用いたソフトウェア検索
システムは実装済.
今後の展望
メタデータの抽出
関数呼び出し関係
関数の呼び出し関係を抽出し,依存関係を表現する.
コメント
単語ごとに抽出し,周辺にある関数,構造体,変数などに関連付けし
ておく.
特に意味のない単語
例えば,ローカル変数の”x”や”y”など.
マッチングを行う際には関係のない単語は考慮されないので,メタ
データの抽出時には特に選別をしなくてもよいと思われる.
C言語以外のソースコードからのメタデータの抽出
今後の展望
オントロジの作成
同義語,省略語
変数名や関数名などには独特の省略語が使われることが多い.
省略語は,母音を省いたり頭文字で表すなどの法則を用いてある程
度自動生成できる.
同義語は既存のオントロジを利用できる.
多言語対応
一つの言語のために作ったオントロジは他の言語で再利用することが
できる.
支援ツールの開発
今後の展望
オントロジ変換とメタデータ検索
オントロジ変換のルール
階層をどこまで辿るか.
マッチング
文字列間の距離を測ることで母音を抜くなどの省略語も扱える.
検索結果が多い場合のランキングの方法