用字母创建单词的 dfm
creating a dfm of words with letters
我正在尝试从字符串创建字母 dfm。当 dfm 无法选择 can create features for punctuations such as "/" "-" "." 时,我遇到了问题。或 '.
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",我也想捕获字母“/”“-”
- 为什么是“.”作为行和的特征。我怎样才能将它保留为单独的功能?
问题(正如@lukeA 在评论中指出的那样)是您的 valuetype
使用了错误的模式匹配。您正在使用一个正则表达式,其中 .
代表任何字符,因此这里得到一个总数(您称之为行和)。
我们先来看x
,它会被dfm()
在空白处进行token化,这样每个字符就成为一个token。
x
# cab baa a/de-d/f ad
# "c a b" "b a a" "a / d e - d / f" "a d"
首先回答 (2),您将得到以下 "regex" 匹配项:
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
现在正在计算 /
和 -
。 .
和 '
仍然作为特征存在,因为它们是字典键,但每个文档的计数为零。
我正在尝试从字符串创建字母 dfm。当 dfm 无法选择 can create features for punctuations such as "/" "-" "." 时,我遇到了问题。或 '.
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",我也想捕获字母“/”“-”
- 为什么是“.”作为行和的特征。我怎样才能将它保留为单独的功能?
问题(正如@lukeA 在评论中指出的那样)是您的 valuetype
使用了错误的模式匹配。您正在使用一个正则表达式,其中 .
代表任何字符,因此这里得到一个总数(您称之为行和)。
我们先来看x
,它会被dfm()
在空白处进行token化,这样每个字符就成为一个token。
x
# cab baa a/de-d/f ad
# "c a b" "b a a" "a / d e - d / f" "a d"
首先回答 (2),您将得到以下 "regex" 匹配项:
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
现在正在计算 /
和 -
。 .
和 '
仍然作为特征存在,因为它们是字典键,但每个文档的计数为零。