几乎就是这个!
获取用户输入并删除任何尾随标点符号和非散列字词以发现推文中的趋势。别问!
tweet = input('Tweet: ')
tweets = ''
while tweet != '':
tweets += tweet
tweet = input('Tweet: ')
print (tweets) # only using this to spot where things are going wrong!
listed_tweets = tweets.lower().rstrip('\'\"-,.:;!?').split(' ')
hashed = []
for entry in listed_tweets:
if entry[0] == '#':
hashed.append(entry)
from collections import Counter
trend = Counter(hashed)
for item in trend:
print (item, trend[item])
除了我得到的这个事实之外还有效:
Tweet: #Python is #AWESOME!
Tweet: This is #So_much_fun #awesome
Tweet:
#Python is #AWESOME!This is #So_much_fun #awesome
#awesome!this 1
#python 1
#so_much_fun 1
#awesome 1
而不是:
#so_much_fun 1
#awesome 2
#python 1
所以我没有在每行输入的末尾获得一个空格,而是它正在抛出我的列表!
这可能很简单,但经过10个小时的自我教学后,我的思绪一直在上升!
答案 0 :(得分:0)
问题在于这一行:
tweets += tweet
您正在接收每条推文并将其附加到上一条推文。因此,上一条推文的最后一个单词与当前推文的第一个单词联系在一起。
有多种方法可以解决这个问题。一种方法是一次处理一个推文。从您的主题标签的空数组开始,然后在循环中执行以下操作:
以下代码包含了这个想法并进行了其他一些改进。注意如何编写交互式循环,以便代码中只有一个位置提示用户输入。
hashtags = []
while True: # Read and clean each line of input.
tweet = input('Tweet: ').lower().rstrip('\'\"-,.:;!?')
if tweet == '': # Check for empty input.
break
print('cleaned tweet: '+tweet) # Review the cleaned tweet.
for word in tweet.split(): # Extract hashtags.
if word[0] == '#':
hashtags.append(word)
from collections import Counter
trend = Counter(hashtags)
for item in trend:
print (item, trend[item])
如果您继续处理推文处理,我怀疑您会发现您的推文清理过程不充分。例如,如果在推文中间有标点符号怎么办?您可能希望迟早开始研究正则表达式。