三国演义人名词云: 设计一个程序,读出“三国演义.txt”文件中的三国演义全文,将常见人名进行去重后生成词云,并列出词频最高的10-20个词,并形成词云(可以有不同的形状)。 例:'玄德','刘备','玄德曰','刘皇叔','皇叔'都是同一个人。任务拓展:利用列表或字典来存储同一个人。学会修改
时间: 2023-12-10 17:05:08 浏览: 389
这是一个比较复杂的任务,需要用到文本处理、数据结构和可视化等知识。下面是一个可能的实现方法:
1. 读取文本文件
首先需要读取三国演义的文本文件,可以使用Python内置的文件读取方法,比如open函数。
```python
with open('三国演义.txt', 'r', encoding='utf-8') as f:
text = f.read()
```
2. 分词和去重
接下来需要对文本进行分词,并将常见的人名进行去重。可以使用Python中的jieba库进行分词,再用一个集合来进行去重。
```python
import jieba
names = set()
words = jieba.cut(text)
for word in words:
if word in name_list:
names.add(word)
```
其中name_list是一个包含常见人名的列表,可以自己定义或在网上找现成的。
3. 统计词频
接下来需要统计每个人名出现的次数,可以用一个字典来存储。遍历文本中的每个词,如果这个词是人名,则将它加入字典中,如果已经存在,则将对应的计数器加1。
```python
name_dict = {}
words = jieba.cut(text)
for word in words:
if word in names:
if word in name_dict:
name_dict[word] += 1
else:
name_dict[word] = 1
```
4. 排序和取topN
排序可以使用Python内置的sorted函数,按照字典的值(即出现次数)进行排序。排序后取出前面的topN个人名即可。
```python
topn = 20 # 取前20个
sorted_names = sorted(name_dict.items(), key=lambda x: x[1], reverse=True)
topn_names = [name for name, count in sorted_names[:topn]]
```
5. 生成词云
最后可以用Python的wordcloud库来生成词云。这个库需要先安装,可以使用pip命令进行安装。
```python
from wordcloud import WordCloud
import matplotlib.pyplot as plt
wordcloud = WordCloud(width=800, height=400, font_path='msyh.ttc')
wordcloud.generate_from_frequencies(name_dict)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
```
其中font_path是字体文件的路径,这里使用了微软雅黑字体。可以用其他字体,也可以不指定字体,使用默认的字体。
完整代码如下:
阅读全文