文本分析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)
现在可以对全文作分析,也可以提取某个章回作分析。
下一篇:
linux调试工具,gdb常用调试指令
