Использование texttat_simil со словарем или глобусами в Quanteda - PullRequest
0 голосов
/ 28 ноября 2018

Я изучил документацию, но, насколько я понимаю, теперь есть способ использовать функцию textstat_simil со словарем или глобусами.Каков наилучший способ приблизиться к чему-то подобному ниже?

txt <- "It is raining. It rains a lot during the rainy season"
rain_dfm <- dfm(txt)
textstat_simil(rain_dfm, "rain", method = "cosine", margin = "features")

Нужно ли использовать tokens_replace, чтобы изменить "дождь *" на "дождь", или есть другой способ сделать это?В этом случае решение проблемы может быть решено, но как насчет случаев, когда это невозможно?

1 Ответ

0 голосов
/ 28 ноября 2018

Это возможно, но сначала вам нужно будет преобразовать глобальные совпадения с "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
...