22
Java ソソソソソソソソソソソソソソソソソソソソソソソソ ソソソソソソ ソソソソソソソソソソソソソ ソソソソソ ソソ ソソ

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

  • Upload
    idra

  • View
    39

  • Download
    2

Embed Size (px)

DESCRIPTION

Java ソフトウェア部品検索システムのための索引付け手法の提案と実装. 大阪大学基礎工学情報科学科 井上研究室 梶田 泰伸. 研究背景. Java ソフトウェア部品検索システム SPARS-J を開発 検索語に対して全文検索を行い,検索語と関連した部品(クラス、インターフェイス)のソースコードを提供 あらかじめソースコードに対し 索引付け を行い、 索引語 をデータベースに登録   →検索語と一致する索引語を検索 用語 索引語 : 文書の内容を特徴付ける単語 索引付け : 文書中から索引語を抽出する処理. - PowerPoint PPT Presentation

Citation preview

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

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

大阪大学基礎工学情報科学科井上研究室

梶田 泰伸

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

2004/2/26 特別研究発表会2

研究背景Java ソフトウェア部品検索システムSPARS-J を開発

検索語に対して全文検索を行い,検索語と関連した部品(クラス、インターフェイス)のソースコードを提供あらかじめソースコードに対し索引付けを行い、索引語をデータベースに登録

  →検索語と一致する索引語を検索用語

索引語 : 文書の内容を特徴付ける単語索引付け : 文書中から索引語を抽出する処理

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

2004/2/26 特別研究発表会3

現状の問題点全ての語を抽出しそのまま索引語としている 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 ・・・

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

2004/2/26 特別研究発表会4

研究の目的Java ソースコードの特性を生かした索引付け手法を提案する

検索漏れを減らすため適合部品:

データベースの容量の増加を抑えるため

索引語の拡張

不要語の除去

• 検索語が出現する部品• 検索語が、語形変化して出現する部品

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

2004/2/26 特別研究発表会5

提案手法の概要ソースコードはプログラム部とコメント部に分かれる

プログラム部:文法はプログラム言語に依存 → Java

コメント部:文法は自然言語に依存 → 英語

2.プログラム部

1.プログラム部、コメント部

3.コメント部索引語の拡張

不要語の除去

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

2004/2/26 特別研究発表会6

不要語の除去(プログラム部、コメント部)

不要語とはその語が他の多くの部品に存在し、出現した部品を絞り込むのに役に立たない語プログラム部 コメント部

  記号 (例外: “ _” 、“ $” )数字のみで構成される語

1文字の語(1文字の語+数字)予約語

名詞(代名詞を除く)、動詞( be 動詞を除く)、形容詞、副詞 以外の語

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

2004/2/26 特別研究発表会7

This is a sample caseclass 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 = 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.}

記号数字のみの語

予約語1文字の語

不要な品詞の語

以下の不要語の除去

記号

