tm :: removePunctuation不会删除R中的所有标点符号吗?

时间:2019-06-11 14:17:11

标签: r string nlp

我有AppService中的一个strings中有90万个column

我正在尝试清洁它们,而我使用的一种清洁方法是R中dataframe包中的removePunctuation

请指导我为什么不能删除以下标点符号:

tm

2 个答案:

答案 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进行定量文本分析,则根据herequanteda可能具有更多功能。

如果我们检查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”),...)