Ваша интуиция верна.
hunspell_stem(term)
возвращает list
длины length(term)
векторов символов.
Векторы, кажется, имеют слово, но только если оно было найденов словаре в качестве первого элемента и стебля в качестве второго, если он еще не является стеблем.
> hunspell::hunspell_stem(df$y)
[[1]]
[1] "love"
[[2]]
[1] "lover" "love"
[[3]]
[1] "lovely" "love"
[[4]]
[1] "base"
[[5]]
[1] "snoop"
[[6]]
character(0)
[[7]]
[1] "pound"
Следующая функция возвращает либо стебель, либо исходный термин
stem_hunspell <- function(term) {
stems <- hunspell::hunspell_stem(term)
output <- character(length(term))
for (i in seq_along(term)) {
stem <- stems[[i]]
if (length(stem) == 0) {
output[i] <- term[i]
} else {
output[i] <- stem[length(stem)]
}
}
return(output)
}
Если вы хотите, чтобы dawg не возвращался, функция становится проще:
stem_hunspell <- function(term) {
stems <- hunspell::hunspell_stem(term)
output <- character(length(term))
for (i in seq_along(term)) {
stem <- stems[[i]]
if (length(stem) > 0) {
output[i] <- stem[length(stem)]
}
}
return(output)
}