gpt4 book ai didi

string - 读外国文字

转载 作者:行者123 更新时间:2023-12-04 15:34:11 26 4
gpt4 key购买 nike

我有一个包含英超足球运动员姓名的数据库,我正在将其读入 R (3.02),但是当涉及到姓名中带有外国字符(变音、重音等)的球员时,我遇到了困难。下面的代码说明了这一点:

PlayerData<-read.table("C:\\Users\\Documents\\Players.csv",quote=NULL, dec = ".",,sep=",", stringsAsFactors=F,header=T,fill=T,blank.lines.skip = TRUE)
Test<-PlayerData[c(33655:33656),] #names of the players here are "Cazorla" "Özil"

Test[Test$Player=="Cazorla",] #Outputs correct details
Test[Test$Player=="Ozil",] # Can not find data '0 rows> (or 0-length row.names)'
<

#Example of how the foreign character is treated:
substr("Özil",1,1)
[1] "Ã"
substr("Özil",1,2)
[1] "Ö"
substr("Özil",2,2)
[1] "
substr("Özil",2,3)
[1] "z

我尝试替换字符,如下所述: R: Replacing foreign characters in a string ,但由于我的示例中的重音字符似乎被视为两个单独的字符,因此我认为它不起作用。

我将不胜感激任何建议或解决方法。

文件可供下载 here .

最佳答案

编辑 :您提供的文件使用的编码似乎与您系统的 native 编码不同。

stri_enc_detect 完成的(实验性)编码检测来自 stringi 的函数包给出:

library('stringi')
PlayerDataRaw <- stri_read_raw('~/Desktop/PLAYERS.csv')
stri_enc_detect(PlayerDataRaw)
## [[1]]
## [[1]]$Encoding
## [1] "ISO-8859-1" "ISO-8859-2" "ISO-8859-9" "IBM424_rtl"
##
## [[1]]$Language
## [1] "en" "ro" "tr" "he"
##
## [[1]]$Confidence
## [1] 0.25 0.14 0.09 0.02

所以很可能文件在 ISO-8859-1又名 latin1 .幸运的是,R 在读取此文件时不必重新编码输入——它可能只是设置了与默认(== native )不同的编码标记。您可以使用以下命令加载文件:
PlayerData<-read.table('~/Desktop/PLAYERS.csv',
quote=NULL, dec = ".", sep=",",
stringsAsFactors=FALSE, header=TRUE, fill=TRUE,
blank.lines.skip=TRUE, encoding='latin1')

现在您可以正确访问单个字符,例如与 stri_sub功能:
Test<-PlayerData[c(33655:33656),]
Test
## T Away H.A Home Player Year
## 33655 33654 CrystalPalace 1 Arsenal Cazorla 2013
## 33656 33655 CrystalPalace 1 Arsenal Özil 2013

stri_sub(Test$Player, 1, length=1)
## [1] "C" "Ö"
stri_sub(Test$Player, 2, length=1)
## [1] "a" "z"

根据比较字符串,以下是字符串相等性测试的结果,重音字符“变平”:
stri_cmp_eq("Özil", "Ozil", stri_opts_collator(strength=1))
## [1] TRUE

您也可以使用 iconv 去除重音字符。的音译器(不过我不确定它是否在 Windows 上可用)。
iconv(Test$Player, 'latin1', 'ASCII//TRANSLIT')
## [1] "Cazorla" "Ozil"

或者使用来自 stringi 的非常强大的音译器包(字符串版本> = 0.2-2):
stri_trans_general(Test$Player, 'Latin-ASCII')
## [1] "Cazorla" "Ozil"

关于string - 读外国文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23152861/

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