使用jieba,请编写 python 程序,统计《三国演义》中出场次数排名前20的人物和对应的次数。
时间: 2024-10-29 17:12:38 浏览: 38
为了统计《三国演义》中出场次数排名前20的人物及其出现次数,你可以使用`jieba`库进行分词,然后结合Python的`collections`模块来计算每个词语(人物名字)的频率。以下是简单的示例代码:
```python
import jieba
from collections import Counter
# 假设你有一个包含《三国演义》文本的字符串叫做text
# 或者从文件读取进来
text = ... # 例如:text = open("三国演义.txt", "r").read()
# 使用jieba分词
word_list = jieba.lcut(text)
# 提取人名数据(这里假设人名都是连续的两个汉字)
names = [word for word in word_list if len(word) == 2 and word.isalpha()]
# 使用Counter计算每个名字的出现次数
name_count = Counter(names)
# 获取前20频繁出现的名字及其次数
top_20 = name_count.most_common(20)
# 打印结果
for rank, (name, count) in enumerate(top_20, start=1):
print(f"第{rank}名: {name}, 出现次数: {count}")
相关问题
在python中请用jieba完成统计三国演义人物的出场次数
好的,我会按照你的要求进行回答。为了完成该任务,你需要首先安装jieba库。你可以使用以下命令进行安装:
```
pip install jieba
```
然后,你需要获取三国演义的原始文本数据,并将其放入到一个文本文件中,比如"sgyy.txt"。接下来,你可以使用以下代码进行统计人物出场次数:
```python
import jieba
# 读取文件内容
with open('sgyy.txt', 'r', encoding='utf-8') as f:
sgyy = f.read()
# 使用jieba分词
words = jieba.lcut(sgyy)
# 统计人物出现次数
counts = {}
for word in words:
if len(word) == 1: # 过滤掉单个字的词语
continue
elif word == '诸葛亮' or word == '孔明曰': # 同一人物,不同称呼,视为一个
rword = '孔明'
elif word == '关公' or word == '云长':
rword = '关羽'
elif word == '玄德' or word == '刘皇叔' or word == '刘备曰':
rword = '刘备'
elif word == '孟德' or word == '曹贼':
rword = '曹操'
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
# 输出结果
for word in sorted(counts, key=lambda x: counts[x], reverse=True):
print(f'{word}\t{counts[word]}')
```
运行以上代码,你就可以得到统计结果了。注意,由于jieba分词并不是完全准确的,因此统计结果也可能存在一些误差,需要根据具体情况进行调整。
Python编写程序利用jieba库进行分词,统计出三国演义中三国人物的出现次数
好的,首先需要安装jieba库,可以使用以下命令进行安装:
```
pip install jieba
```
然后,我们需要读取三国演义的文本文件。假设三国演义的文本文件名为“sgyy.txt”,可以使用以下代码进行读取:
```python
with open('sgyy.txt', 'r', encoding='utf-8') as f:
sgyy_text = f.read()
```
接下来,我们需要使用jieba库进行分词。可以使用以下代码:
```python
import jieba
# 分词
seg_list = jieba.cut(sgyy_text)
# 去除停用词
stop_words = [',', '。', '、', ':', ';', '\n', '之', '也', '而', '乃', '其', '则', '者', '其', '为', '以', '有', '是', '在', '不', '而', '此', '彼']
word_list = [word for word in seg_list if word not in stop_words]
```
上面的代码中,我们使用了jieba.cut()方法对文本进行分词,并使用列表推导式去除了一些无意义的停用词。
接下来,我们需要统计出三国演义中三国人物的出现次数。可以使用以下代码:
```python
# 统计人物出现次数
person_dict = {}
for i in range(len(word_list)-1):
if word_list[i] == '曹操' or word_list[i] == '刘备' or word_list[i] == '孙权':
if word_list[i+1] != ',' and word_list[i+1] != '。':
if word_list[i] not in person_dict:
person_dict[word_list[i]] = 1
else:
person_dict[word_list[i]] += 1
# 输出结果
for key, value in person_dict.items():
print(key, value)
```
上面的代码中,我们使用了一个字典来统计人物出现次数。首先,我们遍历分词后的列表,判断当前词是否是三国人物中的一个(曹操、刘备、孙权)。如果当前词是一个三国人物,我们再判断下一个词是否是标点符号(“,”和“。”),如果不是,则将当前词加入到字典中,并将其出现次数加1。最后,我们将字典中统计出来的结果输出即可。
完整代码如下:
```python
import jieba
# 读取文本
with open('sgyy.txt', 'r', encoding='utf-8') as f:
sgyy_text = f.read()
# 分词
seg_list = jieba.cut(sgyy_text)
# 去除停用词
stop_words = [',', '。', '、', ':', ';', '\n', '之', '也', '而', '乃', '其', '则', '者', '其', '为', '以', '有', '是', '在', '不', '而', '此', '彼']
word_list = [word for word in seg_list if word not in stop_words]
# 统计人物出现次数
person_dict = {}
for i in range(len(word_list)-1):
if word_list[i] == '曹操' or word_list[i] == '刘备' or word_list[i] == '孙权':
if word_list[i+1] != ',' and word_list[i+1] != '。':
if word_list[i] not in person_dict:
person_dict[word_list[i]] = 1
else:
person_dict[word_list[i]] += 1
# 输出结果
for key, value in person_dict.items():
print(key, value)
```
阅读全文