變更 n-gram
到目前為止,我們只用單字建立過 TDM 與 DTM。預設是使用 unigram,但你也可以將重點放在包含 2 個以上單字的 token。這有助於擷取有用片語,進一步帶來新的洞見,或為機器學習演算法提供更好的預測特徵。
下面的函式使用 RWeka 套件建立 trigram(3 個字)token:min 與 max 都設為 3。
tokenizer <- function(x) {
NGramTokenizer(x, Weka_control(min = 3, max = 3))
}
接著,客製化的 tokenizer() 函式可以做為額外參數,傳入 TermDocumentMatrix 或 DocumentTermMatrix 函式中:
tdm <- TermDocumentMatrix(
corpus,
control = list(tokenize = tokenizer)
)
本練習屬於課程
R 的 Bag-of-Words 文本探勘
練習說明
一個 corpus 已如前一步驟以 chardonnay 推文完成前處理。產生的物件 text_corp 已可在你的工作空間中使用。
- 建立一個如上所示、可產生 2 字 bigram 的
tokenizer函式。 - 直接對
text_corp呼叫DocumentTermMatrix()(不使用tokenizer()函式)以建立unigram_dtm。 - 使用你剛建立的
tokenizer(),對text_corp呼叫DocumentTermMatrix()以建立bigram_dtm。 - 檢視
unigram_dtm與bigram_dtm。哪一個包含的 terms 較多?
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Make tokenizer function
___ <- function(x) {
___(___, ___(___, ___))
}
# Create unigram_dtm
___ <- ___(___)
# Create bigram_dtm
___ <- ___(
___,
___
)
# Print unigram_dtm
___
# Print bigram_dtm
___