【射雕英雄传】文本分析初步(姓名,丹药,秘籍,招式)[scrapy, jieba, matplotlib]

本文介绍了使用scrapy爬取《射雕英雄传》文本,通过自定义user_dict结合jieba进行分词,重点讲解了如何提取人名、丹药和秘籍,运用条件概率思想和关键词搜索。最后通过matplotlib进行词频统计和可视化展示。
摘要由CSDN通过智能技术生成

大三上学期选了学校高瓴开的大数据分析导论,最后的final分为两个部分,本文讲述第一部分的完成步骤。大致可以描述为:爬取文章,从本文本构造user_dict,利用jieba分词,分门别类统计词频并绘图。
在此做个小预告,final第二部分是绘制词云、主题抽取、利用word_embedding进行相关性分析以及自主探索,后面做完作业再更新,放在一个主题下方便查找。

内容的爬取

感觉爬虫这个玩意儿其实挺简单的,不过只学习了静态网页的爬取所以也有点以偏概全的意思,但是这里不解释爬虫相关的细节与东西。

import scrapy
class NovelSpider(scrapy.Spider):
    name = "info"

    def start_requests(self):
        urls = [  
            # 'http://www.jinyongshuwu.com/nshe/index.html'     
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        prefix = 'http://www.jinyongshuwu.com/nshe/'
        for url in response.css('ul.mlist li a::attr(href)').extract():
            url = prefix + url
            yield scrapy.Request(url=url, callback=self.parseDetails)
    
    def parseDetails(self, response):
        title = response.css('h1.title::text').extract_first()
        content = [s.strip() for s in response.css('div.vcon p::text').extract()]
        with open('射雕英雄传\\原文 换源\\' + title + '.txt', 'w', encoding='utf-8') as fout:
            fout.write(title)
            for para in content:
                fout.write('\n' + para)

唯一需要解释一嘴的是parse函数里面在进行详情页的爬取的时候,需要加上prefix这个东西,因为发现直接拿到的url并不是链接的完全体,而是最后的一部分,比如1000.html。所以如果想正常访问,必须和prefix粘在一起。

user dict的构造

先小小解释一下user_dict这玩意是个啥一遍没什么基础的同学们看得舒服一些。

user dict

这玩意儿是我们在调用中文分词模块jieba的时候有时需要自定义的一个词典。为啥需要这么个东西?我们来想象jieba可能的应用场景,老师让你帮他做一个领导讲话的文本分析。你拿到手之后发现领导的文笔属实nb,其中用到了很多人的举例论证,所以难免会有很多的人名在里面。但是jieba这个东西很难对中文名字进行合适的分割,比如一段文本“刘欢笑道”,可以有两种理解方式,要么这哥们是刘欢,要么叫刘欢笑。为了帮助jieba识别“刘欢”这个词语,并且不让它从中间一分为二,被上下文语意所撕裂,我们构建一个文本文件user_dict把“刘欢”这个名字写进去,并且利用jieba.load_userdict(filepath)添加进去。
更多的细节我们不再展开,比如在后面可以进一步地添加词频与词性等。另外,需要说明的是你把“刘欢”加了进去,如果你用jieba分的那段文字里面刘欢这哥们老笑着说话,那么还是有可能分词为“刘欢笑”+”道“,这是内部算法所决定的,没有更精细需求的可以略去。
示例:

user_dict.txt
#内容是:
#刘欢
import jieba 
jieba.load_userdict('user_dict.txt')

概述

需要说一下的是,诚然可以从网上尽情搜罗金庸宇宙的各种人名、丹药或秘籍的名字,直接放在user_dict里面进行分割,但是完全失去了这个作业本应锻炼我们的地方。所以我选择一周每天额外工作两个小时左右,从产生想法到实现算法自己提取这些未知的词汇,现在看来不仅提取了在网上没有出现过的内容,并且给了我很大的锻炼。
很喜欢徐君老师的一句话,有多少人工就有多少智能。
因此构造user dict会是本篇博客的重点,不感兴趣的可以跳过,看看后面对于分词与词频统计、绘图的内容。
本部分的工作流程如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值