文本挖掘R包&;正则表达式处理替换智能卷曲引号
我有一堆这样的文本,下面有不同的智能引号-单引号和双引号。我所知道的所有软件包的最终结果都是删除这些字符,但我希望用普通引号替换它们文本挖掘R包&;正则表达式处理替换智能卷曲引号,r,regex,text-mining,R,Regex,Text Mining,我有一堆这样的文本,下面有不同的智能引号-单引号和双引号。我所知道的所有软件包的最终结果都是删除这些字符,但我希望用普通引号替换它们 textclean::replace_non_ascii("You don‘t get “your” money’s worth") 收到的输出:“你的钱没有价值” 预期输出:“你没有得到”你的“钱的价值” 如果有人能用正则表达式一次性替换所有这样的引用,我也会很感激的 谢谢 我们可以在这里使用gsub作为基本R选项。每次替换每个卷曲引用的术语 text <
textclean::replace_non_ascii("You don‘t get “your” money’s worth")
收到的输出:“你的钱没有价值”
预期输出:“你没有得到”你的“钱的价值”
如果有人能用正则表达式一次性替换所有这样的引用,我也会很感激的
谢谢 我们可以在这里使用
gsub
作为基本R选项。每次替换每个卷曲引用的术语
text <- "You don‘t get “your” money’s worth"
new_text <- gsub("“(.*?)”", "\"\\1\"", text)
new_text <- gsub("’", "'", new_text)
new_text
[1] "You don‘t get \"your\" money's worth"
text使用两个gsub
操作:1)替换双引号,2)替换单引号:
> gsub("[“”]", "\"", gsub("[‘’]", "'", text))
[1] "You don't get \"your\" money's worth"
ʻ 02BB MODIFIER LETTER TURNED COMMA
ʼ 02BC MODIFIER LETTER APOSTROPHE
ʽ 02BD MODIFIER LETTER REVERSED COMMA
٬ 066C ARABIC THOUSANDS SEPARATOR
‘ 2018 LEFT SINGLE QUOTATION MARK
’ 2019 RIGHT SINGLE QUOTATION MARK
‚ 201A SINGLE LOW-9 QUOTATION MARK
‛ 201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
՚ 055A ARMENIAN APOSTROPHE
︐ FE10 PRESENTATION FORM FOR VERTICAL COMMA
看。在Linux和Windows中测试,效果相同
[“”]
构造是一个正数,它匹配类中定义的任何单个字符
要规范化所有类似双引号的字符,您可能需要使用
> sngl_quot_rx = "[ʻʼʽ٬‘’‚‛՚︐]"
> dbl_quot_rx = "[«»““”„‟≪≫《》〝〞〟\"″‶]"
> res = gsub(dbl_quot_rx, "\"", gsub(sngl_quot_rx, "'", `Encoding<-`(text, "UTF8")))
> cat(res, sep="\n")
You don't get "your" money's worth
[ʻʽ٬'''.'՚]
用于规范化一些类似于单引号的字符:
> gsub("[“”]", "\"", gsub("[‘’]", "'", text))
[1] "You don't get \"your\" money's worth"
ʻ 02BB MODIFIER LETTER TURNED COMMA
ʼ 02BC MODIFIER LETTER APOSTROPHE
ʽ 02BD MODIFIER LETTER REVERSED COMMA
٬ 066C ARABIC THOUSANDS SEPARATOR
‘ 2018 LEFT SINGLE QUOTATION MARK
’ 2019 RIGHT SINGLE QUOTATION MARK
‚ 201A SINGLE LOW-9 QUOTATION MARK
‛ 201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
՚ 055A ARMENIAN APOSTROPHE
︐ FE10 PRESENTATION FORM FOR VERTICAL COMMA
{proustr}中有一个函数用于规范标点符号,名为pr\u normalize\u punc()
:
结果是:
=> ″‶« »“”`´„“ into "
=> ՚ ’ into '
=> … into ...
例如:
library(proustr)
a <- data.frame(text = "Il l՚a dit : « La ponctuation est chelou » !")
pr_normalize_punc(a, text)
# A tibble: 1 x 1
text
* <chr>
1 "Il l'a dit : \"La ponctuation est chelou\" !"
库(proustr)
a感谢您的回答,它仍然保留了单引号:-/。我在您的问题或样本数据中没有看到任何单引号。我怎么能编码到我看不见的东西?老鼠…我现在看到了…让我更新。我在一部手机上,屏幕很小。这给人留下了深刻的印象——用手机写字@amrrs强迫症更准确。我有一个栈瘾:-如果你只想将引号规范化为“
”,你不需要使用捕获组/反向引用。使用gsub(“[”“]”,“\”,text)
@WiktorStribiżew,但这会假设OP想要替换所有的卷曲引号,即使不围绕单词。@TimBiegeleisen这正是OP在清理文本时所做的。正在规范化所有引号。很抱歉之前没有明确说明@WiktorStribiżew是对的!感谢您的响应,当只传递一个字符串时,它就工作了,但当传递一个字符向量时,它会看到失败,不确定是否与我的R环境有关。用它更新了问题。请检查一下好吗?好的,请稍候,我正在添加更多详细信息。很抱歉,这似乎是我的会话问题。我重新启动了Rstudio,它工作正常。我只是更新你的答案(而不是将其标记为答案),因为我想知道是否有任何文本挖掘包可以在运行中这样做(不需要我们明确定义符号)。谢谢你的帮助@amrrs终于明白了,编码问题才是罪魁祸首。我更新了答案。此外,R似乎将”视为常规ASCII“
,所以我逃过了它。至于任何库,我知道没有一个库规范化引号。好的,今天我了解了,但它不是一个通用的引号规范化库。我认为最好的解决方案是我建议的定制方法。我在我的建议中添加了该软件包中的双引号和单引号。似乎不起作用:`>pr\u normalize\u punc(data.frame(text=new\u text),text)#tible:5 x 1 text*1“你没有得到你的钱\u0092t”2“你没有得到你的钱\u0092t得到你的钱\u0092s的价值”3“你没有得到你的钱\u0092t得到你的钱\u0092s的价值”4“你没有得到你的钱\u0092s的价值”5“你没有得到你的钱\u0092t得到你的钱\u0092s的价值”`奇怪,这是在我的机器上工作(检查我的答案更新)。你的操作系统是什么?我想这与系统语言环境有关,你可能在英语以外的语言环境中,我的语言环境是英语。@amrrs该库仅适用于法语,请参阅pr\u normalize\u punc
函数描述:规范使用常用法语标点符号编写的文本。显示双引号模式是(“|”-8246;«|«|«|“|”«|“|”«»»»»»»»»代码>(请注意V形符号旁边的空格!),单引号模式仅处理3个字符,(՚|»65004;»)
。我还认为`
和'
看起来更像单引号。R在Windows上处理本机文本有缺陷。请参阅,例如,使用text=utf8::as_utf8(“你没有得到“你的”钱的价值”)
来解决该缺陷。