文本分析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常用调试指令