【问题标题】:Unidentified Whitespace不明空白
【发布时间】:2017-11-08 01:18:22
【问题描述】:

我正在使用七本哈利波特书籍进行文本挖掘项目。有一个包含书籍文本的 R 包。在这个包中,每本书都是一个向量,每一章都是一个包含在向量中的字符串。

在为我的分析准备字符串时,我不断遇到某种我无法识别的空白,也无法弄清楚如何删除。以下代码说明了这一点:

require(devtools)
devtools::install_github("bradleyboehmke/harrypotter")
require(harrypotter)

temp <- substr(philosophers_stone[1], 0, 31)
temp

temp <- gsub(" ", "", temp)
temp

temp <- gsub("[\t\n\r\v\f]", "", temp)
temp

代码输出如下:

temp <- substr(philosophers_stone[1], 0, 31)
temp
# [1] "THE BOY WHO LIVED  Mr. and Mrs."
temp <- gsub(" ", "", temp)
temp
# [1] "THEBOYWHOLIVED  Mr.andMrs."
temp <- gsub("[\t\n\r\v\f]", "", temp)
temp
# [1] "THEBOYWHOLIVED  Mr.andMrs."
temp <- gsub("&nbsp;", "", temp)
temp
# [1] "THEBOYWHOLIVED  Mr.andMrs."

谁能帮我弄清楚这是什么东西,以及如何摆脱它?

【问题讨论】:

  • 您可以添加您的sessionInfo() 吗?您的错误似乎也存在一些平台依赖性问题。

标签: r string text


【解决方案1】:

使用charToRaw:

charToRaw(温度)

#  [1] 54 48 45 20 42 4f 59 20 57 48 4f 20 4c 49 56 45 44 e3 80 80 e3 80 80 4d 72 2e 20 61 6e 64 20 4d
# [33] 72 73 2e

这里的每个元素都对应一个字符(基本上)。我们可以推断出麻烦的空格是e3 80 80(重复两次)。根据here,对应"ideographic space",一个宽度一致的空间(通常用于固定宽度的脚本,例如中文或日文)。

无论如何,现在我们可以用rawToChargsub 将其转换回来:

gsub(rawToChar(as.raw(c('0xe3', '0x80', '0x80'))), '', temp)
# [1] "THE BOY WHO LIVEDMr. and Mrs."

(可以添加fixed = TRUE 以提高速度,但这并不重要,因为您还要取消所有其他空格)

仅使用 \s 的 FWIW 也适用于我(Richard Scriven 的其他建议相同,[[:space:]]):

gsub('\\s', '', temp)
# [1] "THEBOYWHOLIVEDMr.andMrs."

我猜\s 不适合你,因为语言环境或平台问题;来自?regex

[:space:]空格字符:制表符、换行符、垂直制表符、换页符、回车符、空格和可能还有其他与语言环境相关的字符。 [强调我的]

【讨论】:

  • 谢谢!这很有帮助。
【解决方案2】:

奇怪——不确定空格是如何定义的。但是,您可以尝试将那个奇怪的空格(您提供的示例中的字符 18 和 19)存储为变量,然后在您的文本中替换它,如下所示:

require(devtools)
devtools::install_github("bradleyboehmke/harrypotter")
require(harrypotter)

temp <- substr(philosophers_stone[1], 0, 31)
x <- substr(temp, 18, 19)
temp <- gsub(x, "", temp)
temp <- gsub(" ", "", temp)

【讨论】:

  • 没问题-希望对您有所帮助!
猜你喜欢
  • 1970-01-01
  • 2013-10-30
  • 2021-04-10
  • 2015-04-21
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
相关资源
最近更新 更多