r quanteda 顶级特征提取返回修饰词

r quanteda top features extraction returning modified words

我曾尝试使用 quanteda 提取顶级特征,但结果是修改过的词,即 'faulti' 而不是 'faulty'。这应该是预期的结果吗?

我已经尝试在原始数据集中搜索最重要的特征关键字,但没有像预期的那样匹配。

编辑:如果我为函数 dfm() 设置选项 stem=FALSE,则关键字恢复为正常词。

library(quanteda)    
corpus1 = corpus(as.character(training_data$Elec_rmk))
kwic(corpus1, 'faulty')

#[text25701, 4]              Convertible roof sometime | faulty | . SD card missing.               
#[text25701, 22]              unavailable). Pilot lamp | faulty | .  

dfm1 <- dfm(
  corpus1, 
  ngrams = 1, 
  remove = stopwords("english"),
  remove_punct = TRUE,
  remove_numbers = TRUE,
  stem = TRUE)
tf1 <- topfeatures(dfm1, n = 10)
tf1
# key words were modified/truncated words?
#faulti malfunct    light    damag     miss    cover     rear     loos     lamp    plate 
#   562      523      454      337      331      325      295      259      250      238 

library(stringr)
sum(str_detect(training_data$Elec_rmk, 'faulti')) # 0
sum(str_detect(training_data$Elec_rmk, 'faulty')) # 495

dfm 默认情况下不阻止。但是您将 stem 选项设置为 TRUE hency "faulti"。但是正如您在编辑备注中提到的那样,将此设置为 FALSE(或省略此设置)将 return 无词干。

但您似乎误解了 str_detect return 和 topfeatures return 的含义。 str_detect 只检测搜索字符串是否出现在句子中,但不检测出现了多少次。你的总和只计算句子中单词 (495) 的出现。 topfeatures 计算单词在文本中实际出现的次数 (562))。

查看以下示例以了解不同之处:

# 1 line of text (paragraph)
my_text <- "I have two examples of two words in this text. Isn't having two words fun?"

topfeatures(dfm(my_text, remove = stopwords("english"), remove_punct = TRUE), n = 2)
  two words 
    3     2 
sum(str_detect(my_text, "two"))
[1] 1

# 2 sentences.
my_text2 <- c("I have two examples of two words in this text.", "Isn't having two words fun?")

topfeatures(dfm(my_text2, remove = stopwords("english"), remove_punct = TRUE), n = 2)
  two words 
    3     2 
sum(str_detect(my_text2, "two"))
[1] 2

对于第一个例子,topfeatures returns 3 for the word "two", str_detect just returns 1.只有1个向量/ 供 str_detect 查看的一段文字。

对于第二个示例,topfeatures 再次 returns 3 表示单词 "two"。 str_detect 现在 returns 2,向量中有 2 个值,因此它在两个句子中都检测到单词 "two",但它仍然缺少实际的 3 个值。