繁体   English   中英

Text Mining R Package&Regex处理替换智能卷曲引号

[英]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操作:1)替换双重引号,2)替换单引号:

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

查看在线R演示 在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

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

«   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"

在此输入图像描述

我们可以在这里使用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"

我假设你的卷曲引号总是平衡的,即它们总是包装一个单词。 如果没有,那么你可能需要做更多的工作。

如果您希望它们在引用单词时保持原样,则可以无法按预期方式替换打开/关闭双重引号。

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM