0

如何从 ASCII 和 UTF-8 编码的字符串中去除标点符号,而不会弄乱 R 中的 UTF-8 原始字符,特别是中文。

text <- "Longchamp Le Pliage 肩背包 (小)"
stri_replace_all_regex(text, '\\p{P}', '')

结果是:

Longchamp Le Pliage ��背�� 小

但期望的结果应该是:

Longchamp Le Pliage 肩背包 小

我希望删除所有 CJK 符号和标点符号以及询问 ASCII 标点符号。

@akrun, sessionInfo() 如下

locale:
[1] LC_COLLATE=English_Singapore.1252  LC_CTYPE=English_Singapore.1252    LC_MONETARY=English_Singapore.1252
[4] LC_NUMERIC=C                       LC_TIME=English_Singapore.1252    
4

1 回答 1

1

汉字(汉字)的显示因平台和 IDE 而异(有关 R 处理非 ASCII 字符的详细信息,请参阅此答案)。在我看来,它stri_replace_all_regex正在做你想做的事,但是一些汉字显示错误(即使它们的底层代码点是正确的)。尝试这个:

library(stringi)
my_text <- "Longchamp Le Pliage 肩背包 (小)"
plot(0,0)
text(0, 0, my_text, pos=3)

如果您可以让文本显示在绘图上,那么基本上该字符串已正确编码,问题在于它在 R 终端中的显示方式。如果没有,请在进一步文本处理之前检查Encoding(my_text)并考虑使用。enc2utf8如果绘图有效,请尝试:

no_punct <- stri_replace_all_regex(my_text, "\\p{P}", "")
text(0, 0, no_punct, pos=1)

看看结果是否stri_replace_all_regex确实符合您的预期。

于 2015-09-09T19:32:17.313 回答