熵方法垃圾郵件過濾插件思考

時間:2022-10-25 07:37:00

導語:熵方法垃圾郵件過濾插件思考一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

熵方法垃圾郵件過濾插件思考

摘要:結合郵件的半結構化特征,將最大熵模型引入垃圾郵件過濾中,構造出基于最大熵模型的垃圾郵件過濾系統框架。在此基礎上,將其與Outlook提供的PIA相結合,利用.NET技術開發出基于最大熵模型的垃圾郵件過濾插件,在客戶端實現了基于內容的垃圾郵件過濾,較好地解決了垃圾郵件的問題。

關鍵詞:最大熵模型;郵件過濾;.NET;Outlook插件

電子郵件以其方便、快捷、低成本等優點逐漸成為人們日常生活中主要的通信手段之一。但大量垃圾郵件的出現,給全球用戶帶來了巨大損失。據調查,我國用戶平均每人每周收到的垃圾郵件數量占收到的總郵件數量的61.63%[1]。垃圾郵件的泛濫已帶來嚴重后果,因此有效地區分正常郵件和垃圾郵件成為一項緊迫的任務。近年來,有關垃圾郵件過濾技術的研究逐漸興起。常見的過濾方法有黑、白名單技術和規則過濾等,但由于郵件發送者在不斷變化,規則難以維護,準確率不高,使這些方法都具有一定的局限性。將垃圾郵件過濾與機器學習、文本分類和信息過濾技術相結合,對郵件正文內容進行分析,已成為目前研究的熱點[2]。

最大熵模型是一種廣泛應用于統計自然語言處理領域的技術。結合郵件的半結構化特性,本文將最大熵模型應用到垃圾郵件過濾中,構造出基于最大熵模型的垃圾郵件過濾系統框架,并將其與Outlook相結合,基于.NET平臺開發出了Outlook垃圾郵件過濾插件,在客戶端利用最大熵模型實現了基于內容的垃圾郵件過濾。

1基于最大熵模型的垃圾郵件過濾

1.1最大熵模型

2.1互操作程序集

.NET框架中提供的COMInterop技術,使開發人員可以在.NET代碼中直接訪問COM組件。其基本原理[4]是,針對用戶要訪問的COM組件,.NET框架自動生成一個互操作程序集(InteropAssembly,IA)。IA是一個完全的托管程序集,其命名空間、類、方法等都與COM組件相對應。這樣,在.NET程序中可以直接引用IA,由IA完成對真正COM組件的訪問。圖2說明了IA的作用。

微軟公司為Outlook2003提供了一個“正式的”互操作程序集,即主互操作程序集(PrimaryInteropAssembly,PIA),駐留在名稱為Micrsoft.Office.Interop.Outlook.dll的全局程序集緩存中。在Outlook的安裝過程中,選擇“.NET可編程性支持”,或者下載客戶端PIA安裝包來完成PIA的安裝[5]。

2.2Outlook2003對象模型

Outlook通過對象和對象集合的層次系統(稱為對象模型)為開發語言提供功能,開發人員利用可用的對象和功能與Outlook進行交互,創建自己的解決方案。下面對其中幾個重要的對象進行介紹[6]。

2.2.1Application對象

Application是層次結構中所有其他對象的根,提供對其他所有Outlook對象的訪問。要從外部應用程序中訪問Outlook對象模型,必須先獲得Application對象的實例。

2.2.2Namespace對象

Namespace對象是Outlook數據源的抽象根。如果要訪問Outlook數據,則必須創建Namespace對象的實例。目前,所支持的唯一數據源是郵件應用程序編程接口MAPI,用于訪問Outlook文件夾組中的所有Outlook數據。

2.2.3MAPIFolder對象

Outlook數據存儲區內有一組支持默認功能的文件夾,使用Namespace的GetDefaultFolder()方法返回某個默認文件夾,即MAPIFolder對象。

2.2.4Items對象

