我正在尝试从推文的json文件中计算主题标签。我的程序的目标是首先提取hasthags并创建一个列表,然后创建这些主题标签的字典(我为其编写了“hashtags_dic”函数)来计算每个标签存在的次数。我的问题是,现在程序返回主题标签值,但不总结每个特定主题标签的出现次数。 我创建了一个名为“hashtags_dic”的函数来创建一个字典,但它不起作用。 这是代码:
from twitter_DB import load_from_DB
def get_entities(tweet):
if 'entities' in tweet.keys():
hashtag_list = [hashtag['text'] for hashtag in tweet['entities']['hashtags']]
return hashtag_list
else:
return []
def hashtags_dic(hashtag_list):
hashtag_count = {}
for text in hashtag_list:
if text != None:
if text in hashtag_count.keys():
hashtag_count[text] = hashtag_count[text] + 1
else:
hashtag_count[text] = 1
return hashtag_count
if __name__ == '__main__':
DBname = 'search-results'
tweet_results = load_from_DB(DBname)
print 'number loaded', len(tweet_results)
for tweet in tweet_results[:100]:
labels = get_entities(tweet)
dic=hashtags_dic(labels)
print ' Hashtags:', labels[:20]
print ' Hastags count: ', dic
我很欣赏有关我的代码有什么问题的任何提示或想法。在此先感谢... Norpa
答案 0 :(得分:3)
有几种使用dicts或dict子类进行计数的技术(包括dict.setdefault,collections.defaultdict和collections.Counter)。
正如您可能从其名称中猜到的那样, collections.Counter()非常适合计算任务: - )
import collections
import pprint
hash_counts = collections.Counter(hashtags)
print("Fifty most popular hashtags")
pprint.pprint(hash_counts.most_common(50))
FWIW,你是原创 hashtags_dict()函数似乎工作正常:
>>> hashtags_dic(['obama', 'putin', 'cameron', 'putin', 'obama'])
{'cameron': 1, 'putin': 2, 'obama': 2}
如果您将text in hashtag_count
替换为text in hashtag_count.keys()
, hashtags_dict()函数可以多减少工作量。前者执行高速哈希字典查找,后者构建键列表使用慢速线性搜索。
答案 1 :(得分:0)
您可以使用defaultdict
轻松计算唯一标签标记的出现次数。例如:
from collections import defaultdict
hashtags = ['nice', 'cool', 'great', 'fun', 'nice', 'cool']
hashtag_dict = defaultdict(int)
for k in hashtags:
hashtag_dict[k] += 1
defaultdict(<type 'int'>, {'fun': 1, 'great': 1, 'cool': 2, 'nice': 2})