直到下面提供大量信息,数据,代码等,最终得到解决。所以第一部分只是一个解释。
解释 - 自动从Twitter中提取推文的程序。出于某种原因,我将我关心的某些值(描述,位置,TweetID等)存储到逗号分隔的CSV文件中。我使用HTTR来" GET"推文,HTTR::content
函数来存储它们,然后使用jsonlite::fromJSON(toJSON( ))
将它们转换为更可行的形式。这在90%的情况下有效,但有时推文中嵌入了隐形转义字符。注意事项++中显示的\003
,GS
以及其他此类特殊字符。这些导致jsonlite崩溃。我想删除它们。
所以适用于90%推文的代码如下所示:
mentions = GET(final_url, sig)
json = content(mentions)
json2 = jsonlite::fromJSON(toJSON(json))
allMentions = json2$statuses
colNames = names( unlist(allMentions[1,], use.names=TRUE ) )
然后用更多代码来实际解析推文并提取诸如user_id,text和latitude之类的内容。
在json2 = line崩溃。错误:
Error: lexical error: invalid character inside string.
Foundation and 42nd President of the United States. Follow
(right here) ------^
或者:
Error: lexical error: invalid character inside string.
No Mission Too Difficult, No Sacrifice Too Great, Duty First. DAV, VFW.
(right here) ------^
所以产生第一个错误的第一组推文,在notepad ++中显示了一个转义字符003之后。在第二个,你可以看到一个" GS"伟大的人物。
所以尝试修复是使用Gsub。替换特殊字符。问题是,由于某种原因,我的数据不再是UTF-8格式。所以我转换为UTF-8。
json = content(mentions)
json = gsub("[\001-\026]*", "", json, fixed=TRUE)
json = iconv(json, "UTF-8")
json2 = jsonlite::fromJSON(toJSON(json))
allMentions = json2$statuses
现在jsonlite部分有效!完美,但不是真的。
现在我崩溃了" allMentions = json2 $状态"
$ operator is invalid for atomic vectors
这是有道理的,因为现在json2的输出是....
[1] "NA"
[2] "list(completed_in = 0.131, max_id = 660500744261382144, max_id_str = \"660500744261382146\", next_results = \"? max_id=660499749334859776&q=%40HillaryClinton%20until%3A2015-11- 01&lang=en&count=100&include_entities=1&result_type=recent\", query = \"%40HillaryClinton+until%3A2015-11-01\", refresh_url = \"?since_id=660500744261382146&q=%40HillaryClinton%20until%3A2015-11-01&lang=en&result_type=recent&include_entities=1\", count = 100, since_id = 658634677922738176, since_id_str = \"658634677922738176\")"
这让我感到茫然。我现在是否坚持从这一端解决错误,并追捕这一点,并冒险搞砸了之前对我有用的东西?我是否会回去试图找出如何以其他方式摆脱那些逃脱角色/隐形人物?
对这些错误的任何建议都会得到很多赞赏。
答案 0 :(得分:0)
好的,这可能不是一个完美的答案 - 我没有R经验。
关于@pinoybreed808
的生物:
No Mission Too Difficult, No Sacrifice Too Great, Duty First. DAV, VFW.
在Duty First
之后和.
实际U+001D之前显示不寻常的字符 - 我不知道为什么他们&#39 ;重新使用它,但有一些策略来处理这样的不寻常的字符。
首先,您可以简单gsub
将它们排除在外 - 尽管我不确定R
语法,但它并不像您正确捕捉角色一样。
其次,您可以在存储之前尝试URL编码数据。这会将角色变成%1D
。
第三,我不明白为什么这个角色会导致JSONlite出现问题。可能值得在R或JSONlite中提出一个关于它如何处理奇怪字符的错误。