Items代表Outlook項目集合,如郵件項目MailItem、任務項目TaskItem等。可以使用Application對象的CreateItem()創建新的項目或使用Items對象的索引器獲得并修改現有的項目。

2.2.5Explorers和Inspectors對象

Outlook對象模型還定義了用來對用戶界面進行操作的類型。Explorers對象包含一組Explorer對象,代表所有的瀏覽器。Explorer類型表示用于顯示文件夾內容的窗口。Inspectors對象包含一組Inspector對象,代表所有檢查器。Inspector對象代表顯示Outlook項目的窗口。

2.3用.NET開發Outlook插件

利用PIA,開發人員可以在.NET中方便地對Outlook的編程接口進行操作[7]。2003提供了“共享的外接程序”項目模板,通過創建自定義外接程序,對Outlook2003進行功能擴展。完成共享的外接程序向導后,得到包含兩個項目的解決方案,即外接程序項目和對應的安裝項目。

外接程序自動引用程序集Extensibility.dll。它包含命名空間Extensibility。其中確切定義了三個類型:

(1)IDTExtensibility2——所有外接程序都必須實現的關鍵接口;

(2)ext_ConnectMode——枚舉變量,表示將宿主程序(Outlook)連接到外接程序的各種方式;

(3)ext_DisconnectMode——枚舉變量,表示將外接程序與宿主程序斷開的各種方式。2.3.1IDTExtensibility2接口的角色

IDTExtensibility2接口類型定義了在插件生命周期的各個階段宿主應用程序所調用的方法。

(1)OnConnection()方法——插件連接到宿主程序時調用該方法。成功返回表明已加載了插件;否則宿主程序立即釋放其對該插件的引用。

(2)OnDisconnection()方法——插件斷開連接并且在從內存中卸載之前,將激活此事件。

(3)OnAddInsUpdate()方法——當最終用戶在宿主程序中插入或刪除插件時,調用OnAddInsUpdate()方法。

(4)OnStartupComplete()和OnBeginShutdown()方法——只有在啟動期間已連接了插件的情況下才調用OnStartupComplete();此時所有宿主資源均可供插件使用,因此典型的操作是為插件構造用戶界面。宿主程序在關閉過程中要斷開與插件連接的情況下調用OnBeginShutdown();通常在此事件中執行所有資源清理操作,并還原對宿主程序所作的任何更改。

2.3.2實現用戶界面和業務邏輯

宿主程序加載完成之后,所有的宿主資源均可供插件使用。因此,通常在OnStartupComplete()方法中構建插件的用戶界面。例如,向瀏覽器標準命令欄中添加CommandBarButton的步驟如下:

(1)從活動資源管理器獲得命令欄集。

(2)查看按鈕是否在希望修改的命令欄控件集合中。如果不在,則創建并啟用新的實例。

(3)設置CommandBarButton的Click事件委托,以完成其自定義功能。

根據步驟(3)中指定的自定義按鈕的事件委托,在對應的方法中完成用戶自定義操作,實現業務邏輯。

2.3.3注冊共享外接程序

要在Outlook中使用插件,必須注冊插件動態鏈接庫。該動態鏈接庫的類標志符在注冊表的\HKEY_CLASSES_ROOT子樹下注冊。另外,必須在注冊表中添加有關插件的信息。該信息提供插件的名稱、說明、目標應用程序、初始加載行為和連接狀態等。通常在注冊表中創建以下鍵值:

HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\ProgID

其中ProgID為插件程序的唯一標志符的字符串表示形式。

外接程序項目的生成設置中已選中了“注冊COMinterop”,生成插件的過程中自動向COMinterop注冊了.NET類。

3基于最大熵模型的垃圾郵件過濾插件

為了在客戶端對用戶收到的郵件實現基于內容的過濾,將最大熵模型與Outlook插件開發技術結合,

在.NET平臺上實現了基于最大熵模型的垃圾郵件過濾插件。

3.1IDTExtensibility2接口的實現

