2013-03-19 2 views
-1

파이썬으로 json 파일 형식 (retweet 제외)의 트윗에 텍스트를 추출하는 파이썬 프로그램을 작성하려고합니다. 다음은 파이썬에서 snippcode입니다 (파일은 20MB이므로 여기에 포함되지 않습니다).짹짹 구문 분석에서 json 형식의 모든 텍스트를 읽을 수 없습니까?

import sys 
import difflib 
import twitter 
import json 
from pprint import pprint 

# Input argument is the filename of the JSON ascii file from the Twitter API 

filename = sys.argv[1] 
tweets_text = [] # We will store the text of every tweet in this list 
tweets_location = [] # Location of every tweet (free text field - not always `enter code here`accurate or given) 
tweets_timezone = [] # Timezone name of every tweet 

# Loop over all lines 
f = file(filename, "r") 
lines = f.readlines() 
for line in lines: 
    try: 
     tweet = json.loads(line) 

     # Ignore retweets! 
     if (tweet[1].has_key('retweeted_status') or not (tweet[1].has_key('text'))): 
      continue 

      # Fetch text from tweet 
      text = tweet[1]['text'].encode('utf-8','ignore').lower() 

      # Ignore 'manual' retweets, i.e. messages starting with RT  
      if text.find("RT ") > -1: 
       continue 

     tweets_text.append(text) 
     tweets_location.append(tweet[1]['user']['location'].encode('utf-8','ignore')) 
     tweets_timezone.append(tweet[1]['user']['time_zone'].encode('utf-8','ignore')) 

    except ValueError: 
     pass 

# Show result 
print tweets_text 

문제는 단지 하나의 트윗을 얻는 것입니다. 누구든지 오류를 지적 할 수 있습니까?

+1

'ValueError' 예외를 포착하지 않는 것으로 시작하십시오. JSON 데이터는 여러 행의 데이터에 걸쳐있을 수 있습니다. –

+0

질문의 형식은 유감 스럽다. 이 오류를 해결하는 방법을 알려주십시오. 나는 다른 포스트에서 가져온 코드 다음 사용하면 이후 : 수입 JSON pprint 수입 pprint에서 json_data = 개방 ('data.json') 데이터 = json.load (json_data) pprint (데이터) 내가 볼 수 있었다 공헌자, 좌표, ID, .., 텍스트와 같은 많은 내용 ... – user1993617

답변

1

json 파일을 한 줄씩 읽는 중이고 유효하지 않은 JSON 인 것처럼 각 줄을로드하고 있습니다. 같은 것을보십시오 :

lines = f.readlines() 
    tweet = json.loads(lines) 

그리고 거기에서 당신은 트윗을 통해 모든 JSON 요소에 액세스 할 수 있어야합니다

편집 : https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline

당신이 할 수있는 의해 반환로 JSON을 가정하면 동일한 구조를 가지고

f = file(filename,"r") 
    lines = f.readlines() 
    tweets_json = json.loads(lines[0]) 
    for tweet in tweets_json: 
     if tweet['retweeted'] == False: 
      tweets_text.append(tweet['text']) 

    print tweets_text 
+0

안녕 Radi. 나는 내 코드에서 두 명령 줄을 모두 가지고 있기 때문에 조언을 얻을 수 없었다. pls 이러한 정교한 직접 두 명령을 사용하기 때문에 더 정교한, 나는 내용을 얻으려면 모든 트윗 througgth 갈 방법을 모르겠다 – user1993617

+0

당신은 파일의 각 라인을 반복하고 있습니다. 따라서 긴 json이 있으면 줄이 줄 바꿈되고 각 줄을 json.loads()에 전달하면 json이 유효하지 않습니다. 전체 파일을 json.loads()에 전달하고 올바른 구조체가 있는지보십시오. 추신. 전체 20MB 파일이 아닌 파일의 작은 하위 집합으로 테스트하십시오. –

+0

안녕 Radi. 내가 pprint 가져 오기 pprint json_data = 개방 ('json_data') 데이터 = json.load (json_data) pprint (데이터) 에서 수입 JSON 을하려고 할 때 많은 양의 데이터를 볼 수 있었다. 그래서 내 코드에서는 내용을 추출하기 위해 각 짹짹을 한 줄씩 살펴 보았지만 그럴 수는 없습니다. – user1993617

관련 문제