2

我想在 dfm 中操作(重命名和组合)功能,如何进行?

原因如下:我想使用与 Quanteda 中实现的 Porter 词干分析器(通过 Python 调用的 kpss 算法)不同的词干提取算法。

示例 三个单词的句子 c("creatief creatieve creatie") 将产生一个具有三个特征(即“creatief”、“creatieve”、“creatie”)的 dfm,它们的词频均为 1。但是,kpss算法将把这些词词根化为“creatie”。如果我可以将 dfm 中的这三个特征组合成一个名为“creatie”的特征,其词频为 3,那将非常方便。

非常感谢您的帮助。

注意。我知道在将 dfm 转换为“简单”矩阵后可以进行此类数据操作,但我想在 dfm 中执行此操作)。

附录 我忽略了 dfm_compress 函数。我快到了...在我压缩了 dfm 之后,是否也可以应用字典,例如单词 'creati' 和 'innovati' 应该都算作单词类别 'creati' 的出现(cf. dfm中的字典函数)?(注意。鉴于大量的 txt,我宁愿不喜欢阻止原始数据文件)

4

1 回答 1

1

您可以通过创建 dfm 然后对特征进行词干化,然后重新编译 dfm 以组合在词干化后相同的特征来做到这一点。

require(quanteda)
txt <- c("creatief creatieve creatie")

(dfm1 <- dfm(txt))
## Document-feature matrix of: 1 document, 3 features (0% sparse).
## 1 x 3 sparse Matrix of class "dfmSparse"
##        features
## docs    creatief creatieve creatie
##   text1        1         1       1

这是我为您的示例近似的一个步骤,但是您可以用您自己对特征的字符向量进行的词干提取操作替换下面的右侧字符串子集函数。

# this approximates what you can do with the Python-based stemmer
# note that here you must use colnames<- since there is no function
# featnames<- (for replacement)
colnames(dfm1) <- stringi::stri_sub(featnames(dfm1), 1, 7)
dfm1
## Document-feature matrix of: 1 document, 3 features (0% sparse).
## 1 x 3 sparse Matrix of class "dfmSparse"
##        features
## docs    creatie creatie creatie
##   text1       1       1       1

然后你可以重新编译 dfm 来编译计数。

# this combines counts in featnames that are identical
dfm_compress(dfm1)
## Document-feature matrix of: 1 document, 1 feature (0% sparse).
## 1 x 1 sparse Matrix of class "dfmSparse"
##        features
## docs    creatie
##   text1       3

请注意,如果您使用quanteda的词干分析器,此步骤可能是dfm_wordstem()

dfm_wordstem(dfm1)
## Document-feature matrix of: 1 document, 1 feature (0% sparse).
## 1 x 1 sparse Matrix of class "dfmSparse"
##        features
## docs    creati
##   text1      3
于 2017-03-23T08:22:35.667 回答