用于处理替换智能卷曲引号的文本挖掘 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 双弯引号进行全面替换可能不会按预期进行。
使用两个 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"
我有一堆像下面这样的带有不同智能引号的文本 - 用于单引号和双引号。我所知道的所有包最终都可以删除这些字符,但我希望将它们替换为普通引号。
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 双弯引号进行全面替换可能不会按预期进行。
使用两个 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"