2017-03-20 45 views
2

我正在處理文本挖掘項目並嘗試清除文本 - 單/複數形式的單詞,不同時態的動詞和拼寫錯誤的單詞。我的示例如下所示:在R的字詞

test <- c("apple","apples","wife","wives","win","won","winning","winner","orange","oranges","orenge") 

我試圖在SnowballC軟件包中使用wordStem函數。然而,結果是錯誤的:

"appl" "appl" "wife" "wive" "win" "won" "win" "winner" "orang" "orang" "oreng" 

我想看到的是:

"apple" "apple" "wife" "wife" "win" "win" "win" "winner" "orange" "orange" "orange" 
+0

你可能想看看tm包中的'stemCompletion'函數。 – Dason

+0

你希望對結果做什麼?對於文本分析的許多應用來說,只要有兩種不同形式的詞映射到同一個詞幹,而沒有詞幹需要成爲真正的英語詞根。特別是,您要調用的函數使用Martin Porter博士的流行干擾算法的版本,該算法不嘗試查找實際的英文根。結果並不是「錯誤的」 - 它正在做它設計的目的,而不是你期望的。 –

回答

3

這是波特施特默爾是如何工作的。原因是它允許相當簡單的規則來創建詞幹,而無需存儲大量的英語詞彙。例如,我認爲你不會喜歡changechangingchang。似乎更自然的是,他們都應該幹到change。所以你會制定一個規則,如果你把ing關閉了一個單詞的結尾,你應該加回e來得到這個詞幹?那麼clangclanging會發生什麼? Porter Stemmer給出clang。添加e會給非字clange。無論是使用簡單的處理規則,有時會創建不是單詞的詞幹,,您必須包含大量詞彙並具有更復雜的規則,這些規則取決於單詞的含義。 Porter Stemmer使用簡單的規則方法。