使用 gsub 将 R 字符向量列表中的弯撇号替换为直撇号
Use gsub to replace curly apostrophe with straight apostrophe in R list of character vectors
正在寻找有关如何在字符向量 R 列表中用直撇号替换弯撇号的指导。
我要替换花撇号的原因 - 在脚本的后面,我检查每个列表项,看看它是否在字典中找到(使用 qdapDictionary)以确保它是一个真实的词而不是垃圾。字典使用直撇号,所以带有弯撇号的词是 "rejected."
我目前使用的代码示例如下。在我的测试列表中,第 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
的调用有问题:
gsub("/’", "/'", x, ignore.case = TRUE)
您在单引号前面加了正斜杠。我不知道你为什么要这样做。我可以推测您正在尝试转义引号字符,但这会产生副作用,即您的模式现在正在尝试匹配正斜杠后跟引号。由于这在您的文本中从未发生过,因此不会进行任何替换。你应该这样做:
gsub("’", "'", x, ignore.case = TRUE)
按照下面的 link 进行演示,该演示显示使用上面的 gsub
调用如您所愿。
正要说同样的话。
尝试使用 stringr
包中的 str_replace
,不需要使用斜线
您可能 运行 与 Windows 上的 bug in 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)。
这可能有效:gsub("[\u2018\u2019\u201A\u201B\u2032\u2035]", "'", x)
我遇到了类似的问题。不知何故,没有一种解决方案对我有用。所以我设计了一种间接的方法来识别撇号并将其替换为所需的格式。
gsub("(\w)(\W)(\w\s)", "\1'\3","sid’s bicycle")
[1] "sid's bicycle"
希望对大家有所帮助。
正在寻找有关如何在字符向量 R 列表中用直撇号替换弯撇号的指导。
我要替换花撇号的原因 - 在脚本的后面,我检查每个列表项,看看它是否在字典中找到(使用 qdapDictionary)以确保它是一个真实的词而不是垃圾。字典使用直撇号,所以带有弯撇号的词是 "rejected."
我目前使用的代码示例如下。在我的测试列表中,第 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
的调用有问题:
gsub("/’", "/'", x, ignore.case = TRUE)
您在单引号前面加了正斜杠。我不知道你为什么要这样做。我可以推测您正在尝试转义引号字符,但这会产生副作用,即您的模式现在正在尝试匹配正斜杠后跟引号。由于这在您的文本中从未发生过,因此不会进行任何替换。你应该这样做:
gsub("’", "'", x, ignore.case = TRUE)
按照下面的 link 进行演示,该演示显示使用上面的 gsub
调用如您所愿。
正要说同样的话。
尝试使用 stringr
包中的 str_replace
,不需要使用斜线
您可能 运行 与 Windows 上的 bug in 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)。
这可能有效:gsub("[\u2018\u2019\u201A\u201B\u2032\u2035]", "'", x)
我遇到了类似的问题。不知何故,没有一种解决方案对我有用。所以我设计了一种间接的方法来识别撇号并将其替换为所需的格式。
gsub("(\w)(\W)(\w\s)", "\1'\3","sid’s bicycle")
[1] "sid's bicycle"
希望对大家有所帮助。