我正在使用Quanteda 软件包套件来预处理一些文本数据。我想将搭配合并为功能,并决定使用textstat_collocations功能。根据文档,我引用:
“标记对象......虽然支持识别标记对象的搭配,但由于从已经标记化的文本中相对不完善的句子边界检测,您将获得更好的字符或语料库对象结果。 ”
这很有意义,所以这里是:
library(dplyr)
library(tibble)
library(quanteda)
library(quanteda.textstats)
# Some sample data and lemmas
df= c("this column has a lot of missing data, 50% almost!",
"I am interested in missing data problems",
"missing data is a headache",
"how do you handle missing data?")
lemmas <- data.frame() %>%
rbind(c("missing", "miss")) %>%
rbind(c("data", "datum")) %>%
`colnames<-`(c("inflected_form", "lemma"))
(1) 使用语料库对象生成搭配:
txtCorpus = corpus(df)
docvars(txtCorpus)$text <- as.character(txtCorpus)
myPhrases = textstat_collocations(txtCorpus, tolower = FALSE)
(2) 预处理文本并识别搭配并为下游任务进行词形还原。
# I used a blank space as concatenator and the phrase function as explained in the documentation and I followed the multi multi substitution example in the documentation
# https://quanteda.io/reference/tokens_replace.html
txtTokens = tokens(txtCorpus, remove_numbers = TRUE, remove_punct = TRUE,
remove_symbols = TRUE, remove_separators = TRUE) %>%
tokens_tolower() %>%
tokens_compound(pattern = phrase(myPhrases$collocation), concatenator = " ") %>%
tokens_replace(pattern=phrase(c(lemmas$inflected_form)), replacement=phrase(c(lemmas$lemma)))
(3) 测试结果
# Create dtm
dtm = dfm(txtTokens, remove_padding = TRUE)
# pull features
dfm_feat = as.data.frame(featfreq(dtm)) %>%
rownames_to_column(var="feature") %>%
`colnames<-`(c("feature", "count"))
dfm_feat
特征 | 数数 |
---|---|
这 | 1 |
柱子 | 1 |
拥有 | 1 |
一种 | 2 |
很多 | 1 |
的 | 1 |
几乎 | 1 |
一世 | 2 |
是 | 1 |
感兴趣的 | 1 |
在 | 1 |
问题 | 1 |
是 | 1 |
头痛 | 1 |
如何 | 1 |
做 | 1 |
你 | 1 |
处理 | 1 |
缺失数据 | 4 |
“缺失数据”应该是“缺失数据”。
这仅在 df 中的每个文档都是一个单词时才有效。如果我从一开始就使用令牌对象生成我的搭配,我可以使这个过程正常工作,但这不是我想要的。