Presentation is loading. Please wait.

Presentation is loading. Please wait.

Javaソフトウェア部品検索システムのための索引付け手法の提案と実装

Similar presentations


Presentation on theme: "Javaソフトウェア部品検索システムのための索引付け手法の提案と実装"— Presentation transcript:

1 Javaソフトウェア部品検索システムのための索引付け手法の提案と実装
大阪大学基礎工学情報科学科 井上研究室 梶田 泰伸

2 研究背景 Javaソフトウェア部品検索システムSPARS-Jを開発
検索語に対して全文検索を行い,検索語と関連した部品(クラス、インターフェイス)のソースコードを提供 あらかじめソースコードに対し索引付けを行い、索引語をデータベースに登録   →検索語と一致する索引語を検索 用語 索引語 : 文書の内容を特徴付ける単語 索引付け : 文書中から索引語を抽出する処理 2:SPARS-Jは、過去利用されたJavaソフトウェア部品の効率的な再利用を支援することが目的です 最後:例えば、その語がメソッド名であるとか、クラス名であるという情報のことです。 2004/2/26 特別研究発表会

3 現状の問題点 全ての語を抽出しそのまま索引語としている 複合語“safetyCheck”が存在 不要語が存在
static boolean safetyCheck(int row){ for (int j=1; j<column; j++) if (board[j] == row) return false ; } return true ; 複合語“safetyCheck”が存在 検索語“safety”や“check”にマッチしない この部品は検索されない static boolean safetyCheck ( int row ) { for ・・・ 検索漏れ 不要語が存在 データベース容量の無駄 2004/2/26 特別研究発表会

4 研究の目的 索引語の拡張 不要語の除去 Javaソースコードの特性を生かした索引付け手法を提案する 検索漏れを減らすため
適合部品: データベースの容量の増加を抑えるため 索引語の拡張 検索語が出現する部品 検索語が、語形変化して出現する部品 拡張 ー>除去 を流れそろえる *検索漏れ、適合部品の説明を自然に。 不要語の除去 2004/2/26 特別研究発表会

5 提案手法の概要 ソースコードはプログラム部とコメント部に分かれる 不要語の除去 索引語の拡張
プログラム部:文法はプログラム言語に依存 → Java コメント部:文法は自然言語に依存 → 英語 不要語の除去 1.プログラム部、コメント部 *実装の流れに沿っていることを明確に。 2.プログラム部 索引語の拡張 3.コメント部 2004/2/26 特別研究発表会

6 不要語の除去 (プログラム部、コメント部)
不要語とは その語が他の多くの部品に存在し、出現した部品を絞り込むのに役に立たない語 プログラム部 コメント部   記号 (例外: “_”、“$” ) 数字のみで構成される語 1文字の語(1文字の語+数字) 予約語 名詞(代名詞を除く)、動詞(be動詞を除く)、形容詞、副詞 以外の語 提案手法の説明1 2004/2/26 特別研究発表会

7 索引付けの例 (不要後の除去:プログラム部、コメント部)
以下の不要語の除去 C: sample case roomNumber column string1 string2 saftyCheck row board row method checks argument This is sample case roomNumber column string1 string2 saftyCheck row board row This method checks argument This is sample case roomNumber column string1 string2 saftyCheck row board row This method checks argument /* This is a sample case. */ class roomNumber { static int column = 10, a0, a1; static char string1, string2; static boolean saftyCheck ( int row ){ for ( int j = 1; j < column; j++){ if ( board[ j ] == row ) return false; }   return true; // This method checks 1 argument. This is a sample case class roomNumber static int column a0 a1 static char string1 string2 static boolean saftyCheck int row for int j j column j if board j row return false   return true This method checks 1 argument This is sample case class roomNumber static int column static char string1 string2 static boolean saftyCheck int row for int column if board row return false   return true This method checks argument This is sample case class roomNumber static int column static char string1 string2 static boolean saftyCheck int row for int column if board row return false   return true This method checks argument This is a sample case class roomNumber static int column a0 a1 static char string1 string2 static boolean saftyCheck int row for int j j column j if board j row return false   return true This method checks 1 argument This is a sample case class roomNumber static int column a0 a1 static char string1 string2 static boolean saftyCheck int row for int j j column j if board j row return false   return true This method checks argument /* This is a sample case. */ class roomNumber { static int column = 10, a0, a1; static char string1, string2; static boolean saftyCheck ( int row ){ for ( int j = 1; j < column; j++){ if ( board[ j ] == row ) return false; }   return true; // This method checks 1 argument. This is a sample case class roomNumber static int column a0 a1 static char string1 string2 static boolean saftyCheck int row for int j j column j if board j row return false   return true This method checks argument 記号 記号 数字のみの語 数字のみの語 1文字の語 1文字の語 予約語 予約語 *コメントマークましにする  不要な品詞の語 不要な品詞の語 C: 2004/2/26 特別研究発表会

8 索引語の拡張(プログラム部) 複合語の切り分け 省略語を本来の形にする 語の最後が数字なら数字を除去する
Javaでは、複合している単語の始まりは大文字で書き、残りは小文字で書く慣例 小文字から大文字になる箇所で切り分ける       大文字から小文字になる箇所の1つ前の文字で切り分ける “$”、”_” でも切り分け 省略語を本来の形にする 省略語リストを作成(現在70語程度) 語の最後が数字なら数字を除去する tmp temporary err error 新たに索引語とする 提案手法の説明3 Itemizeをスライド共通に 切り分け前の文字はどうなるのかをチラッと説明 *索引語を元の語から追加してることを口でチラッと触れる readInputFile add ID Key addIDKey add IDKey addID IDKey getProcessID 2004/2/26 特別研究発表会

9 索引付けの例 (索引語の拡張:プログラム部)
プログラム部の索引語の拡張 C: sample case roomNumber room Number column    string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column string1 string2 safety Check safetyCheck row board row method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column string1 string2 safety Check safetyCheck row board row method checks argument sample case roomNumber column string1 string2 safetyCheck row board row method checks argument sample case roomNumber column string1 string2 safetyCheck row board row method checks argument sample case roomNumber room Number column string1 string2 safety Check safetyCheck row board row method checks argument 複合語の切り分け 複合語の切り分け 省略語の復元 省略語の復元 末尾の数字を除去 末尾の数字を除去 *省略語説明しない理由をしっかり C: 2004/2/26 特別研究発表会

10 索引語の拡張(コメント部) 複合語の切り分け 原形でない語は、原形も索引語とする 形態素解析ツール TreeTagger を利用
入力された単語を解析して、その単語の品詞情報と原形を出力 例:“She saw men”を入力すると     She PP she  saw   VVD see  men  NNS man  品詞情報は、不要語の除去に利用 例を工夫する 品詞情報 原形 2004/2/26 特別研究発表会

11 索引付けの例 (索引語の拡張:コメント部)
コメント部の索引語の拡張 C: sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row check method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row check method checks argument 複合語の切り分け 原形でない語を原形に戻す 原形でない語を原形に戻す 索引語として 登録 C: データベース 2004/2/26 特別研究発表会

12 評価 検索漏れをどの程度減らすことができるか 再現率= データベース容量の増加はどの程度抑えられるか 検索漏れの少なさを示す尺度
5種類の検索語で検索 手法適用前と手法適用後で再現率を比較 データベース容量の増加はどの程度抑えられるか 5種類のソースコード群に対してデータベースを作成 不要語除去前と不要語除去後でサイズ(KB)を比較 再現率= 検索された部品中の適合部品の数 全部品の中の適合部品の数 評価の説明 再現率 2004/2/26 特別研究発表会

13 再現率の変化 Netscape DevEdgeで公開されているソースコード261ファイル(部品数281)を対象
K1 K2 K3 K4 K5 検索語 全ての検索語おいて再現率が上昇 複合語の切り分けが完全でなかった “scrollbar” が “bar” で検索されない 適合部品をどうやって定義?説明する。 なんで1にならんの?とか *切り分けがうまくいかなかった例を挙げる 2004/2/26 特別研究発表会

14 データベース容量の変化 部品数に関わらず、データベース容量の増加が約20%抑えられた -17.2% -25.3% -18.2% -22.1%
DBの種類 部品数 手法導入前 (KB) 索引語拡張のみ(KB) 索引語拡張 +不要語除去(KB) DB1 281 8176 12752 (156.0%) 11344 (138.7%) DB2 511 9440 14608 (154.7%) 12224 (129.5%) DB3 767 17664 25760 (145.8%) 22544 (127.6%) DB4 1120 17456 25584 (146.6%) 21728 (124.5%) DB5 2844 84384 (168.2%) (147.5%) -17.2% -25.3% -18.2% -22.1% -20.7% *網掛けのずれを直す 平均 -20.7% 部品数に関わらず、データベース容量の増加が約20%抑えられた 2004/2/26 特別研究発表会

15 まとめと今後の課題 Javaソフトウェア部品検索システムのための索引付けを提案した 今後の課題
索引語を拡張することにより、検索漏れを減らすことができた 不要語を除去することにより、索引語拡張の際のデータベース容量の増加が約20%抑えられた 今後の課題 複合語のより完全な切り分け コメント部が日本語である場合の提案手法の適用 他のプログラム言語への提案手法の適用 まとめ 2004/2/26 特別研究発表会

16 発表終了 2004/2/26 特別研究発表会

17 補足:5種類の検索キー K1 バーの設定を行なっている部品が目的 K2 ウィンドウを初期状態に戻す処理が記述されている部品が目的 K3
set  bar バーの設定を行なっている部品が目的 K2 initialize  window ウィンドウを初期状態に戻す処理が記述されている部品が目的 K3 font size フォントのサイズ関連のことが記述されている部品が目的 K4 frame update 新しいフレームにアップデートする際に行なう処理が記述されている部品が目的 K5 mouse event マウスの操作で起こるイベントが記述されている部品が目的 2004/2/26 特別研究発表会

18 補足: 各手法の検索結果の比較 4 10 5 13 3 7 8 9 12 6 14 set bar initialize window
なし 複合語 切り分け 省略語 末尾の 数字 除去 複合語の 原形に 戻す 全手法 適合 文書 set bar 4 10 5 13 initialize window 3 7 font size 8 9 12 frame update 6 mouse event 14 2004/2/26 特別研究発表会

19 補足: 各手法のデータベース容量の変化 2004/2/26 特別研究発表会

20 補足: 各手法の索引語総数の変化 2004/2/26 特別研究発表会

21 補足: 各手法の処理時間の変化 2004/2/26 特別研究発表会

22 補足:処理の流れ 4 5 3 4 5 1 2 ・拡張した索引語 を登録 ・不要語除去 抽出した語 Word DB プログラム部 ・字句解析
JAVA ソース コード ・索引語として登録 コメント部 ・コメント部の語 抽出 ・不要語 除去 ・拡張した 索引語を登録 ・不要な品詞    の語を除去 索引品詞 リスト ・参照 ・形態素解析 コメント部 の語 品詞原形 参照表 2004/2/26 特別研究発表会


Download ppt "Javaソフトウェア部品検索システムのための索引付け手法の提案と実装"

Similar presentations


Ads by Google