用于处理替换智能卷曲引号的文本挖掘 R 包和正则表达式

Text Mining R Package & Regex to handle Replace Smart Curly Quotes

我有一堆像下面这样的带有不同智能引号的文本 - 用于单引号和双引号。我所知道的所有包最终都可以删除这些字符,但我希望将它们替换为普通引号。

textclean::replace_non_ascii("You don‘t get “your” money’s worth")

收到输出:"You dont get your moneys worth"

预期输出:"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"

我在这里假设你的弯引号总是平衡的,即它们总是把一个词换行。如果没有,那么您可能需要做更多的工作。

如果您希望 引用一个词时它们保持原样,则对 opening/closing 双弯引号进行全面替换可能不会按预期进行。

Demo

使用两个 gsub 操作:1) 替换双引号,2) 替换单引号:

> gsub("[“”]", "\"", gsub("[‘’]", "'", text))
[1] "You don't get \"your\" money's worth"

online R demo。在 Linux 和 Windows 中进行了测试,效果相同。

[“”] 构造是正 character class 匹配 class.

中定义的任何单个字符

要标准化所有类似于双引号的字符,您可能需要使用

> 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

这里,[«»““”„‟≪≫《》〝〞〟"″‶]匹配

«   00AB  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
»   00BB  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
“   05F4  HEBREW PUNCTUATION GERSHAYIM
“   201C  LEFT DOUBLE QUOTATION MARK
”   201D  RIGHT DOUBLE QUOTATION MARK
„   201E  DOUBLE LOW-9 QUOTATION MARK
‟   201F  DOUBLE HIGH-REVERSED-9 QUOTATION MARK
≪  226A  MUCH LESS-THAN
≫  226B  MUCH GREATER-THAN
《  300A  LEFT DOUBLE ANGLE BRACKET
》  300B  RIGHT DOUBLE ANGLE BRACKET
〝  301D  REVERSED DOUBLE PRIME QUOTATION MARK
〞  301E  DOUBLE PRIME QUOTATION MARK
〟  301F  LOW DOUBLE PRIME QUOTATION MARK
"  FF02  FULLWIDTH QUOTATION MARK
″   2033  DOUBLE PRIME
‶   2036  REVERSED DOUBLE PRIME

[ʻʼʽ٬‘’‚‛՚︐]用于规范化一些类似于单引号的字符:

ʻ  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_normalize_punc() :

https://github.com/ColinFay/proustr#pr_normalize_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\" !"

您的文字:

pr_normalize_punc(data.frame( text = "You don‘t get “your” money’s worth"), text)
# A tibble: 1 x 1
                                    text
*                                  <chr>
1 "You don‘t get \"your\" money's worth"