【用Python对全职高手小说分析分词词频词性,小说人物出场次数排序,小说中食物排序,小说人物关系等等】

需求

根据第1部分自然语言处理教学内容,请选择一本你喜欢的小说,利用上课讲的但不限于授课内容,对该小说进行分析。比如分析该小说的分词,词频,词性,小说人物出场次数排序,小说中食物排序(这个得有,我喜欢吃),小说人物关系等等。

1、前期准备

1.1 导入库

在这里插入图片描述

1.2 小说、用户字典、食物清单、停用词等txt文档 和 字体simfang.ttf 以及词云用到的图片

在这里插入图片描述
词云图片

以上资料自行百度下载 或者 自我总结

2、源码

'''
Autor: 何邦渊 
DateTime: 2022/3/20 21:24
IDE: PyCharm  
Function: 根据第1部分自然语言处理教学内容,请选择一本你喜欢的小说,利用上课讲的但不限于授课内容,对该小说进行分析。比如分析该小说的分词,词频,
          词性,小说人物出场次数排序,小说中食物排序(这个得有,我喜欢吃),小说人物关系等等。
          要求:1代码以py文件附件形式上传,有功能性注释和普通注释。
          2.功能介绍和运行结果截图可以在作业里写上。
          3.小说文件用txt形式存储。
          4.最后视功能完整性给分.
'''
import random
import networkx as nx
from imageio import imread
from wordcloud import WordCloud,ImageColorGenerator
import jieba
import jieba.posseg as pseg  # 获取词性
from collections import Counter
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

# 去除词性为nr,但不是人名的词
excludes = ['乐章','小姑娘','荣耀','易拉灌','易容术','明白','全明星','蓝溪阁','季后赛','本赛季','砰砰','和兴欣','上赛季','华丽','司仪',
            '西风','连胜','银武','周旋','马踏','安静','大屏幕','和嘉世','修正','了兴欣','卫星','谢谢','呼啸山庄','马甲','明星','英勇',
            '真是太','冷不丁','小精灵','高潮','太久','布阵','祝福','段时间','格斗','高水平','言语','别提','冷笑','晓枪','白痴','赛中',
            '顾忌','越来越近','封锁','小镇','贡献度','高阶','嘉世']

# 解决中文乱码,Python实现matplotlib显示中文的方法
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
font = FontProperties(fname=r"C:\Python\src\python与数据分析\simfang.ttf", size=14)

# 打开文本,生成列表
def open_text(path):
    with open(path,'r',encoding='utf-8') as f:
        return [line.strip() for line in f.readlines()]

# 对句子进行中文分词,词频,词性,并生成去除停用词和字符的小说文本
def seg_depart(path,total):
    # 无符号文本
    outstr = ''
    # 创建一个停用词列表
    stopwords = open_text('.\stopword.txt')
    # 对文档中的每一行进行中文分词
    with open(path,'r',encoding='utf-8') as text:
        for line in text:
            sentence_depart = pseg.cut(line.strip())
            for word,flag in sentence_depart:
                if word not in stopwords and word != '\t' and word != '' and len(word) >=2 and word.isdigit()!=True:
                    total[(word,flag)] = total.get((word,flag),0) + 1
                    outstr += word
    with open('./全职高手分词词频词性.txt','w',encoding='utf-8') as text1:
        for key,value in total.items():
            text1.write('%s,%s,%d\n' %(key[0],key[1],value))
    with open('./纯净版全职高手.txt','w',encoding='utf-8') as text2:
        text2.write(outstr)
    return total

# 人物出场次数排序
de
  • 2
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是使用Python LTP库对文本文件进行分词处理,加载停用词表去除停用词,按词频排序并标注词性,并将结果输出为Excel表格的示例代码: ```python import os import xlwt from pyltp import SentenceSplitter, Segmentor, Postagger # 设置LTP库的模型文件路径 LTP_DATA_DIR = 'ltp_data_v3.4.0' cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model') # 加载停用词表 stopwords = [] with open('stopwords.txt', 'r', encoding='utf-8') as f: for line in f: stopwords.append(line.strip()) # 初始化LTP分词器和词性标注器 segmentor = Segmentor() segmentor.load(cws_model_path) postagger = Postagger() postagger.load(pos_model_path) # 读取文本文件 with open('input.txt', 'r', encoding='utf-8') as f: text = f.read() # 使用LTP分句器对文本进行分句 sentences = SentenceSplitter.split(text) # 建立词频统计字典 word_freq_dict = {} # 处理每个句子 for sentence in sentences: # 使用LTP分词器对句子进行分词 words = segmentor.segment(sentence) # 使用LTP词性标注器对分词结果进行词性标注 postags = postagger.postag(words) # 处理每个词语 for word, pos in zip(words, postags): # 去除停用词 if word not in stopwords: # 统计词频 if word in word_freq_dict: word_freq_dict[word] += 1 else: word_freq_dict[word] = 1 # 按词频排序 sorted_word_freq = sorted(word_freq_dict.items(), key=lambda x: x[1], reverse=True) # 将结果输出为Excel表格 workbook = xlwt.Workbook(encoding='utf-8') worksheet = workbook.add_sheet('Sheet1') # 写入表头 worksheet.write(0, 0, '词语') worksheet.write(0, 1, '词性') worksheet.write(0, 2, '词频') # 写入词语、词性词频 for i in range(len(sorted_word_freq)): word = sorted_word_freq[i][0] freq = sorted_word_freq[i][1] pos = postagger.postag([word])[0] worksheet.write(i+1, 0, word) worksheet.write(i+1, 1, pos) worksheet.write(i+1, 2, freq) # 保存Excel文件 workbook.save('output.xls') ``` 其,`input.txt`是待处理的文本文件,`stopwords.txt`是停用词表文件,程序将处理结果输出为`output.xls`文件。需要注意的是,由于LTP库是基于Python2开发的,因此在Python3需要对部分代码进行修改,例如在`open()`函数需要加上`encoding='utf-8'`参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值