【发布时间】:2014-08-02 06:38:27
【问题描述】:
这个问题的扩展:Classify type of tweet (tweet/retweet/mention) based on tweet text in Python
我想将我的数据集中的每条推文分类为以下之一,并将推文类型附加到数据集中的每条记录中。目前,当我运行下面显示的脚本时,我得到了 [None] 返回,所以显然我在这里遗漏了一些东西。
当前格式:
['CREATED_AT']['text']
所需格式:
['CREATED_AT']['text']['tweet_type']
推文分类:
(1) 转推 --> 推文文本列某处有一个“RT @anyusername”
(2) 提及 --> 推文栏有“@anyusername”但没有“RT @anyusername”
(3) Tweet --> tweet 栏中没有“RT @anyusername”,也没有任何“@anyusername”
代码:
import json
import time
import re
# load Twitter Streaming JSON data into a dict
def import_tweets(parameter1):
data = []
for line in open(parameter1):
try:
data.append(json.loads(line))
except:
pass
for i in data:
i['CREATED_AT'] = time.strftime('%Y-%m-%d %H:%M:%S',time.strptime(i['created_at'],'%a %b %d %H:%M:%S +0000 %Y'))
return data
# Extract timestamp and tweet text into a list
def extract_tweets(parameter2):
tweets = []
for i in parameter2:
tweets.append(
[i['CREATED_AT'],
i['text']]
)
return tweets
# Classify each tweet as retweet/mention/tweet
def tweet_type(parameter3):
tweet_type = []
for i in parameter3:
match = re.match(r'RT\s@....+', i[1])
if match:
tweet_type.append([i, 'retweet'])
else:
match = re.match(r'@....+', i[1])
if match:
tweet_type.append([i, 'reply'])
else:
match = re.match(r'....+@', i[1])
if match:
tweet_type.append([i, 'mention'])
else:
tweet_type.append([i, 'tweet'])
return tweet_type
data = import_tweets('tweets.json')
tweets = extract_tweets(data)
tweet_type = tweet_type(tweets)
# Print sample to make sure tweet text was classified properly
print tweet_type[:5]
【问题讨论】: