为红楼梦的第一回文本内容进行文本处理,分词,求词频,设权重,展示人物关系。python编写代码
时间: 2024-05-19 07:12:24 浏览: 105
基于Python实现分析文本数据的词频
好的,针对您的问题,我可以提供一些代码示例:
1. 文本处理和分词:
使用Python的jieba库进行中文分词和文本处理,示例代码如下:
import jieba
# 读取红楼梦第一回文本
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 对文本进行分词
seg_list = jieba.cut(text, cut_all=False)
# 将分词结果转换成列表
words = list(seg_list)
2. 词频统计:
使用Python的collections库进行统计词频,示例代码如下:
import collections
# 统计词频
word_counts = collections.Counter(words)
# 打印前10个出现频率最高的词汇
for word, count in word_counts.most_common(10):
print(word, count)
3. 设权重:
可以根据实际情况为不同的词汇设置不同的权重,例如人物可以设置较高的权重,示例代码如下:
# 定义词汇权重
word_weights = {'贾宝玉': 10, '林黛玉': 8, '薛宝钗': 8, '王熙凤': 6, '袭人': 6}
# 计算每个词汇的总权重
word_total_weights = collections.defaultdict(int)
for word in words:
if word in word_weights:
word_total_weights[word] += word_weights[word]
# 打印前10个权重最高的词汇
for word, weight in sorted(word_total_weights.items(), key=lambda x: x[1], reverse=True)[:10]:
print(word, weight)
4. 展示人物关系:
可以根据人物出现的上下文关系,推断出人物之间的关系,例如共同出现的上下文可以作为关系的线索,示例代码如下:
# 定义人物关系
person_relations = {'贾宝玉': set(), '林黛玉': set(), '薛宝钗': set(), '王熙凤': set(), '袭人': set()}
# 提取人物名字出现的上下文
word_indexes = collections.defaultdict(list)
for i, word in enumerate(words):
if word in word_weights:
word_indexes[word].append(i)
# 判断上下文中是否出现了其他人物
for word, indexes in word_indexes.items():
for i in indexes:
for j in range(max(0, i-3), i):
if words[j] in person_relations and words[j] != word:
person_relations[word].add(words[j])
for j in range(i+1, min(i+4, len(words))):
if words[j] in person_relations and words[j] != word:
person_relations[word].add(words[j])
# 打印人物关系
for person, relations in person_relations.items():
print(person, '关系:', ','.join(relations))
阅读全文