文本分析2-python文本数据导入操作

笔记来自课程:玩转文本挖掘(51ct0学院),总结整理为个人学习、复习使用,供参考。


在这里插入图片描述
英文文本天生带有空格,而中文文本没有间隔,且中文同一个词在不同语境下的含义不同,中文的智能分词及分析相对难度要高。

语料库在文本分词中发挥重要作用,不同的语料库有着不同设计目的,如古腾堡语料库(图书),布朗语料库(综合),路透社语料库(新闻)…
(但布朗语料库支持英文,中文不适用)

可以自己加工语料库,常见的语料库格式:

常见语料库格式

  • 外部文件
  • list
  • list of list
  • DataFrame

使用词袋模型进行后续数据分析时常见格式,行/列代表语料index,相应的列/行代表词条,或者需要加以记录的文档属性,如作者,原始超链接,发表日期等
词条/文档对应时,单元格记录相应的词条出现频率,或者相应的概率/分值
Doc2Term矩阵
Term2Doc矩阵
可以和原始语料的外部文件/list配合使用

对于单个文档,也可以建立DataFrame,用行/列代表一个句子/段落/章节。

文本分析例子

读入数据

以上面最后一种形式DataFrame建立语料库,单个文档的DataFrame

import pandas as pd
import os
#os.chdir(r'')

#导入一个文档
raw=pd.read_table('金庸-射雕英雄传txt精校版.txt',names=['txt'],encoding='GBK')
print(len(raw))
raw[10:100] #一段作为一个记录读进去


文档读入的前后包括序、附录等,对真正的分析没有什么用处,可以加入章节标识,去掉

加入章节标识

如何加入章节标识,这里要根据文章txt的内容确定,这里导入的文本,章节的划分是“第一回 风雪惊变”,也就是段落的第一个字是“第”,后面有“回 ”,且长度不长,根据这些条件基本可以定位到章节划分的地方,那么下面就设置这些条件,判断记录是不是章节划分处。

'''定位段落第一个字'''
def m_head(tmpstr):
    return tmpstr[:1]

'''定位段落是否包含章节名称关键字“回 ”'''
def m_mid(tmpstr):
    return tmpstr.find('回 ')

'''接着将函数应用到每一个段落,找到这些定位处的内容'''
raw['head']=raw.txt.apply(m_head)
raw['mid']=raw.txt.apply(m_mid)
raw['len']=raw.txt.apply(len)
#查看
raw.loc[raw['len']==8]

'''再加判断条件,添加章节编号'''
chapnum=0

for i in range(len(raw)):
    if raw['head'][i]=='第' and raw['mid'][i] >0 and raw['len'][i] < 30: #添加章节编号
        chapnum += 1
    if chapnum >= 40 and raw['txt'][i]=='附录一:成吉思汗家族': #去掉附录
        chapnum=0
    raw.loc[i,'chap']=chapnum  #添加编号一列
    
#添加编号后,可以删除临时变量
del raw['head']
del raw['mid']
del raw['len']

raw.head(50)

选出需要的章节内容

添加章节编号后,就可以提取出所需要的章节
在这里插入图片描述

#查看一下段落一般有多少字符
import matplotlib.pyplot as plt
%matplotlib inline
raw.txt.agg(len).plot.box()

在这里插入图片描述

'''去掉前后无用的,提取第一章'''
#根据章节分组
rawgrp=raw.groupby('chap')   #分组后类似一个个元组..
print(type(rawgrp))

'''
#打印看一看
for item in rawgrp:
    print(item)
'''
#合并字符串
'''在字符串列的情况下,sum函数自动合并字符'''
chapter=rawgrp.agg(sum)
#去掉章节为0的
chapter=chapter[chapter.index!=0]

#查看第一章
chapter.txt[1]  #有空格

更简洁的形式:

#一句命令也可以实现
#raw.groupby('chap').sum().iloc[1].txt
raw.groupby('chap').agg(sum).iloc[1].txt

在这里插入图片描述
另外一种形式(去掉空格):
用到strip( )函数

#一个笨拙去掉空格,选出第一章的尝试
#t=[]
t=''
for i in range(0,len(raw[raw['chap']==1])):
    #t.append(raw[raw['chap']==1].iloc[i].txt.strip())  #列表形式
    t=t+raw[raw['chap']==1].iloc[i].txt.strip()        #字符串拼接
print(t)

在这里插入图片描述
现在可以对全文作分析,也可以提取某个章回作分析。

猜你喜欢

转载自blog.csdn.net/qq_43165880/article/details/108045481