用字母创建一个dfm的单词

时间:2016-11-20 02:10:50

标签: r sapply quanteda dfm

我正在尝试从字符串创建一个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
  1. 对于“a / de-d / f”,我想捕捉字母“/”“ - ”太多
  2. 为什么是“。”作为rowum的功能。如何将其作为个人功能保留?

1 个答案:

答案 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}}仍然作为功能出现,因为它们是字典键,但每个文档的计数为零。