/* 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 caseclass 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 caseclass 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文字の語

This is a sample caseclass 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 sample caseclass 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 caseclass 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 roomNumber column string1 string2 saftyCheck row column board row

   This method checks argument

不要な品詞の語

This is sample case roomNumber column string1 string2 saftyCheck row column board row

   This method checks argument

sample case roomNumber column string1 string2 saftyCheck row column board row

   method checks argument

C :

C :

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

2004/2/26 特別研究発表会8

1. 複合語の切り分けJava では、複合している単語の始まりは大文字で書き、残りは小文字で書く慣例

1. 小文字から大文字になる箇所で切り分ける      2. 大文字から小文字になる箇所の1つ前の文字で切り分け

る“$” 、” _”  でも切り分け

2. 省略語を本来の形にする省略語リストを作成(現在70語程度)

3. 語の最後が数字なら数字を除去する

索引語の拡張(プログラム部)

addIDKey add IDKeyadd ID Key

addID IDKey

新たに索引語とする

temporarytmp

errorerr

readInputFile

getProcessID

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

2004/2/26 特別研究発表会9

sample case roomNumber room Number column string1 string2 safety Check safetyCheck row column board row

   method checks argument

sample case roomNumber column string1 string2 safetyCheck row column board row

   method checks argument

sample case roomNumber room Number column string1 string2 safety Check safetyCheck row column board row

   method checks argument

sample case roomNumber column string1 string2 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

   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 column board row

   method checks argument

索引付けの例(索引語の拡張:プログラム部)

複合語の切り分け

省略語の復元

末尾の数字を除去

プログラム部の索引語の拡張

複合語の切り分け

末尾の数字を除去

省略語の復元

C :

C :

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

2004/2/26 特別研究発表会10

索引語の拡張(コメント部)1. 複合語の切り分け2. 原形でない語は、原形も索引語とする

形態素解析ツール  TreeTagger  を利用入力された単語を解析して、その単語の品詞情報と原形を出力例:“ She saw men” を入力すると

     She PP she

  saw    VVD see

  men   NNS man   品詞情報は、不要語の除去に利用品詞情報原形

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

2004/2/26 特別研究発表会11

データベース

索引付けの例(索引語の拡張:コメント部)

複合語の切り分け

コメント部の索引語の拡張

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

   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

   check method checks argument

索引語として登録

C :

C :

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

2004/2/26 特別研究発表会12

評価1. 検索漏れをどの程度減らすことができるか

検索漏れの少なさを示す尺度

5種類の検索語で検索手法適用前と手法適用後で再現率を比較

2. データベース容量の増加はどの程度抑えられるか

5種類のソースコード群に対してデータベースを作成不要語除去前と不要語除去後でサイズ( KB )を比較

• 再現率= 検索された部品中の適合部品の数全部品の中の適合部品の数

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

2004/2/26 特別研究発表会13

再現率の変化

全ての検索語おいて再現率が上昇

Netscape DevEdge で公開されているソースコード261ファイル(部品数281)を対象

0.77

1.00

0.75

1.00 1.00

0.31

0.23

0.67

0.56

0.29

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

提案手法適用前提案手法適用後

再現

K1 K2 K3 K4 K5検索語

複合語の切り分けが完全でなかった

“scrollbar” が “ bar” で検索されない

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

2004/2/26 特別研究発表会14

データベース容量の変化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 141968 (168.2%) 124480 (147.5%)

-25.3%

-18.2%

-22.1%

-20.7%

-17.2%

部品数に関わらず、データベース容量の増加が約 20%抑えられた

平均  -20.7%

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

2004/2/26 特別研究発表会15

まとめと今後の課題Java ソフトウェア部品検索システムのための索引付けを提案した

索引語を拡張することにより、検索漏れを減らすことができた不要語を除去することにより、索引語拡張の際のデータベース容量の増加が約 20%抑えられた今後の課題

複合語のより完全な切り分けコメント部が日本語である場合の提案手法の適用他のプログラム言語への提案手法の適用

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

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

発表終了

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

2004/2/26 特別研究発表会17

補足:5種類の検索キー

K1 set   bar

バーの設定を行なっている部品が目的

K2 initialize   window

ウィンドウを初期状態に戻す処理が記述されている部品が目的

K3 font

sizeフォントのサイズ関連のことが記述されている部品が目的

K4 frame

update新しいフレームにアップデートする際に行なう処理が記述されている部品が目的

K5 mouse

eventマウスの操作で起こるイベントが記述されている部品が目的

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

2004/2/26 特別研究発表会18

補足:各手法の検索結果の比較

手法なし

複合語切り分

け省略

語末尾の数字除去

複合語の切り分け

原形に戻す 全手法 適合

文書

set bar 4 10 4 4 5 5 10 13initialize

window

3 3 7 3 3 3 13 13

font size 8 9 8 8 9 8 9 12frame

update

5 8 5 6 6 5 9 9

mouse event 4 14 4 4 4 4 14 14

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

2004/2/26 特別研究発表会19

補足:各手法のデータベース容量の変化

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

2004/2/26 特別研究発表会20

補足:各手法の索引語総数の変化

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

2004/2/26 特別研究発表会21

補足:各手法の処理時間の変化

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

2004/2/26 特別研究発表会22

補足:処理の流れ

JAVAJAVA

ソ ー スソ ー ス

コ ー ドコ ー ド

・字句解析

・コメント部の語抽出

・形態素解析品詞原形参照表

・不要語除去

索引品詞リスト

・不要な品詞   の語を除去

Word DB

・拡張した索引語を登録

・参照

・不要語除去

コメント部の語

・索引語として登録

・拡張した索引語を登録

コメント部

プログラム部

抽出した語