新浪微博热门话题(Python)

新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。

 

本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。

 

输入格式:

输入说明:输入首先给出一个正整数N(≤10​5​​),随后N行,每行给出一条英文微博,其长度不超过140个字符。任何包含在一对最近的#中的内容均被认为是一个话题,输入保证#成对出现。

输出格式:

第一行输出被最多条微博提到的话题,第二行输出其被提到的微博条数。如果这样的话题不唯一,则输出按字母序最小的话题,并在第三行输出And k more ...,其中k是另外几条热门话题的条数。输入保证至少存在一条话题。

注意:两条话题被认为是相同的,如果在去掉所有非英文字母和数字的符号、并忽略大小写区别后,它们是相同的字符串;同时它们有完全相同的分词。输出时除首字母大写外,只保留小写英文字母和数字,并用一个空格分隔原文中的单词。

输入样例:

4

This is a #test of topic#.

Another #Test of topic.#

This is a #Hot# #Hot# topic

Another #hot!# #Hot# topic

输出样例:

Hot

2

And 1 more

import re

a = int(input('输入微博数量(小于等于105的正整数):'))
b = []
c = []
while len(b)<a:
    x = input('请输入微博内容,小于140字:')
    if len(x)<140:
        b.append(x)
    else:
        print('信息超出140字限制,请从新输入。')
    c += re.findall('#[^#]+#',x)
d = [{'n':n,'c':len(c)-len(re.findall('#[^#]+#',re.sub(n,'',''.join(c.copy()))))} for n in set(c)]
e = sorted(d,key=lambda x:x['c'],reverse=True)
print(e[0]['n'].title())
print(e[0]['c'])

做了个大概,同一微博之中,话题重复的我没有排重,排重需要去掉所有非英文字母和数字的符号、并忽略大小写区别,你自己实现以下,在c+=那一行,自己追加,排序没有实现同样数量的按字母再次排序,也自己去实现一下