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

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


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

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

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

常见语料库格式

    外部文件 list list of list DataFrame

对于单个文档,也可以建立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)

现在可以对全文作分析,也可以提取某个章回作分析。

经验分享 程序员 微信小程序 职场和发展