【问题标题】:R: Transform Cyrillic Unicode to Latin TextR:将西里尔 Unicode 转换为拉丁文本
【发布时间】:2021-03-13 12:22:52
【问题描述】:

我从一个使用 R selenium 的西里尔文网站收集了一些 unicode 文本,语言是塞尔维亚语。

unicode 文本的示例采用以下形式:

<U+041A><U+0440><U+0430><U+0433><U+0443><U+0458><U+0435><U+0432><U+0430><U+0446> <U+0410><U+0421>

此外,我将文本收集为表格。上面的 unicode 文本是单行,而其他列/行可能已经是拉丁字母。

我已经在这几个小时了,并且正在尝试:

  1. 要么将 unicode 转换为 Cyrillic,要么
  2. 将 unicode 直接转换为拉丁字母

我最近的尝试是使用 stringi 包,但没有奏效: stringi::stri_trans_general(Table_save,"latin-ascii")

任何建议将不胜感激!谢谢

【问题讨论】:

  • 接下来,同样的问题!

标签: r unicode cyrillic stringi


【解决方案1】:

我希望我的解决方案有所帮助。首先,您可能知道,文本 U+041A 是一个十六进制代码。我想强调这一点,因为我认为将这些代码转换为西里尔语是一个坏主意。我认为最好的方法是通过十六进制 Unicode 处理您的文本。换句话说,在处理文本时,请记住字母的 unicode,而不是字母本身。

这样,在您的文本中进行正则表达式和其他转换会更容易。当您想将文本读取为西里尔文时,您只需要通过 intToUtf8() 之类的函数让 R 将您的 Unicode 向量解释为 UTF-8 文本。

您需要做的第一件事是将每个西里尔字母分开。因此,您想检测文本中的每个空格,然后用他各自的 unicode 替换该空格(是的,即使空格也有 unicode)。之后,您需要分隔每个字母(在我分隔每个单词之前,现在我想分隔每个字母或构成您的短语的字符)。

接下来,我需要在向量a 的每个元素中删除其他元字符(> 和+),只保留十六进制代码。之后,我只需将每个字母 U 替换为 0x,以隔离 Unicode 的十六进制部分。这种方式更容易,因为要将代码 U041A 作为 Unicode 读取,我需要在 U 之前插入一个反斜杠(导致 \U041A),而我正在努力做到这一点。在这些步骤之后,向量a 的每个元素都是构成您的短语的字符(或字母)。

library(tibble)
library(stringr)
text <- "<U+041A><U+0440><U+0430><U+0433><U+0443><U+0458><U+0435><U+0432><U+0430><U+0446> <U+0410><U+0421>" 

a <- str_replace_all(text, " ", replacement = "<U+0020>") # replace white spaces

a <- unlist(str_split(a, "[<]"))

a <- a[-1]

  
a <- str_replace_all(a, ">", "")
  
a <- str_replace_all(a, "\\+", "")
  
a <- str_replace_all(a, "U", "0x")


intToUtf8(a)

[1] "Крагујевац АС"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多