繁体   English   中英

使用 gsub 在 R 字符向量列表中用直撇号替换卷曲撇号

[英]Use gsub to replace curly apostrophe with straight apostrophe in R list of character vectors

寻找有关如何在 R 字符向量列表中用直撇号替换卷曲撇号的一些指导。

我替换卷曲撇号的原因 - 在脚本的后面,我检查每个列表项,看看它是否在字典中找到(使用 qdapDictionary)以确保它是一个真实的单词而不是垃圾。 字典使用直撇号,因此带有卷撇号的词会被“拒绝”。

我目前遵循的代码示例。 在我的测试列表中,第 6 项包含一个卷曲撇号,而第 2 项包含一个直撇号。

例子:

list_TestWords <- as.list(c("this", "isn't", "ideal", "but", "we", "can’t", "fix", "it"))

func_ReplaceTypographicApostrophes <- function(x) {
   gsub("’", "'", x, ignore.case = TRUE)
 }

list_TestWords_Fixed <- lapply(list_TestWords, func_ReplaceTypographicApostrophes)

结果:没有变化。 第 6 项仍然使用卷曲撇号。 请参阅下面的输出。

list_TestWords_Fixed
[[1]]
[1] "this"

[[2]]
[1] "isn't"

[[3]]
[1] "ideal"

[[4]]
[1] "but"

[[5]]
[1] "we"

[[6]]
[1] "can’t"

[[7]]
[1] "fix"

[[8]]
[1] "it"

您可以提供的任何帮助将不胜感激!

这可能有效: gsub("[\‘\’\‚\‛\′\‵]", "'", x)

我在这里找到它: http : //axonflux.com/handy-regexes-for-smart-quotes

我发现您对gsub的调用存在问题:

gsub("/’", "/'", x, ignore.case = TRUE)

您在卷曲单引号前面加上正斜杠。 我不知道你为什么要这样做。 我可以推测您正在尝试对引号字符进行转义,但这会产生副作用,即您的模式现在试图匹配正斜杠后跟引号。 由于这从未出现在您的文本中,因此不会进行替换。 你应该这样做:

gsub("’", "'", x, ignore.case = TRUE)

按照下面的链接查看演示,该演示显示使用上述gsub调用按您的预期工作。

演示

您可能会在 Windows 上遇到R 中的错误 尝试在您的输入中使用utf8::as_utf8 或者,这也有效:

library(utf8)
list_TestWords <- as.list(c("this", "isn't", "ideal", "but", "we", "can’t", "fix", "it"))
lapply(list_TestWords, utf8_normalize, map_quote = TRUE)

这将用 ASCII 撇号替换以下字符:

U+055A ARMENIAN APOSTROPHE
U+2018 LEFT SINGLE QUOTATION MARK
U+2019 RIGHT SINGLE QUOTATION MARK
U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
U+FF07 FULLWIDTH APOSTROPHE

它还会将您的文本转换为复合标准格式 (NFC)。

正要说同样的话。

尝试使用stringr包中的str_replace ,不需要使用斜杠

我面临着类似的问题。 不知何故,没有一个解决方案对我有用。 所以我设计了一种间接的方法,通过识别撇号并将其​​替换为所需的格式。

gsub("(\\w)(\\W)(\\w\\s)", "\\1'\\3","sid’s bicycle")
[1] "sid's bicycle"

希望它可以帮助某人。

暂无
暂无

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

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