我有AppService
中的一个strings
中有90万个column
。
我正在尝试清洁它们,而我使用的一种清洁方法是R中dataframe
包中的removePunctuation
。
请指导我为什么不能删除以下标点符号:
tm
答案 0 :(得分:3)
它与ucp = TRUE
tm::removePunctuation("grillin’", ucp = TRUE)
来自?removePunctuation
ucp
指定是否使用Unicode字符属性确定标点字符的逻辑。如果为FALSE(默认),则采用ASCII [:punct:]类中的字符;否则为0。如果为TRUE,则表示Unicode通用类别为P(标点符号)的字符。
所以我假设’
属于Unicode通用类别P。
答案 1 :(得分:0)
我们可以使用sub
中的base R
sub("’", "", "grillin’")
#[1] "grillin"
如果我们查看?removePunctuation
,默认情况下,某些类别为FALSE
,即ucp
removePunctuation(x, reserve_intra_word_contractions =否, reserve_intra_word_dashes =否, ucp = FALSE,...)
在ucp
的文档中,
ucp-如果为FALSE(默认),则采用ASCII [:punct:]类中的字符;否则为。如果为TRUE,则表示Unicode通用类别为P(标点符号)的字符。
因此,如果ucp = FALSE
的默认选项更改为TRUE
,则它应该可以工作。关于字符是否为ASCII,我们可以使用grep
显示的字符不是ASCII
grep("[[:ascii:]]", "’", perl = TRUE )
#integer(0)
grep("[[:ascii:]]", "'", perl = TRUE)
#[1] 1
如果OP使用tm
进行定量文本分析,则根据here,quanteda
可能具有更多功能。
如果我们检查Usage
中的?dfm
(来自quanteda
),则大多数清理操作会自动进行,因为默认情况下它们都是TRUE
dfm(x,详细= TRUE,toLower = TRUE, removeNumbers = TRUE,removePunct = TRUE,removeSeparators = TRUE, removeTwitter = FALSE,词干= FALSE,被忽略功能= NULL, keepFeatures = NULL,语言=“英语”,词库= NULL, 字典= NULL,值类型= c(“ glob”,“ regex”,“ fixed”),...)