gpt4 book ai didi

r - 带有 Unicode 字符的字符串出现问题

转载 作者:行者123 更新时间:2023-12-02 04:30:23 24 4
gpt4 key购买 nike

我有一个通过网络抓取创建的非常大的数据集(70k 行、2600 列、CSV 格式)。不幸的是,在进行预处理、处理等时,一些有问题的字符已经以一种奇怪的方式编码,我在处理它们时遇到了问题。

我有如下字符串:

x = "but it doesn<U+0092>t matter"

Looking up the code ,我们可以看到它应该是字符 ,实际上应该是 ' (数据是用户生成的,因此可能包含各种奇怪的字符)。虽然从这个角色来看,其他人似乎也有问题( 123 )。它被标记为控制字符,不确定那是什么,但这也许就是它如此难以处理的原因。

有关 R 中 Unicode 的大多数其他问题都涉及格式如下的 Unicode \u0092 .

只需使用 Encoding()

让我们尝试一下:

#> x = "but it doesn<U+0092>t matter"
#> Encoding(x)
#[1] "unknown"
#> Encoding(x) = "UTF-8"
#> Encoding(x)
#[1] "unknown"
#> x
#[1] "but it doesn<U+0092>t matter"

所以这似乎没有做任何事情。

使用之前问题中的 hack 函数

之前有一些问题与此 Unicode 格式有关并尝试转换它们:

奇怪的是,他们提供的示例有效,但我的示例无效。

#> test.string <- "This is a <U+03B1> <U+03B2> <U+03B2> <U+03B3> test <U+03B4> string."
#> Encoding(test.string)
#[1] "unknown"
#> to_true_unicode(test.string)
#[1] "This is a α β β γ test δ string."

但是:

#> x2 = to_true_unicode(x)
#> x2
#[1] "but it doesn\u0092t matter"
#> cat(x2)
#but it doesnt matter
#> Encoding(x2)
#[1] "UTF-8"

因此,它成功地转换为 \u格式来自 < U+....>格式,并使用 cat()打印没有该符号的字符(或 SO 上有错误的符号)。

只需手动搜索并替换它们

我遇到的这些问题数量有限,所以我也许可以使用搜索替换来解决它。但是:

#> #base-r
#> gsub(x = x, pattern = "<U+0092>", replacement = "'")
#[1] "but it doesn<U+0092>t matter"
#> #stringr/stringi
#> library(stringr)
#> str_replace(x, pattern = "<U+0092>", "'")
#[1] "but it doesn<U+0092>t matter"

所以替换似乎不起作用,但它确实在 \u 上起作用。版本:

#> #base-r
#> gsub(x = x2, pattern = "\u0092", replacement = "'")
#[1] "but it doesn't matter"
#> #stringr/stringi
#> library(stringr)
#> str_replace(x2, pattern = "\u0092", "'")
#[1] "but it doesn't matter"

因此,这建议了一种工作方法:1)转换 <U+>格式为\u格式,然后使用搜索替换。

使用 stringi::stri_unescape_unicode() 取消转义

似乎不适用于这两个版本:

#> stringi::stri_unescape_unicode(x)
#[1] "but it doesn<U+0092>t matter"
#> stringi::stri_unescape_unicode(x2)
#[1] "but it doesn\u0092t matter"

是否有一些普遍适用的方法来处理此类问题?

我的设置

我的 session 信息是:

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=Danish_Denmark.1252 LC_CTYPE=Danish_Denmark.1252 LC_MONETARY=Danish_Denmark.1252
[4] LC_NUMERIC=C LC_TIME=Danish_Denmark.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] stringr_1.0.0

loaded via a namespace (and not attached):
[1] magrittr_1.5 tools_3.2.3 stringi_1.0-1

在 Windows 8.1(64 位)上通过 RStudio(0.99.893,预览版)运行 R。键盘和时间单位是丹麦语,但其他一切都是英语。

最佳答案

不确定它是否适合您,但对于相同的症状,我确实将字符串转换为 ascii:

x <- iconv(x, "", "ASCII", "byte")

对于非ascii字符,指示为"<xx>"与字节的十六进制代码。

然后您可以将十六进制代码 gsub 为适合您的值。

关于r - 带有 <U+0092> Unicode 字符的字符串出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com