(1)在OnConnection()方法中獲得Outlook和插件ME-MFS對象實例;判斷連接模式,把用戶自定義數據傳送到OnStartupComplete方法。

取得宿主程序和插件對象的實例;

判斷連接模式connectMode,若不為ext_ConnectMode.ext_cm_Start ̄up則調用OnStartupComplete(),并傳遞用戶自定義數據。

(2)在OnStartupComplete()方法中構造用戶界面,定義事件委托以完成業務邏輯,并對用戶自定義數據進行處理。

取得活動Explorer對象的CommandBars;

取得CommandBars中的“菜單欄”;

如果用戶自定義菜單不存在,則創建用戶自定義菜單,并將其添加到系統菜單欄,向自定義菜單中添加各菜單項;

設置用戶自定義菜單項的事件委托,以完成業務邏輯。

(3)在OnDisconnection()方法中檢查斷開模式,把用戶自定義數據傳遞到OnBeginShutdown()方法,釋放Outlook實例。

判斷斷開模式disconnectMode,若不為ext_DisconnectMode.ext_dm_HostShutdown,則調用OnBeginShutdown(),并傳遞用戶自定義數據;

釋放宿主程序對象實例。

(4)在OnBeginShutdown()方法中還原對Outlook用戶界面所作的修改。

取得活動Explorer的菜單欄;

取得用戶自定義菜單,如果存在,則從菜單欄中刪除用戶自定義菜單,還原對用戶界面的修改。

3.2自定義用戶界面

按照上述方法中的步驟,在Outlook中構造用戶自定義菜單“MEMFS”,插入完成垃圾郵件過濾功能的菜單項:

(1)特征提取——獲得用戶Outlook文件夾中現有的所有郵件,把“垃圾郵件”文件夾中的郵件作為垃圾郵件,其他郵件文件夾中的郵件作為正常郵件;提取郵件特征,生成特征文件,以進行最大熵模型的訓練。

(2)模型訓練——根據已生成的特征文件,進行GIS迭代收斂,得到最大熵模型。

(3)模型調整——郵件過濾結果不正確時,幫助用戶修改模型參數,實現用戶的個性化要求。

3.3垃圾郵件過濾邏輯的實現得到最大熵模型后,即可使用此模型進行垃圾郵件過濾。當新郵件到達時,插件獲取新郵件的特征,由最大熵模型對新郵件進行判斷。如果是垃圾郵件,則將其由收件箱轉移到垃圾郵件文件夾中。

取得收件箱中收到的新郵件;

提取新郵件的特征;

用最大熵模型進行概率估計,求出新郵件對正常郵件和垃圾郵件的概率,取其中較大的概率對應的類別作為新郵件類別;

若新郵件為垃圾郵件,則將其轉移到垃圾郵件文件夾。

在郵件特征提取和新郵件到達處理時,都要獲得Outlook2003文件夾中的郵件項。獲得這些郵件項的基本過程如下:

用Application對象的GetNamespace()方法取得NameSpace類型;

用NameSpace的GetDefaultFolder()方法取得MAPIFolder類型;

使用MAPIFolder.Items索引器枚舉各郵件項。

4結束語

本文將在統計自然處理領域應用廣泛的最大熵模型引入到垃圾郵件過濾中,利用Outlook2003提供的PIA,在.NET平臺上開發出了垃圾郵件過濾插件,在客戶端實現了基于內容的垃圾郵件過濾,能較好地幫助用戶解決垃圾郵件泛濫的問題。本文的插件開發技術,稍作修改即可應用于其他版本的Outlook。

參考文獻:

[1]中國互聯網協會反垃圾郵件中心.2005年第三次中國反垃圾郵件狀況調查報告[EB/OL].[2006-02].www.anti-/.

[2]潘文鋒.基于內容的垃圾郵件過濾研究[D].北京:中國科學院研究生院,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#進行Outlook2003編程的簡介[EB/OL].(2004-07)./china/msdn/library/langtool/vcsharp/USdv_vstechartol03csharp.mspx.