專利名稱::構(gòu)件自動(dòng)分類的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及軟件技術(shù),尤其是一種構(gòu)件自動(dòng)分類的方法。
背景技術(shù):
:構(gòu)件是指在應(yīng)用系統(tǒng)中可以明確辨別的構(gòu)成部分,而可復(fù)用構(gòu)件是指具有相對(duì)獨(dú)立的功能和可復(fù)用價(jià)值的構(gòu)件。要減小復(fù)用成本,使復(fù)用者更好地理解構(gòu)件,就需要對(duì)構(gòu)件進(jìn)行描述和分類。作為一種有效的信息處理方法,自動(dòng)分類技術(shù)將各類信息按照一定的分類體系進(jìn)行分類整理,從而大大提高了用戶搜集情報(bào)的效率。自動(dòng)分類的任務(wù)就是通過自動(dòng)分類算法得到一個(gè)目標(biāo)函數(shù)(targetfunction)f,把每個(gè)屬性x映射到一個(gè)預(yù)先定義的類標(biāo)號(hào)y,目標(biāo)函數(shù)也稱作分類模型。目前構(gòu)件自動(dòng)分類時(shí)采用的是固定分類算法,即通過某種特定的分類算法,如SVM,基于構(gòu)件的特定的特征,例如構(gòu)件的文檔描述信息,對(duì)構(gòu)件進(jìn)行自動(dòng)分類。即首先通過對(duì)構(gòu)件進(jìn)行分析獲取構(gòu)件的特征,然后根據(jù)某一特征和某一算法對(duì)構(gòu)件進(jìn)行分類。由于現(xiàn)有技術(shù)是采用固定的自動(dòng)分類算法,在某些場(chǎng)合中,用戶可能需要根據(jù)待分類數(shù)據(jù)集的特點(diǎn)來自動(dòng)選擇分類算法,以便取得更好的分類效果,因此,現(xiàn)有的這種采用固定的分類算法的方式不能滿足用戶的需求。同時(shí),現(xiàn)有技術(shù)是以特定的特征作為分類屬性來進(jìn)行分類,而在不同的應(yīng)用場(chǎng)合中,不同特征的組合同樣可以作為分類屬性,為構(gòu)件的分類提供支持,因此,為了應(yīng)用于不同的場(chǎng)景,同樣需要提供方法對(duì)分類屬性進(jìn)行擴(kuò)展
發(fā)明內(nèi)容分類屬性不能擴(kuò)展的問題,實(shí)現(xiàn)可擴(kuò)展的構(gòu)件自動(dòng)分類。為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種構(gòu)件自動(dòng)分類的方法,包括獲取插件描述文件,所述插件描述文件中包括插件類名及保存有分類屬性或者分類算法的插件數(shù)據(jù)包的信息;根據(jù)所述插件數(shù)據(jù)包的信息加載所述插件數(shù)據(jù)包;根據(jù)所述插件類名實(shí)例化所述插件數(shù)據(jù)包;根據(jù)所述插件數(shù)據(jù)包中的分類屬性或者分類算法對(duì)構(gòu)件進(jìn)行分類。由上述技術(shù)方案可知,本發(fā)明可以將擴(kuò)展的分類屬性或者分類算法保存在插件數(shù)據(jù)包中,對(duì)插件數(shù)據(jù)包進(jìn)行實(shí)例化以調(diào)用分類屬性或者分類算法,實(shí)現(xiàn)對(duì)分類屬性或者分類算法的擴(kuò)展。下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。圖1為本發(fā)明構(gòu)件自動(dòng)分類的方法實(shí)施例的流程示意圖2為本發(fā)明構(gòu)件自動(dòng)分類的方法實(shí)施例對(duì)應(yīng)的結(jié)構(gòu)示意圖。具體實(shí)施例方式圖1為本發(fā)明構(gòu)件自動(dòng)分類的方法實(shí)施例的流程示意圖。可擴(kuò)展架構(gòu)是研究如何對(duì)系統(tǒng)擴(kuò)展,從而使系統(tǒng)能夠接受滿足格式要求的擴(kuò)展功能模塊,實(shí)現(xiàn)對(duì)功能的擴(kuò)展,以滿足各種不同的要求。插件是指一種遵循一定規(guī)范的應(yīng)用程序接口編寫出來的程序,主要是用來擴(kuò)展軟件功能。插件可以由軟件公司自己開發(fā),也可以由第三方或軟件用戶個(gè)人開發(fā)。因此,可以通過插件實(shí)現(xiàn)可擴(kuò)展架構(gòu)。本實(shí)施例以分類算法的擴(kuò)展為例對(duì)插件進(jìn)行描述,對(duì)分類屬性等的擴(kuò)展也可以采用與本實(shí)施例相同的原理實(shí)現(xiàn)。參照?qǐng)D2的結(jié)構(gòu)圖,本實(shí)施例包括步驟11:當(dāng)需要對(duì)構(gòu)件進(jìn)行自動(dòng)分類時(shí),用戶通過應(yīng)用程序模塊21在插件描述文件列表中獲取插件描述文件,所述插件描述文件中包括插件類名及保存有分類屬性或者分類算法的插件數(shù)據(jù)包的信息。插件主要包括如下兩類信息(1)插件描述文件plugin.xml。該描述文件包括插件描述信息,給出了插件的各種基本信息。主要包括(a)〈plugin〉項(xiàng)〈plugin〉是plugin.xml的主體,包含插件的id、插件的名字、版本信息以及具體實(shí)現(xiàn)功能的插件類的名稱等。通過解析plugin.xml文件,可以獲取插件類的名稱,然后可以利用Java語言的反射機(jī)制來得到該插件類的實(shí)例。具體包括〈pluginid="myplugin"name="Myplugin插件"version="1.0.0"provider-name=""class="myplugin.MypluginPlugin">其中id是插件的唯一標(biāo)識(shí)。實(shí)際項(xiàng)目中一般加上包名或網(wǎng)址名來命名id,這樣便可以避免插件的標(biāo)識(shí)名重名。name是插件的名稱,可以不唯一。version是插件版本號(hào)。provider-name可以為作者或z>司的名稱。class是插件類的名稱。此類中的方法是擴(kuò)展點(diǎn)接口中聲明方法的具體實(shí)現(xiàn),系統(tǒng)利用JAVA反射機(jī)制,在plugin.xml文件中得到此類名,根據(jù)指定的類名,得到該類的實(shí)例。5(b)〈runtime〉項(xiàng)聲明插件運(yùn)行時(shí)需要的Jar包以及所在路徑。比如插件需要連接MySQL數(shù)據(jù)庫,并需要相應(yīng)的Jar包提供支持,可以在々untime〉項(xiàng)中指定該Jar包所在的路徑。具體包括<runtime><libraryname="myplugin.jar"></library></runtime>該項(xiàng)聲明插件運(yùn)行時(shí)需要的Jar包。其中本插件自身的Jar包必須聲明,而且本插件在打包時(shí)將以myplugin.jar為名打包。如果該插件運(yùn)行還需要其它的Jar包,也應(yīng)該在此聲明所使用Jar包的路徑。比如有一個(gè)插件要連接MySQL數(shù)據(jù)庫需要它的一個(gè)包,定義如下所示,其中"lib\"是該包所在路徑。<runtime><libraryname="myplugin.jar"></library><libraryname="lib\mysql-connector-java-3.0.9-stable-bin.jar"/></mntime>(c)々叫uires〉項(xiàng)定義了該插件所要依賴的其他插件。具體包括<requires><Importplugin="org.eclipse.ui7><Importplugin="org.eclipse.core.runtime"/></requires>從上述對(duì)plugin.xml文件的分析,可以得知通過解析插件的描述文件plugin.xml獲取相應(yīng)的插件描述信息,如通過〈requires〉項(xiàng)可以獲取該插件運(yùn)行所需的依賴插件,通過〈plugin〉項(xiàng)可以獲知插件類class,通過〈mntime〉項(xiàng)可以獲知Jar包的路徑信息。(2)完成分類算法功能的Jar包。系統(tǒng)中的插件22采用Jar包的形式。每個(gè)插件對(duì)應(yīng)的Jar包是對(duì)插件接口類的具體實(shí)現(xiàn)。Jar包與分類算法對(duì)應(yīng),提供具體的分類算法的實(shí)現(xiàn)。如系統(tǒng)需要擴(kuò)展一個(gè)新的算法,如KNN算法,插件開發(fā)者可以按照預(yù)定義的插件接口格式完成該自動(dòng)分類算法實(shí)現(xiàn),并將其封裝成Jar包,并提供與該Jar包對(duì)應(yīng)的plugin.xml文件。Jar包及插件描述文件plugin.xml文件可以保存在插件描述文件列表plugins目錄的子文件夾下。之后,在需要調(diào)用擴(kuò)展的分類算法時(shí),可以解析plugin.xml文件得到插件類名,并利用Java反射機(jī)制完成對(duì)相應(yīng)分類算法的實(shí)例化,之后可以調(diào)用新的分類算法。各插件的完成分類算法功能的Jar包需要遵循一定的接口,可以在插件接口模塊24預(yù)定義一個(gè)抽象類,使每個(gè)插件可以繼承該抽象類。該抽象類Plugin可以包括如下信息started—:Boolean插件啟動(dòng)狀態(tài)manager—:PluginManager插件管理器,負(fù)責(zé)所有插件資源的管理,包括插件的啟動(dòng)、停止、使能(Enable/Disable)等descriptor—:IPluginDescriptor插件描述符,i己錄了才翁件的ID、Name、Version,依賴、擴(kuò)展點(diǎn)等Plugin():類的初始寸匕getDescriptor():獲取插件插件描述符(用來記錄插件的ID、Name、Version、依賴、擴(kuò)展點(diǎn)等信息);getManager():獲取插件管理器(負(fù)責(zé)所有插件資源的管理,包括插件的啟動(dòng)、停止、使能(Enable/Disable)等);start():啟動(dòng)插件stop():停止插件的運(yùn)行isActive():用來判斷該插件的狀態(tài)(包括是否啟動(dòng));getResourceSring():獲取資源信息,即需要分類的資源信息getPluginPath():用來獲取插件的具體路徑dostart():虛函數(shù),啟動(dòng)插件,并完成插件的初始化工作dostop():虛函數(shù),停止啟動(dòng)插件,并完成資源的釋放等工作為了調(diào)用插件中的分類算法,系統(tǒng)中需要包括如下信息(1)提供存放插件描述信息的插件描述文件列表plugins。在系統(tǒng)中,用戶將在"plugins"目錄下建立子文件夾,并將擴(kuò)展需要的各插件的plugin.xml文件和Jar包對(duì)應(yīng)存放到建立的子文件夾中。系統(tǒng)啟動(dòng)的時(shí)候會(huì)掃描"plugins"目錄下的所有子目錄中的plugin.xml文件,進(jìn)而裝載插件。(2)提供XMLParser來將plugin.xml中的信息解析出來,獲取插件的基本信息。然后可以根據(jù)用戶的需要,通過Java反射機(jī)制將插件中對(duì)應(yīng)的類進(jìn)行實(shí)例化和調(diào)用。之后,應(yīng)用程序模塊21解析所述插件描述文件獲取依賴插件信息,判斷所述依賴插件信息對(duì)應(yīng)的依賴插件是否啟動(dòng),若啟動(dòng),執(zhí)行步驟12,否則,啟動(dòng)所述依賴插件。具體的,在插件描述信息的〈r叫uires〉項(xiàng)中獲知對(duì)應(yīng)的依賴插件信息。步驟12:應(yīng)用程序模塊21根據(jù)所述插件數(shù)據(jù)包的信息加載所述插件數(shù)據(jù)包。例如,根據(jù)上述的〈runtime〉項(xiàng)中的Jar包的路徑信息加載相應(yīng)的Jar包。插件的啟動(dòng)是通過類加載器(ClassLoader)加載該類來啟動(dòng)的,利用Java的類反射機(jī)制獲得類的一個(gè)對(duì)象實(shí)例,調(diào)用指定的分類算法對(duì)資源進(jìn)行分類。當(dāng)成功啟動(dòng)一個(gè)插件時(shí),系統(tǒng)會(huì)設(shè)置該插件類的isActive變量,根據(jù)該變量的值就可以判斷插件的啟動(dòng)狀態(tài)。如果用戶定義的插件類運(yùn)行時(shí)需要其他類庫、Jar包的支持(公共函數(shù)庫模塊23可以為整個(gè)系統(tǒng)提供基礎(chǔ)支持的類庫,應(yīng)用程序模塊21和插件22都可以調(diào)用以獲取支持),那么用戶需要在plugin.xml文件的々equires〉項(xiàng)中進(jìn)行設(shè)置。系統(tǒng)在加載用戶定義的一個(gè)插件類時(shí),需要先掃描々叫uires〉項(xiàng),如果需要依賴插件,則解析出依賴插件的路徑,進(jìn)行8載實(shí)例化成功后,用戶定義的插件才可以#1加載、調(diào)用。步驟13:應(yīng)用程序模塊21根據(jù)所述插件類名實(shí)例化所述插件數(shù)據(jù)包,為插件類初始化一個(gè)對(duì)象實(shí)例(在內(nèi)存分配一個(gè)地址)。例如,根據(jù)上述的〈plugin〉項(xiàng)中的插件類名(class),利用Java語言反射機(jī)制,加載所述插件類名指定的插件類,得到實(shí)例化后的插件類。步驟14:應(yīng)用程序模塊21根據(jù)所述插件數(shù)據(jù)包中的分類屬性或者分類算法對(duì)構(gòu)件進(jìn)行分類。本實(shí)施例中,插件提供者只需要編寫plugin.xml文件,按預(yù)定義的格式實(shí)現(xiàn)插件接口類,將包括分類屬性或者分類算法的類文件打成數(shù)據(jù)包(Jar包)即可,其他任務(wù)均由系統(tǒng)完成,因此擴(kuò)展簡(jiǎn)便;分類算法或者分類屬性只需繼承插件接口類即可,至于算法如何實(shí)現(xiàn)完全由插件提供者決定,因此約束性小;系統(tǒng)利用Java語言反射機(jī)制可以動(dòng)態(tài)加載和停止各插件,因此支持動(dòng)態(tài)加載,可以降低開銷。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前迷的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。最后應(yīng)說明的是以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對(duì)其進(jìn)行限制,盡管參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而這些修改或者等同替換亦不能使修改后的技術(shù)方案脫離本發(fā)明技術(shù)方案的精神和范圍。9權(quán)利要求1、一種構(gòu)件自動(dòng)分類的方法,其特征在于,包括獲取插件描述文件,所述插件描述文件中包括插件類名及保存有分類屬性或者分類算法的插件數(shù)據(jù)包的信息;根據(jù)所述插件數(shù)據(jù)包的信息加載所述插件數(shù)據(jù)包;根據(jù)所述插件類名實(shí)例化所述插件數(shù)據(jù)包;根據(jù)所述插件數(shù)據(jù)包中的分類屬性或者分類算法對(duì)構(gòu)件進(jìn)行分類。2、根據(jù)權(quán)利要求1所述的方法,其特征在于所述插件描述文件中還包括依賴插件信息;所述根據(jù)所述插件數(shù)據(jù)包的信息加載所述插件數(shù)據(jù)包包括根據(jù)所述依賴插件信息判斷相應(yīng)的依賴插件是否啟動(dòng),若相應(yīng)的依賴插件未啟動(dòng),則啟動(dòng)相應(yīng)的依賴插件;所述依賴插件均啟動(dòng)后,根據(jù)所述插件數(shù)據(jù)包的信息加載所述插件數(shù)據(jù)包。3、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述插件類名實(shí)例化所述插件數(shù)據(jù)包具體為利用Java語言反射機(jī)制,加載所述插件類名指定的插件類,得到實(shí)例化后的插件類。4、根據(jù)權(quán)利要求l或2或3所述的方法,其特征在于,還包括將待擴(kuò)展的分類屬性或者分類算法打成插件數(shù)據(jù)包。5、根據(jù)權(quán)利要求4所述的方法,其特征在于,所述將待擴(kuò)展的分類屬性或者分類算法打成插件數(shù)據(jù)包具體為將待擴(kuò)展的分類屬性或者分類算法,按照預(yù)定義的插件接口格式,打成插件數(shù)據(jù)包。全文摘要本發(fā)明公開了一種構(gòu)件自動(dòng)分類的方法。該方法包括獲取插件描述文件,所述插件描述文件中包括插件類名及保存有分類屬性或者分類算法的插件數(shù)據(jù)包的信息;根據(jù)所述插件數(shù)據(jù)包的信息加載所述插件數(shù)據(jù)包;根據(jù)所述插件類名實(shí)例化所述插件數(shù)據(jù)包;根據(jù)所述插件數(shù)據(jù)包中的分類屬性或者分類算法對(duì)構(gòu)件進(jìn)行分類。通過本發(fā)明可以對(duì)分類屬性和分類算法進(jìn)行擴(kuò)展,避免現(xiàn)有分類屬性和分類算法固定的問題。文檔編號(hào)G06F9/44GK101446903SQ20081024045公開日2009年6月3日申請(qǐng)日期2008年12月19日優(yōu)先權(quán)日2008年12月19日發(fā)明者張良杰,戈李,王立杰,冰謝,黃藝燕申請(qǐng)人:北京大學(xué)