Это возможно, но сначала вам нужно будет преобразовать глобальные совпадения с "rain *" в "rain", используя dfm_lookup()
.(Примечание: есть другие способы сделать это, такие как токенизация и затем использование tokens_lookup()
или tokens_replace()
, но я думаю, что подход поиска более прост, и это также то, что вы задали в вопросе.
Также обратите внимание, что для сходства функций у вас должно быть более одного документа, что объясняет, почему я добавил еще два.
txt <- c("It is raining. It rains a lot during the rainy season",
"Raining today, and it rained yesterday.",
"When it's raining it must be rainy season.")
rain_dfm <- dfm(txt)
Затем используйте словарь для преобразования совпадений глобуса (по умолчанию) с помощью "rain * "to" rain ", сохраняя другие функции. (В данном конкретном случае вы правы, что dfm_wordstem()
мог бы выполнить то же самое.)
rain_dfm <- dfm_lookup(rain_dfm,
dictionary(list(rain = "rain*")),
exclusive = FALSE,
capkeys = FALSE)
rain_dfm
## Document-feature matrix of: 3 documents, 17 features (52.9% sparse).
## 3 x 17 sparse Matrix of class "dfm"
## features
## docs it is rain . a lot during the season today , and yesterday when it's must be
## text1 2 1 3 1 1 1 1 1 1 0 0 0 0 0 0 0 0
## text2 1 0 2 1 0 0 0 0 0 1 1 1 1 0 0 0 0
## text3 1 0 2 1 0 0 0 0 1 0 0 0 0 1 1 1 1
И теперь вы можете вычислитькосинус сходства для целевой характеристики «дождь»:
textstat_simil(rain_dfm, selection = "rain", method = "cosine", margin = "features")
## rain
## it 0.9901475
## is 0.7276069
## rain 1.0000000
## . 0.9801961
## a 0.7276069
## lot 0.7276069
## during 0.7276069
## the 0.7276069
## season 0.8574929
## today 0.4850713
## , 0.4850713
## and 0.4850713
## yesterday 0.4850713
## when 0.4850713
## it's 0.4850713
## must 0.4850713
## be 0.4850713