Манипулировать (переименовывать и перекомбинировать) функции в dfm (кванта)

Я хотел бы манипулировать (переименовывать и комбинировать) функции в dfm, как действовать?

Причина в следующем: я хочу использовать другой алгоритм стемминга, нежели стеммер Портера, реализованный в Quanteda (алгоритм kpss, вызываемый через Python).

Пример Предложение c из трех слов ("creatief creatieve creatie") приведет к dfm с тремя функциями (например, "creatief", "creatieve", "creatie"), все с периодичностью термина из 1. Однако алгоритм kpss свяжет эти слова до "creatie". Было бы очень удобно, если бы я мог объединить эти три функции в dfm в одну функцию, называемую «creatie», с частотой запроса три.

Ваша помощь очень ценится.

(Примечание. Я понимаю, что такие манипуляции с данными возможны после преобразования dfm в «простую» матрицу, но я хотел бы сделать это в dfm).

Добавление. Я упустил из виду функцию dfm_compress. Я почти готов ... После того, как я сжал dfm, можно ли применить словарь, например оба слова «креати» и «новаторство» должны учитываться как вхождения категории слова «креати» (см. словарную функцию в dfm)? (Примечание. Учитывая огромный объем текстовых сообщений, я бы предпочел не останавливать файлы сырых данных)


person pmkruyen    schedule 22.03.2017    source источник
comment
Дорогой Кен, Спасибо за ответ. Я упустил из виду функцию dfm_compress. Я почти готов ... После того, как я сжал dfm, можно ли применить словарь, например оба слова «креати» и «новаторство» должны учитываться как вхождения категории слова «креати» (см. словарную функцию в dfm)? (Примечание. Учитывая огромный объем текстовых сообщений, я бы предпочел не останавливать файлы сырых данных).   -  person pmkruyen    schedule 26.03.2017


Ответы (1)


Вы можете сделать это, создав dfm и затем скомпилировав функции, а затем перекомпилировав dfm, чтобы объединить функции, которые стали идентичными после создания основы.

require(quanteda)
txt <- c("creatief creatieve creatie")

(dfm1 <- dfm(txt))
## Document-feature matrix of: 1 document, 3 features (0% sparse).
## 1 x 3 sparse Matrix of class "dfmSparse"
##        features
## docs    creatief creatieve creatie
##   text1        1         1       1

Вот шаг, который я аппроксимировал для вашего примера, но вы бы заменили функцию подмножества строк с правой стороны ниже своей собственной операцией выделения корней в векторе символов функций.

# this approximates what you can do with the Python-based stemmer
# note that here you must use colnames<- since there is no function
# featnames<- (for replacement)
colnames(dfm1) <- stringi::stri_sub(featnames(dfm1), 1, 7)
dfm1
## Document-feature matrix of: 1 document, 3 features (0% sparse).
## 1 x 3 sparse Matrix of class "dfmSparse"
##        features
## docs    creatie creatie creatie
##   text1       1       1       1

Затем вы можете перекомпилировать dfm для компиляции счетчиков.

# this combines counts in featnames that are identical
dfm_compress(dfm1)
## Document-feature matrix of: 1 document, 1 feature (0% sparse).
## 1 x 1 sparse Matrix of class "dfmSparse"
##        features
## docs    creatie
##   text1       3

Обратите внимание, что если вы использовали стеммер quanteda, этот шаг может быть dfm_wordstem():

dfm_wordstem(dfm1)
## Document-feature matrix of: 1 document, 1 feature (0% sparse).
## 1 x 1 sparse Matrix of class "dfmSparse"
##        features
## docs    creati
##   text1      3
person Ken Benoit    schedule 23.03.2017