问题(正如@lukeA 在评论中指出的那样)是您valuetype
使用了错误的模式匹配。您正在使用正则表达式,其中.
代表任何字符,因此这里得到一个总数(您称之为 rowsum)。
让我们先看一下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
现在/
和-
正在被计算在内。和仍然作为特征存在.
,'
因为它们是字典键,但每个文档的计数为零。