Создание слова из букв
Я пытаюсь создать DFM букв из строк. Я сталкиваюсь с проблемами, когда dfm не может выбрать, может создать функции для пунктуации, такие как "/" "-" "." или же '.
require(quanteda)
dict = c('a','b','c','d','e','f','/',".",'-',"'")
dict <- quanteda::dictionary(sapply(dict, list))
x<-c("cab","baa", "a/de-d/f","ad")
x<-sapply(x, function(x) strsplit(x,"")[[1]])
x<-sapply(x, function(x) paste(x, collapse = " "))
mat <- dfm(x, dictionary = dict, valuetype = "regex")
mat <- as.matrix(mat)
mat
- Для "a / de-d / f" я хочу захватить буквы "/" "-" тоже
- Почему это "." функция выступает в качестве строки. Как я могу сохранить это как индивидуальную особенность?
1 ответ
Проблема (как отмечает @lukeA в комментарии) состоит в том, что ваш valuetype
использует неправильное соответствие шаблону. Вы используете регулярное выражение, где .
обозначает любой символ, и, следовательно, здесь мы получаем общую сумму (то, что вы называете строкой).
Давайте сначала посмотрим на x
, который будет помечен на пробел dfm()
, так что каждый персонаж становится токеном.
x
# cab baa a/de-d/f ad
# "c a b" "b a a" "a / d e - d / f" "a d"
Чтобы ответить (2) в первую очередь, вы получите следующее с регулярным выражением:
dfm(x, dictionary = dict, valuetype = "regex", verbose = FALSE)
## Document-feature matrix of: 4 documents, 10 features.
## 4 x 10 sparse Matrix of class "dfmSparse"
## features
## docs a b c d e f / . - '
## cab 1 1 1 0 0 0 0 3 0 0
## baa 2 1 0 0 0 0 0 3 0 0
## a/de-d/f 1 0 0 2 1 1 0 5 0 0
## ad 1 0 0 1 0 0 0 2 0 0
Это близко, но не отвечает (1). Чтобы решить эту проблему, вам нужно изменить поведение токенизации по умолчанию: dfm()
так что это не удаляет пунктуацию.
dfm(x, dictionary = dict, valuetype = "fixed", removePunct = FALSE, verbose = FALSE)
## Document-feature matrix of: 4 documents, 10 features.
## 4 x 10 sparse Matrix of class "dfmSparse"
## features
## docs a b c d e f / . - '
## cab 1 1 1 0 0 0 0 0 0 0
## baa 2 1 0 0 0 0 0 0 0 0
## a/de-d/f 1 0 0 2 1 1 2 0 1 0
## ad 1 0 0 1 0 0 0 0 0 0
а теперь /
а также -
подсчитываются. .
а также '
остаются присутствующими как функции, потому что они были ключами словаря, но имеют нулевой счет для каждого документа.