使用字典计算文件中的单词不起作用

时间:2014-07-19 18:21:12

标签: python twitter dictionary

我正在尝试从推文的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

2 个答案:

答案 0 :(得分:3)

有几种使用dicts或dict子类进行计数的技术(包括dict.setdefaultcollections.defaultdictcollections.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})