2017-04-09 33 views
0

我目前使用Tweepy來傳輸推文,並在json文件中輸出每條推文。一旦我完成了收聽和關閉流,我正在分析tweet的情緒。我想知道是否有辦法同時做到這一點。我想開始流,在json文件中輸出tweet,然後對該tweet運行我的情感分析,然後對每個單獨的tweet實時一次又一次地執行。運行StreamListener(Tweepy)並同時分析推文

def on_status(self, status): 
    self.output.write(status + "\n") 

    self.counter += 1 

    if self.counter >= 20000: 

     self.output.close() 
     self.output = open('../streaming_data/' + self.fprefix + '.' + time.strftime('%Y%m%d-%H%M%S') + '.json', 'w') 

以上是我的是我的流監聽器。輸出文件是self.output。

tweets = {} 

with open(output.json, 'r') as file: 
    lines = (line.rstrip() for line in file) 
    lines = (line for line in lines if line) 

    for line in lines: 
     tweet = json.loads(line) 
     tweets[tweet['id']]= tweet 

以上是我如何在推文中存儲每條推文,以便我可以使用函數分析它們。我的函數將tweet作爲參數。

function = myFunction(tweets, pos, neg) 

本質上,StreamListener會收集推文並將它們存儲在json文件中。但我希望收集推文,並在我收到推文後立即對其進行分析。因此,收集一條推文,然後分析它,然後再做一次。

回答

1

是否有任何特定的原因,爲什麼你要將推文存儲爲json文件?爲什麼不簡單地將tweet文本存儲爲文本文件,因爲我假設您只是對推文文本進行預分析。另外,爲什麼不調用一個函數來處理推文,並讓它同時寫入文件?

可能類似於以下內容:

import tweepy 
import secrets 


class MyStreamListener(tweepy.StreamListener): 
    def on_status(self, status): 
     process_tweet(status.text) 


def process_tweet(tweet): 
    with open('tweets.txt', 'w') as tweet_file: 
     tweet_file.write(tweet) 
     sentiment_analysis(tweet) 


def sentiment_analysis(tweet): 
    #code to determine the sentiment of a tweet 

您應該使用async參數在另一個線程來執行流:

aStream.filter(track=[aFilter], async=True) 

aStream.userstream(async=True)