从解析的西班牙语推文中替换子串的问题 - R 2.15.3

时间:2013-04-14 03:07:35

标签: r twitter xml-parsing substring gsub

以下是提取推文的完整代码:加载必需的包

require(XML)

让我们得到一些关于#18A哈希标签定义twitter搜索网址的推文(遵循原子标准)

twitter_url = "http://search.twitter.com/search.atom?"

编码查询

query = URLencode("#18A")

用于存储结果的向量

tweets = character(0)

分页17次收获推文

for (page in 1:17)
{
twitter_search = paste(twitter_url, "q=", query,
"&rpp=100&lang=es&pagegeocode=-34.686173,-58.648529,15mi", page, sep="")
tmp = xmlParseDoc(twitter_search, asText=F)
tweets = c(tweets, xpathSApply(tmp, "//s:entry/s:title",
                         xmlValue, namespaces=c('s'='http://www.w3.org/2005/Atom')))
}

print(tweets)
class(tweets)

Then, replacing the spanish characters (á, é, í,..) isn't working.

tweets = gsub("<U\\+00E1>", "a", tweets)
tweets = gsub("<U\\+00E9>", "e", tweets)

我们可以在1699推文中看到结果不正确

print(results[1699])

我设法通过将推文的编码更改为“解决”问题:

Encoding(tweets) <- "ISO-8859"

# Replace spanish character with accent for "normal" character

tweets = gsub("\303\272", "u", tweets)
tweets = gsub("\303\241", "a", tweets)
tweets = gsub("\303\255", "i", tweets)
tweets = gsub("\303\263", "o", tweets)
tweets = gsub("\303\251", "e", tweets)
tweets = gsub("\303\271", "u", tweets)
tweets = gsub("\303\201", "O", tweets)
tweets = gsub("\303\211", "E", tweets)
tweets = gsub("\342\234\224", "", tweets)
tweets = gsub("\302\241", "", tweets)
tweets = gsub("\302\277", "", tweets)

我想必须有更好的解决方案。我想知道为什么改变编码会使gsub() 功能工作,以及为什么它在以前的推文中不起作用。

R版本2.15.3(2013-03-01) 平台:x86_64-apple-darwin9.8.0 / x86_64(64位)

3 个答案:

答案 0 :(得分:3)

在正则表达式中+符号具有特殊含义。您可以使用fixed = TRUE参数gsub或转义特殊字符:

tweet = gsub("<U\\+00E9>", "e", tweet)
tweet = gsub("<U\\+00E1>", "a", tweet)
tweet = gsub("<U\\+00BF>", "" , tweet)


## [1] "RT @LuchoBugallo: Quieren una primicia? @CFKArgentina el #18A se va a      #Venezuela. Cual sera el motivo que la moviliza hacer un viaje d ..."
## [2] "RT @LuchoBugallo: #18A - Ya estan apareciendo las cuentas truchas de militontos, que usan s<U+00F3>lo en epoca de cacerolazos!"                 

答案 1 :(得分:0)

使用选项fixed = TRUE,因为+可能正在使用正则表达式:

tweet = gsub("<U+00E9>", "e", tweet, fixed = T)
tweet = gsub("<U+00E1>", "a", tweet, fixed = T)
tweet = gsub("<U+00BF>", "" , tweet, fixed = T)

答案 2 :(得分:-1)

我正在寻找解决问题的答案如下:只是改变了R的语言。我用西班牙语进行了解决,这是推文编码问题的根源

解决方案是在Mac OSX终端中运行此代码。

默认写入org.R-project.R force.LANG en_US.UTF-8