前言:本站為你精心整理了垃圾郵件過濾插件設(shè)計(jì)范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。
摘要:結(jié)合郵件的半結(jié)構(gòu)化特征,將最大熵模型引入垃圾郵件過濾中,構(gòu)造出基于最大熵模型的垃圾郵件過濾系統(tǒng)框架。在此基礎(chǔ)上,將其與Outlook提供的PIA相結(jié)合,利用.NET技術(shù)開發(fā)出基于最大熵模型的垃圾郵件過濾插件,在客戶端實(shí)現(xiàn)了基于內(nèi)容的垃圾郵件過濾,較好地解決了垃圾郵件的問題。
關(guān)鍵詞:最大熵模型;郵件過濾;.NET;Outlook插件
電子郵件以其方便、快捷、低成本等優(yōu)點(diǎn)逐漸成為人們?nèi)粘I钪兄饕耐ㄐ攀侄沃?。但大量垃圾郵件的出現(xiàn),給全球用戶帶來了巨大損失。據(jù)調(diào)查,我國用戶平均每人每周收到的垃圾郵件數(shù)量占收到的總郵件數(shù)量的61.63%[1]。垃圾郵件的泛濫已帶來嚴(yán)重后果,因此有效地區(qū)分正常郵件和垃圾郵件成為一項(xiàng)緊迫的任務(wù)。近年來,有關(guān)垃圾郵件過濾技術(shù)的研究逐漸興起。常見的過濾方法有黑、白名單技術(shù)和規(guī)則過濾等,但由于郵件發(fā)送者在不斷變化,規(guī)則難以維護(hù),準(zhǔn)確率不高,使這些方法都具有一定的局限性。將垃圾郵件過濾與機(jī)器學(xué)習(xí)、文本分類和信息過濾技術(shù)相結(jié)合,對(duì)郵件正文內(nèi)容進(jìn)行分析,已成為目前研究的熱點(diǎn)[2]。
最大熵模型是一種廣泛應(yīng)用于統(tǒng)計(jì)自然語言處理領(lǐng)域的技術(shù)。結(jié)合郵件的半結(jié)構(gòu)化特性,本文將最大熵模型應(yīng)用到垃圾郵件過濾中,構(gòu)造出基于最大熵模型的垃圾郵件過濾系統(tǒng)框架,并將其與Outlook相結(jié)合,基于.NET平臺(tái)開發(fā)出了Outlook垃圾郵件過濾插件,在客戶端利用最大熵模型實(shí)現(xiàn)了基于內(nèi)容的垃圾郵件過濾。
1基于最大熵模型的垃圾郵件過濾
1.1最大熵模型
2.1互操作程序集
.NET框架中提供的COMInterop技術(shù),使開發(fā)人員可以在.NET代碼中直接訪問COM組件。其基本原理[4]是,針對(duì)用戶要訪問的COM組件,.NET框架自動(dòng)生成一個(gè)互操作程序集(InteropAssembly,IA)。IA是一個(gè)完全的托管程序集,其命名空間、類、方法等都與COM組件相對(duì)應(yīng)。這樣,在.NET程序中可以直接引用IA,由IA完成對(duì)真正COM組件的訪問。圖2說明了IA的作用。
微軟公司為Outlook2003提供了一個(gè)“正式的”互操作程序集,即主互操作程序集(PrimaryInteropAssembly,PIA),駐留在名稱為Micrsoft.Office.Interop.Outlook.dll的全局程序集緩存中。在Outlook的安裝過程中,選擇“.NET可編程性支持”,或者下載客戶端PIA安裝包來完成PIA的安裝[5]。
2.2Outlook2003對(duì)象模型
Outlook通過對(duì)象和對(duì)象集合的層次系統(tǒng)(稱為對(duì)象模型)為開發(fā)語言提供功能,開發(fā)人員利用可用的對(duì)象和功能與Outlook進(jìn)行交互,創(chuàng)建自己的解決方案。下面對(duì)其中幾個(gè)重要的對(duì)象進(jìn)行介紹[6]。
2.2.1Application對(duì)象
Application是層次結(jié)構(gòu)中所有其他對(duì)象的根,提供對(duì)其他所有Outlook對(duì)象的訪問。要從外部應(yīng)用程序中訪問Outlook對(duì)象模型,必須先獲得Application對(duì)象的實(shí)例。
2.2.2Namespace對(duì)象
Namespace對(duì)象是Outlook數(shù)據(jù)源的抽象根。如果要訪問Outlook數(shù)據(jù),則必須創(chuàng)建Namespace對(duì)象的實(shí)例。目前,所支持的唯一數(shù)據(jù)源是郵件應(yīng)用程序編程接口MAPI,用于訪問Outlook文件夾組中的所有Outlook數(shù)據(jù)。
2.2.3MAPIFolder對(duì)象
Outlook數(shù)據(jù)存儲(chǔ)區(qū)內(nèi)有一組支持默認(rèn)功能的文件夾,使用Namespace的GetDefaultFolder()方法返回某個(gè)默認(rèn)文件夾,即MAPIFolder對(duì)象。
2.2.4Items對(duì)象
Items代表Outlook項(xiàng)目集合,如郵件項(xiàng)目MailItem、任務(wù)項(xiàng)目TaskItem等??梢允褂肁pplication對(duì)象的CreateItem()創(chuàng)建新的項(xiàng)目或使用Items對(duì)象的索引器獲得并修改現(xiàn)有的項(xiàng)目。
2.2.5Explorers和Inspectors對(duì)象
Outlook對(duì)象模型還定義了用來對(duì)用戶界面進(jìn)行操作的類型。Explorers對(duì)象包含一組Explorer對(duì)象,代表所有的瀏覽器。Explorer類型表示用于顯示文件夾內(nèi)容的窗口。Inspectors對(duì)象包含一組Inspector對(duì)象,代表所有檢查器。Inspector對(duì)象代表顯示Outlook項(xiàng)目的窗口。
2.3用.NET開發(fā)Outlook插件
利用PIA,開發(fā)人員可以在.NET中方便地對(duì)Outlook的編程接口進(jìn)行操作[7]。2003提供了“共享的外接程序”項(xiàng)目模板,通過創(chuàng)建自定義外接程序,對(duì)Outlook2003進(jìn)行功能擴(kuò)展。完成共享的外接程序向?qū)Ш?,得到包含兩個(gè)項(xiàng)目的解決方案,即外接程序項(xiàng)目和對(duì)應(yīng)的安裝項(xiàng)目。
外接程序自動(dòng)引用程序集Extensibility.dll。它包含命名空間Extensibility。其中確切定義了三個(gè)類型:
(1)IDTExtensibility2——所有外接程序都必須實(shí)現(xiàn)的關(guān)鍵接口;
(2)ext_ConnectMode——枚舉變量,表示將宿主程序(Outlook)連接到外接程序的各種方式;
(3)ext_DisconnectMode——枚舉變量,表示將外接程序與宿主程序斷開的各種方式。2.3.1IDTExtensibility2接口的角色
IDTExtensibility2接口類型定義了在插件生命周期的各個(gè)階段宿主應(yīng)用程序所調(diào)用的方法。
(1)OnConnection()方法——插件連接到宿主程序時(shí)調(diào)用該方法。成功返回表明已加載了插件;否則宿主程序立即釋放其對(duì)該插件的引用。
(2)OnDisconnection()方法——插件斷開連接并且在從內(nèi)存中卸載之前,將激活此事件。
(3)OnAddInsUpdate()方法——當(dāng)最終用戶在宿主程序中插入或刪除插件時(shí),調(diào)用OnAddInsUpdate()方法。
(4)OnStartupComplete()和OnBeginShutdown()方法——只有在啟動(dòng)期間已連接了插件的情況下才調(diào)用OnStartupComplete();此時(shí)所有宿主資源均可供插件使用,因此典型的操作是為插件構(gòu)造用戶界面。宿主程序在關(guān)閉過程中要斷開與插件連接的情況下調(diào)用OnBeginShutdown();通常在此事件中執(zhí)行所有資源清理操作,并還原對(duì)宿主程序所作的任何更改。
2.3.2實(shí)現(xiàn)用戶界面和業(yè)務(wù)邏輯
宿主程序加載完成之后,所有的宿主資源均可供插件使用。因此,通常在OnStartupComplete()方法中構(gòu)建插件的用戶界面。例如,向?yàn)g覽器標(biāo)準(zhǔn)命令欄中添加CommandBarButton的步驟如下:
(1)從活動(dòng)資源管理器獲得命令欄集。
(2)查看按鈕是否在希望修改的命令欄控件集合中。如果不在,則創(chuàng)建并啟用新的實(shí)例。
(3)設(shè)置CommandBarButton的Click事件委托,以完成其自定義功能。
根據(jù)步驟(3)中指定的自定義按鈕的事件委托,在對(duì)應(yīng)的方法中完成用戶自定義操作,實(shí)現(xiàn)業(yè)務(wù)邏輯。
2.3.3注冊(cè)共享外接程序
要在Outlook中使用插件,必須注冊(cè)插件動(dòng)態(tài)鏈接庫。該動(dòng)態(tài)鏈接庫的類標(biāo)志符在注冊(cè)表的\HKEY_CLASSES_ROOT子樹下注冊(cè)。另外,必須在注冊(cè)表中添加有關(guān)插件的信息。該信息提供插件的名稱、說明、目標(biāo)應(yīng)用程序、初始加載行為和連接狀態(tài)等。通常在注冊(cè)表中創(chuàng)建以下鍵值:
HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\ProgID
其中ProgID為插件程序的唯一標(biāo)志符的字符串表示形式。
外接程序項(xiàng)目的生成設(shè)置中已選中了“注冊(cè)COMinterop”,生成插件的過程中自動(dòng)向COMinterop注冊(cè)了.NET類。
3基于最大熵模型的垃圾郵件過濾插件
為了在客戶端對(duì)用戶收到的郵件實(shí)現(xiàn)基于內(nèi)容的過濾,將最大熵模型與Outlook插件開發(fā)技術(shù)結(jié)合,
在.NET平臺(tái)上實(shí)現(xiàn)了基于最大熵模型的垃圾郵件過濾插件。
3.1IDTExtensibility2接口的實(shí)現(xiàn)
(1)在OnConnection()方法中獲得Outlook和插件ME-MFS對(duì)象實(shí)例;判斷連接模式,把用戶自定義數(shù)據(jù)傳送到OnStartupComplete方法。
取得宿主程序和插件對(duì)象的實(shí)例;
判斷連接模式connectMode,若不為ext_ConnectMode.ext_cm_Start ̄up則調(diào)用OnStartupComplete(),并傳遞用戶自定義數(shù)據(jù)。
(2)在OnStartupComplete()方法中構(gòu)造用戶界面,定義事件委托以完成業(yè)務(wù)邏輯,并對(duì)用戶自定義數(shù)據(jù)進(jìn)行處理。
取得活動(dòng)Explorer對(duì)象的CommandBars;
取得CommandBars中的“菜單欄”;
如果用戶自定義菜單不存在,則創(chuàng)建用戶自定義菜單,并將其添加到系統(tǒng)菜單欄,向自定義菜單中添加各菜單項(xiàng);
設(shè)置用戶自定義菜單項(xiàng)的事件委托,以完成業(yè)務(wù)邏輯。
(3)在OnDisconnection()方法中檢查斷開模式,把用戶自定義數(shù)據(jù)傳遞到OnBeginShutdown()方法,釋放Outlook實(shí)例。
判斷斷開模式disconnectMode,若不為ext_DisconnectMode.ext_dm_HostShutdown,則調(diào)用OnBeginShutdown(),并傳遞用戶自定義數(shù)據(jù);
釋放宿主程序?qū)ο髮?shí)例。
(4)在OnBeginShutdown()方法中還原對(duì)Outlook用戶界面所作的修改。
取得活動(dòng)Explorer的菜單欄;
取得用戶自定義菜單,如果存在,則從菜單欄中刪除用戶自定義菜單,還原對(duì)用戶界面的修改。
3.2自定義用戶界面
按照上述方法中的步驟,在Outlook中構(gòu)造用戶自定義菜單“MEMFS”,插入完成垃圾郵件過濾功能的菜單項(xiàng):
(1)特征提取——獲得用戶Outlook文件夾中現(xiàn)有的所有郵件,把“垃圾郵件”文件夾中的郵件作為垃圾郵件,其他郵件文件夾中的郵件作為正常郵件;提取郵件特征,生成特征文件,以進(jìn)行最大熵模型的訓(xùn)練。
(2)模型訓(xùn)練——根據(jù)已生成的特征文件,進(jìn)行GIS迭代收斂,得到最大熵模型。
(3)模型調(diào)整——郵件過濾結(jié)果不正確時(shí),幫助用戶修改模型參數(shù),實(shí)現(xiàn)用戶的個(gè)性化要求。
3.3垃圾郵件過濾邏輯的實(shí)現(xiàn)得到最大熵模型后,即可使用此模型進(jìn)行垃圾郵件過濾。當(dāng)新郵件到達(dá)時(shí),插件獲取新郵件的特征,由最大熵模型對(duì)新郵件進(jìn)行判斷。如果是垃圾郵件,則將其由收件箱轉(zhuǎn)移到垃圾郵件文件夾中。
取得收件箱中收到的新郵件;
提取新郵件的特征;
用最大熵模型進(jìn)行概率估計(jì),求出新郵件對(duì)正常郵件和垃圾郵件的概率,取其中較大的概率對(duì)應(yīng)的類別作為新郵件類別;
若新郵件為垃圾郵件,則將其轉(zhuǎn)移到垃圾郵件文件夾。
在郵件特征提取和新郵件到達(dá)處理時(shí),都要獲得Outlook2003文件夾中的郵件項(xiàng)。獲得這些郵件項(xiàng)的基本過程如下:
用Application對(duì)象的GetNamespace()方法取得NameSpace類型;
用NameSpace的GetDefaultFolder()方法取得MAPIFolder類型;
使用MAPIFolder.Items索引器枚舉各郵件項(xiàng)。
4結(jié)束語
本文將在統(tǒng)計(jì)自然處理領(lǐng)域應(yīng)用廣泛的最大熵模型引入到垃圾郵件過濾中,利用Outlook2003提供的PIA,在.NET平臺(tái)上開發(fā)出了垃圾郵件過濾插件,在客戶端實(shí)現(xiàn)了基于內(nèi)容的垃圾郵件過濾,能較好地幫助用戶解決垃圾郵件泛濫的問題。本文的插件開發(fā)技術(shù),稍作修改即可應(yīng)用于其他版本的Outlook。
參考文獻(xiàn):
[1]中國互聯(lián)網(wǎng)協(xié)會(huì)反垃圾郵件中心.2005年第三次中國反垃圾郵件狀況調(diào)查報(bào)告[EB/OL].[2006-02].www.anti-/.
[2]潘文鋒.基于內(nèi)容的垃圾郵件過濾研究[D].北京:中國科學(xué)院研究生院,2004:4-9.
[3]RATNAPARKHIA.Maximumentropymodelsfornaturallanguageambiguity[D].[S.l.]:UniversityofPennsylvania,1997.
[4]ingtogripswiththemessoftypesintheOfficePIAs[EB/OL]./eric_carter/archive/2004/05/06/127698.aspx.
[5]KHORSM,LEONARDA.Office2003主Interop程序集的安裝和使用[EB/OL].(2005-04)./china/msdn/library/office/office/OfficePrIntopAssFAQ.mspx.
[6]BOYCEJ.MicrosoftOfficeOutlook2003完全揭密[EB/OL].(2004-12)./china/msdn/library/office/office/UsingVBAInOutlook.mspx.
[7]TROELSENFAW.使用C#進(jìn)行Outlook2003編程的簡介[EB/OL].(2004-07)./china/msdn/library/langtool/vcsharp/USdv_vstechartol03csharp.mspx.