Смотри вперед и смотри назад не работает для Quanteda словарь - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь настроить словарь quanteda, который содержит много совпадающих терминов. Я полагаю, что использование регулярных выражений «смотреть вперед / смотреть назад» могло бы помочь решить эту проблему и избежать ложных попаданий, но я, должно быть, делаю что-то не так.

text <- c("guinea", "equatorial guinea", "guinea bissau")
dict <- dictionary(list(guinea="guinea"))
dfm <- dfm(text, dictionary=dict, valuetype="regex")
colSums(dfm)              
dict2 <- dictionary(list(guinea="(?<!equatorial[[:space:]])guinea"))
dfm2 <- dfm(text, dictionary=dict2, valuetype="regex")
colSums(dfm2)
dict3 <- dictionary(list(guinea="guinea(?![[:space:]]bissau)"))
dfm3 <- dfm(text, dictionary=dict3, valuetype="regex")
colSums(dfm3)

Ожидаемые результаты должны быть

# dfm1
colSums(dfm1)
guinea 
     3 
# dfm2
colSums(dfm2)
guinea 
     2
# dfm3 
colSums(dfm3)
guinea 
     2 

Но фактические результаты все = 3 Это проблема с просмотром вперед / назад или с тем, как вставляется пробел?

1 Ответ

1 голос
/ 12 июня 2019

Этот вид сопоставления с регулярным выражением не работает, поскольку шаблоны не могут охватывать несколько токенов, а при вызове dfm(x, dictionary = ...) он фактически вызывает tokens_lookup() после токенизации текста.

Существует гораздо более простой способ сделать это, просто включить значения из нескольких слов в ваш словарь. Итак:

library("quanteda")
## Package version: 1.4.3

text <- c("guinea", "equatorial guinea", "guinea bissau")

dict <- dictionary(list(guinea = "guinea"))
dict2 <- dictionary(list(guinea = "equatorial guinea"))
dict3 <- dictionary(list(guinea = "guinea bissau"))

dfm(text, dictionary = dict)
## Document-feature matrix of: 3 documents, 1 feature (0.0% sparse).
## 3 x 1 sparse Matrix of class "dfm"
##        features
## docs    guinea
##   text1      1
##   text2      1
##   text3      1

dfm(text, dictionary = dict2)
## Document-feature matrix of: 3 documents, 1 feature (66.7% sparse).
## 3 x 1 sparse Matrix of class "dfm"
##        features
## docs    guinea
##   text1      0
##   text2      1
##   text3      0

dfm(text, dictionary = dict3)
## Document-feature matrix of: 3 documents, 1 feature (66.7% sparse).
## 3 x 1 sparse Matrix of class "dfm"
##        features
## docs    guinea
##   text1      0
##   text2      0
##   text3      1
...