从 NLTK 中的标记中删除 URL 特征
Removing URL features from tokens in NLTK
我正在构建一个 'trending' 算法。 tokeniser 按最初的预期工作,除了 URLs 周围的几个小问题,这会导致一些问题。
显然,当我从 Twitter 中提取信息时,有很多 t.co URL 更短类型的链接。我想删除这些不是 'words',最好是在 tokeniser 阶段,但目前正在将它们过滤掉 post-fact。我不能(我不认为)运行 针对可识别的英语白名单的令牌,同样,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 短语用作可点击链接 - 显然这会完全破坏查找,并且(正确地)似乎没有办法 Except out在模板中,所以我宁愿在视图中处理它。
在我看来,您遇到的问题是您在迭代列表时正在删除它。解决方法很简单:
您应该迭代列表的副本:
for i, thing in enumerate(most_popular[:]):
注意“[:]”,它将创建您列表的副本。
可以在 post.
中找到此行为的原因
我正在构建一个 'trending' 算法。 tokeniser 按最初的预期工作,除了 URLs 周围的几个小问题,这会导致一些问题。
显然,当我从 Twitter 中提取信息时,有很多 t.co URL 更短类型的链接。我想删除这些不是 'words',最好是在 tokeniser 阶段,但目前正在将它们过滤掉 post-fact。我不能(我不认为)运行 针对可识别的英语白名单的令牌,同样,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 短语用作可点击链接 - 显然这会完全破坏查找,并且(正确地)似乎没有办法 Except out在模板中,所以我宁愿在视图中处理它。
在我看来,您遇到的问题是您在迭代列表时正在删除它。解决方法很简单: 您应该迭代列表的副本:
for i, thing in enumerate(most_popular[:]):
注意“[:]”,它将创建您列表的副本。
可以在 post.
中找到此行为的原因