请编写py3程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。 所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。 输入格式: 输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。 输出格式: 在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。 随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。
时间: 2024-03-24 08:36:56 浏览: 24
以下是对应的Python3代码实现:
```python
import re
# 读入文本
text = ''
while True:
line = input()
if line == '#':
break
text += line
# 将文本转化为单词列表
words = re.findall(r'\w{1,80}', text.lower())
# 统计不同单词的个数
word_count = {}
for word in words:
word = word[:15] # 截取前15个字符
if word not in word_count:
word_count[word] = 1
else:
word_count[word] += 1
# 输出不同单词的个数
print(len(word_count))
# 计算词频最大的前10%的单词
top_count = int(len(word_count) * 0.1)
sorted_words = sorted(word_count.items(), key=lambda x: (-x[1], x[0]))
top_words = sorted_words[:top_count]
# 输出词频最大的前10%的单词
for word, count in top_words:
print(str(count) + ":" + word)
```
注意:在读入文本时,我们将所有单词都转化为小写,并且截取长度超过15的单词的前15个字符。在计算词频最大的前10%的单词时,我们使用lambda表达式来定义排序规则,先按照词频递减排序,若词频相同,则按照字典序递增排序。
阅读全文