SSIS高級轉換任務—關鍵詞抽取
如果你曾經為網站做過單詞或短語分析以便獲得更好的搜索排名,你會對SSIS的這個任務很感興趣。關鍵詞提取任務是從文本流中查找并計算關鍵詞的出現頻率的工具。它可與接收任何形式的文本,輸出兩列:一列是關鍵詞,另一列是這個關鍵詞在文本中出現的頻率的統計值。這個統計值可以是該關鍵詞出現的次數,也可以是使用稍微復雜一點的計算公式(TFIDF)計算得出的幾率值。縮寫詞TFIDF的全稱是Term Frequency and Inverse Document Frequency,是一個用于計算單詞或詞組在在整個文本中出現的幾率。下面是這個公式的表達式:
TDIDF (of a term or phrase) = (frequency of term) * log((# rows in sample)/(# rows with term or phrase))
這里我們討論的關鍵詞提取任務使用SSIS組件內嵌的算法和公式計算得到提取結果,我們自己不能修改內部的算法邏輯,它是由別人設計好的,但是可以配置一些選項例如,如何分割關鍵詞,統計名詞還是名詞詞組。我們也可以根據提取行為調整這些配置。雖然在特定范圍內提取,但是它還是提供一些預先定義的單詞或詞組時干擾項,這些干擾次貨詞組不予統計在最終結果之內。經過幾次測試調整就可以產生一個非常有價值的統計結果。
在使用之前也許會思考它的使用場合,例如數據倉庫內保存類一個客戶服務系統中的一個數據列,它存儲的是客戶的建議和意見,如果使用這種任務來產生一個關鍵詞統計結果是不是會很有用呢?我們可以很清楚地看出最大范圍內客戶不滿意的地方,這就是使用關鍵詞提取的一個很合適的場合。這里要求輸入數據類型是ANSI(DT_WSTR)或者Unicode(DT_NTEXT)。如果不是這來年各種類型要使用Data Convertion來轉換數據。最好的學習方法還是來實際操作一個例子,這個例子就是關于客戶評價的。
從生產環境中得到一個客戶服務系統中的客戶評價的數據列。為了簡便起見我們將他們放在一個文本文件中。
- 使用下面內容創建一個文本文件,保存為c”\custsvc.txt
Ice maker in freezer stopped working model XX-YY3
Door to refrigerator is coming off model XX-1
Ice maker is making a funny noise XX-YY3
Handle on fridge falling off model XX-Z1
Freezer is not getting cold enough XX-1
Ice maker grinding sound fridge XX-YY3
Customer asking how to get the ice maker to work model XX-YY3
Customer complaining about dent in side panel model XX-Z1
Dent in model XX-Z1
Customer wants to exchange model XX-Z1 because of dent in door
Handle is wiggling model XX-Z1
- 創建一個包命名為TermExtractionExample,拖放一個Data Flow task,雙擊進入Control Flow 設計界面
- 拖放一個Flat File Connection,連接上述文件,將輸出列的列名修改為CustSvcNote。OutputColumnWidth設置為100。添加一個Flat File DataSource,使用上面建立的文件數據源
- 我們可以看到Flat File DataSource的輸出數據類型是DT_STR,這里需要將數據類型轉換成DT_WSTR或者DT_NTEXT。添加一個Data Conversion Transform,將Flat File DataSource和它連接起來設置Input Column為CustSvcNote,輸出別名為ConvCustSvcNote,數據類型為DT_WSTR
- 添加一個Term Extraction task,將Data Conversion Transform和它連接起來,打開編輯界面,如圖1顯示輸入列和兩個有默認列名的輸出列,這里也可以修改輸出列的列名,這里我們選擇ConvCustSvcNote因為它被轉換成Unicode String,如果你選擇了CustSvcNote,將會得到下面的驗證提示:The input column can only have DT_WSTR or DT_NTEXT as its data type.

圖1 - 關閉編輯界面,忽略關于錯誤輸出的警告。
- 新建一個OLE DB Destination,將Term Extraction task和它連接起來,將它連接上數據庫AdventureWorks
- 點擊新建一個表使用下面的語句創建新表。
CREATE TABLE [TermResults] ([Term] NVARCHAR(128),[Score] DOUBLE PRECISION) - 點擊Mappings ,查看映射關系。
- 在Term Extract Transformation和OLE DB Destination之間添加一個Data View,運行這個package。運行過程中將會停止并在DataView中顯示執行結果。可以看到一組單詞和他們的統計值。這里我們默認設置,所以score列顯示的是關鍵詞出現的次數,點擊Advanced標簽,如圖2,查看高級設置。

圖2 - 高級標簽被分成四個部分。
Term Type:設置輸入流應該如何劃分。Noun將只統計名詞,Noun Phrases將只統計名詞詞組,Noun and Noun Phrases將這二者都統計。
Score Type :使用Frequence或者TFIDF算法統計。
Parameters:次數門檻表示設置表示至少出現2次才會被統計出來。最大長度表示單詞最大字母的個數必須小于12。
配置不同得到的結果也會不同,下圖3顯示不同的配置得到的不同結果。
圖3
這里注意到Term Type設置為Both的時候“model XX-Z1”統計了3次,但是我們在文本中查看發現它出現了5次,如果設置Term Type為nouns的時候會統計5次。這也說明名詞詞組可能不會被正確地統計。
在圖3的統計結果中我們也可以看到“model”,“model XX-Z1”,“model XX-YY3”,“ice maker”,“dent”,“customer”出現的頻率較高,這里也可以假設模型XX-Z1,XX-YY3有可能出現了問題,需要檢查一下。
在這個結果中我們也看到一些名詞并不是我們感興趣的,例如model,customer。也可以將這些干擾單詞舍棄。使用Exclusion標簽內的設置可以達到這個目目的。如圖6-20顯示了配置結果,保存后查看結果。下面是新建TermExclusions表的語句和,表中的 數據只有兩行model和customer。
CREATE TABLE [dbo].[TermExclusions](
[Term] [nvarchar](128) NULL
) ON [PRIMARY]
圖4
最后TermResults表中的結果如圖5,圖中顯示的單詞出現的次數,如果在Advanced中選擇的是TFIDF,那么這里的結果將是一個類似0.213這樣的小數。

圖5
我們還可以看到結果中“model XX-Z1”,“model XX-YY3”沒有統計了,這是因為我們去除了“model” 。另外一種方法是使用一個關鍵詞列表,在這個列表中添加一些想統計的關鍵詞來干預統計結果,這就是另外一種task-關鍵詞查找。
作者:Tyler Ning
出處:http://www.rzrgm.cn/tylerdonet/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,請微信聯系冬天里的一把火
浙公網安備 33010602011771號