从NLTK

时间:2015-06-06 19:22:32

标签: python django python-2.7 twitter nltk

我正在构建一个小趋势'算法。令牌器按原设计工作,在URL周围留下几个小问题,这会导致一些问题。

显然,当我从推特中提取信息时,有很多t.co网址缩短型链接。我想删除这些不是'字,最好是在令牌者阶段,但我目前正在将其过滤掉。我不能(我不认为)对可识别的英语白名单,Twitter,收缩等运行代币。

我的代码包含了在任何给定时期内拉出前10个最常用单词的函数:

tweets = Tweet.objects.filter(lang='en', created_at__gte=start, created_at__lte=end)
number_of_tweets = tweets.count()
most_popular = trending.run_all(start, end, "word").keys()[:10]
print "BEFORE", most_popular
for i, thing in enumerate(most_popular):
    try:
        if "/" in thing:
            most_popular.remove(thing)
            print i, thing, "Removed it."
    except UnicodeEncodeError, e:
        print "Unicode error", e
        most_popular.remove(thing)
print "NOW", most_popular`

理论上,try / except块应该从令牌列表中删除任何URL特色词 - 除了它没有,我总是留下一对。

在一段时间内运行trending.run_all会产生,例如:

[u'//t.co/r6gkL104ai/nKate', u'EXPLAIN', u'\U0001f62b\U0001f62d/nRT', u'woods', u'hanging', u'ndtv/nRT', u'BenDohertyCorro', u'\u0928\u093f\u0930\u094d\u0926\u094b\u0937_\u092c\u093e\u092a\u0942\u2026/nPolice', u'LAST', u'health/nTime']

运行导入python命令行的其余代码给出:

0 //t.co/r6gkL104ai/nKate Removed it
1 /nRT Removed it
2 hanging 
3 ndtv/nRT Removed it
4 निर्दोष_बापू…/nPolice Removed it
5 health/nTime Removed it
6 Western 7 //t.co/4dhGoBpzR0 Removed it
8 //t.co/TkHhI7n…/nRT Removed it
9 //t.co/WmWkcG1dOz/nRT Removed it
10 bringing 
 ...
32 kids

NOW [u'EXPLAIN', u'woods', u'hanging', u'BenDohertyCorro', u'LAST', u'scolo', u'Western', u'//t.co/jB0TWYAJSI/nMe', u'BREAKINGNEWS', u'//t.co/9gYG8y5OKK', u'bringing', u'Valls', u'advices', u'Signatures', u'//t.co/vmQfyenXp4/nJury', u'strengthandcondition\u2026', u'HAPPENED', u'\u2705', u'\U0001f60f', u'//t.co/5JR8RXsJ87/nIs', u'Hamilton', u'Logging', u'Happening', u'Foundation', u'//t.co/gC959Q43QD/nRT', u'ISIS=CIA', u'Footnotes', u'ARYNEWSOFFICIAL', u'LoveMyLife', u'-they', u'B\xf6rse', u'InfoTerrorism', u'kids']

因此,出于某种原因,那个小块头并没有(一直)将它们切掉,或者没有按预期行事。这导致了Django中反向查找的特殊问题,因为我打算在一段时间内使用前X个短语作为可点击链接 - 显然这完全打破了查找,并且(正确地)似乎不是一种方式除了模板中的那个,所以我宁愿在视图中处理这个问题。

1 个答案:

答案 0 :(得分:1)

在我看来,您遇到的问题是您在迭代时删除列表。解决方案很简单: 您应该迭代列表的副本:

for i, thing in enumerate(most_popular[:]):

注意'[:]'将创建列表的副本。

可以在此post中找到此行为的原因。