根据Python中的推文文本对推文类型(推文/转推/提及)进行分类

时间:2014-05-07 19:17:34

标签: python json twitter

从几个不同的例子中,我已经能够创建一个简单的Python脚本来解析来自Twitter Streaming API的JSON输出,并打印出每个screen_nametext鸣叫。我想修改我的代码,以便将每条推文分类为以下之一:

(1)转发 - >在推文文本栏中的某处有一个“RT @anyusername”

(2)提及 - >在推文列中有一个“@anyusername”但没有“RT @anyusername”

(3)推文 - >推文栏中没有“RT @anyusername”或任何“@anyusername”

我可以使用以下公式在Excel中执行此操作,但我可以在Python中找到它。

=IF(IFERROR(FIND("RT @",B2)>0,"False"),"Retweet",IF(IFERROR(FIND("@",B2)>0,"False"),"Mention","Tweet"))

现有代码

import json
import sys
from csv import writer

with open(sys.argv[1]) as in_file, \
    open(sys.argv[2], 'w') as out_file:
    print >> out_file, 'tweet_author, tweet_text, tweet_type'
    csv = writer(out_file)

    for line in in_file:
        try:
            tweet = json.loads(line)
        except:
            pass

        tweet_text = tweet['text']

        row = (
        tweet['user']['screen_name'],
        tweet_text
        )
        values = [(value.encode('utf8') if hasattr(value, 'encode') else value) for value in row]
        csv.writerow(values)

1 个答案:

答案 0 :(得分:2)

我这里没有任何python解释器,但它应该类似于:

import re


def url_match(tweet):
    match = re.match(r'RT\s@....+', tweet)
    if match:
        return "RT"
    else:
        match = re.match(r'@....+', tweet)
        if match:
           return "mention"
        else
           return "tweet"

注意:这适用于此分类,但如果您要检索用户名,即@USERNAME,则必须再调整一次。