我是,使用TwitteR软件包从twitter下载推文。推文被下载并存储在MySQL数据库中。我想摆脱所有“未知的角色”。问题是gsub()将我的åäö字符转换为aao。这里我提取了一行作为例子:
> testing <- outputdata$text[396]
> stri_enc_mark(testing) # Gets declared encodings for each string
[1] "UTF-8"
> Encoding(testing) # Reads the declared encodings
[1] "UTF-8"
> all(stri_enc_isutf8(testing)) # check if every character is UTF-8
[1] TRUE
> testing <- gsub("[^0-9A-Za-z@#:åäöÅÄÖ///' ]", "", testing,)
> testing
[1] "Mycket bra intervju med Sapo chefen Anders Tjornberg pa TV4 alldeles nyss "
在运行gsub()之前,推文看起来很喜欢这个:
"Mycket bra intervju med Säpo chefen Anders Tjornberg på TV4 alldeles nyss ��"
如果我尝试以下代码,gsub()不会将åäö转换为aao ...问题是,当我复制过去时它工作但不是从数据框加载时。
> testing <- "Mycket bra intervju med Säpo chefen Anders Tjornberg på TV4 alldeles nyss ��"
> stri_enc_mark(testing)
[1] "UTF-8"
> Encoding(testing)
[1] "UTF-8"
> all(stri_enc_isutf8(testing))
[1] TRUE
> testing <- gsub("[^0-9A-Za-z@#:åäöÅÄÖ///' ]", "", testing,)
> testing
[1] "Mycket bra intervju med Säpo chefen Anders Tjornberg på TV4 alldeles nyss "
我尝试过使用:
outputdata$text <- iconv(outputdata$text, to = "UTF-8", sub="")
outputdata$text <- iconv(outputdata$text, "UTF-8", "UTF-8",sub='')
在整个数据框上删除所有非UTF-8字符,但没有运气。我不知道这是否相关:
Encoding(outputdata$text)
[1] "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "unknown" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8"
可能十个观察结果未知。
答案 0 :(得分:0)
也许你的头衔令人困惑?我是否更正你不想用变音标记转换字符?当我使用你的文本时,gsub()
完全像我想的那样工作,似乎并保留了变音符号字符(但删除了,例如,�。
> testing <- "Mycket bra intervju med Säpo chefen Anders Tjornberg på TV4 alldeles nyss ��"
> testing2 <- gsub("[^0-9A-Za-z@#:åäöÅÄÖ///' ]", "", testing)
> testing2
[1] "Mycket bra intervju med Säpo chefen Anders Tjornberg på TV4 alldeles nyss "
> testing3 <- "RT @K_GBergstrom: Arbetsgivaravgifterna för unga sänks 1 maj, föreslår regeringen. Sen väntas de höjas (tredubblas?) kanske 1 juli. Politik…"
> testing3 <- "RT @K_GBergstrom: Arbetsgivaravgifterna för unga sänks 1 maj, föreslår regeringen. Sen väntas de höjas (tredubblas?) kanske 1 juli. Politik…"
> testing4 <- gsub("[^0-9A-Za-z@#:åäöÅÄÖ///' ]", "", test3)
> testing4
[1] "RT @KGBergstrom: Arbetsgivaravgifterna för unga sänks 1 maj föreslår regeringen Sen väntas de höjas tredubblas kanske 1 juli Politik"
作为一个小问题,您的代码可能包含正则表达式;我怀疑mysql是否合适。
答案 1 :(得分:0)
这看起来像Unicode Normalization Forms的问题。有关可能的解释,请参阅this answer。当适应这种情况时,testing
可能包含“ä”作为“a”+“组合上面的分音符”和“å”作为“a”+“上面的组合环”。 gsub()
替换将组合字符剥离,只留下“a”。
作为补救措施,您可以尝试将文本字符串标准化为NFC表单。例如:
library(stringi)
testing <- "Mycket bra intervju med Säpo chefen Anders Tjornberg på TV4 alldeles nyss ��"
## This transformation is probably unnecessary
sub_pat <- stri_trans_nfc("[^0-9A-Za-z@#:åäöÅÄÖ///' ]")
testing_nfc <- stri_trans_nfc(testing)
## This should work
gsub(sub_pat, "", testing_nfc)
testing_nfd <- stri_trans_nfd(testing)
## This should convert ä and å to a
gsub(sub_pat, "", testing_nfd)
另一个问题:重复的斜杠///
没有多大意义。也许意图是保留斜杠和反斜杠,"[^0-9A-Za-z@#:åäöÅÄÖ/\\' ]"
。