我正在尝试从字符串创建一个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
答案 0 :(得分:0)
问题(正如@lukeA在评论中指出的那样)是.
使用了错误的模式匹配。你正在使用一个正则表达式,其中x
代表任何字符,因此这里给你一个总数(你称之为rowum)。
让我们首先看一下dfm()
x
# cab baa a/de-d/f ad
# "c a b" "b a a" "a / d e - d / f" "a d"
,它将在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
的空白处进行标记,以便每个角色都成为一个标记。
dfm()
首先回答(2),你得到的是&#34;正则表达式&#34;匹配:
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
即将结束,但没有回答(1)。要解决这个问题,您需要通过/
更改默认令牌化行为,以便它不会删除标点符号。
-
现在正在计算.
和'
。 __init__.py
和{{1}}仍然作为功能出现,因为它们是字典键,但每个文档的计数为零。