【问题标题】:Convert special letters to english letters in R在R中将特殊字母转换为英文字母
【发布时间】:2015-11-25 07:48:44
【问题描述】:

有没有办法将文本中的特殊字母转换为 R 中的英文字母?例如:

Æ -> AE
Ø -> O
Å -> A

编辑:我需要这个转换的原因是 R 看不到这两个词是一样的:

stringdist('oversættelse','oversaettelse')
[1] 2
grepl('oversættelse','oversaettelse')
FALSE

有些人倾向于只使用英文字符,而有些人则不使用。为了比较一些文本,我需要将它们设为“相同格式”。

【问题讨论】:

  • 这些不是特殊字母,它们是可用的正确拉丁字符。您甚至不需要 Unicode 来处理它们,它们是拉丁代码页的一部分(例如 Windows 1252)。为什么要将它们映射到不同的字符?
  • 这听起来像是the XY Problem 的情况 - 对 X 有问题但询问假设的解决方案 Y。为什么您想用其他字符替换这些字符?您遇到的实际问题是什么?您是否使用过破坏文本的 R 函数?源数据是 Unicode 还是使用特定的代码页?
  • 将Å转换为经典约定的AA,甚至是字母Å最初替换的字符组合不是更合适吗?
  • @AnandaMahto 为什么 R 支持 Unicode 时使用 ASCII?通过切换代码页来解决编码问题几乎是不可能的,总是还有一个错过的转换
  • @TommyA 没有经典的约定。 any 这些字符没有任何问题。事实上,当 Unicode 可用时,没有理由使用特定的代码页。

标签: r


【解决方案1】:

我最近遇到了一个很相似的问题,被指到问题Unicode normalization (form C) in R : convert all characters with accents into their one-unicode-character form?

基本上,对于许多这种特殊字符,存在不止一种 unicode 表示形式——这会混淆文本比较。建议的解决方案是使用stringi 包函数stri_trans_nfc - 它还有一个支持音译的函数stri_trans_general,这可能正是您所需要的。

【讨论】:

  • 具体来说,类似于stri_trans_general("ØxxÅxxÆabc", "latin-ascii")。 +1
  • 我想知道icuSetCollate 是否允许grepl 匹配字符串而不转换它们?帮助页面甚至包含一个丹麦语示例
  • @PanagiotisKanavos 不错的发现!这甚至可以帮助我解决我原来的问题。
【解决方案2】:

你可以使用chartr

x <- "ØxxÅxx"
chartr("ØÅ", "OA", x)
[1] "OxxAxx"

和/或 gsub

y <- "Æabc"
gsub("Æ", "AE", y)
[1] "AEabc"

【讨论】:

  • 一个简单的字符串替换不会涵盖 所有 需要将非 ASCII 字符转换为其他字符的情况 - if 有一个实际的完全需要转换
  • @PanagiotisKanavos 你说得对,我编辑了我的答案。
  • 我使用了charter。它似乎使我想要的方式正常化。
猜你喜欢
  • 2013-05-31
  • 2018-05-24
  • 2018-08-26
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多