中文自然语言处理(NLP)(二)python jieba模块的进一步学习和xlrd模块
上一次链接:中文自然语言处理(NLP)(一)python jieba模块的初步使用
续上次对于jieba模块的介绍,这次主要是一些jieba模块的进一步的应用,以及在这次的项目里面和xlrd模块结合起来的应用。
1.jieba带词性的分词
jieba的词性标注posseg:词性标注也叫此类标注,pos tagging是part-of-speech tagging的缩写
要使用jieba的这个功能只需要import jieba.posseg as psg(随便一个名字,这里就叫psg了)
一般情况下带词性的分词格式为:
1 all_words_with_attr=[(x.word,x.flag)for x in psg.cut(read_txt) if x.flag=='n' and x.word not in stop_list]
p.s.read_txt是需要读取的文本,stop_list是之前添加的停用词表,这里还对其词性限制为名词
下图为分词之前的文本,这里是将其整个读入txt文件了:
下图是分词之后得到的词语(因为全都是名词所以就不将词性显示出来了):
可以看到,经过分词之后的结果还是比较理想的,这里的停用词表是下载的哈工大的通用停用词表,txt文件,单独读取为一个list,若分出的词为名词并且不在这个list(not in)里面,就将其记录下来.
2.涉及excel文件的处理 xlrd和xlwt模块
这次的项目里需要对excel文件进行读写操作,所以说需要将excel文件里的数据按要求格式读取和存储
这里就用到了python的xlrd(读)和xlwt(写)模块
2.1安装
xlrd和xlwt模块的安装直接在cmd窗口里面pip install xlrd/xlwt即可
2.2使用
import xlrd/xlwt#导入部分
打开excel文件来获取数据
excel_file=xlrd.open_workbook(dict_path)#根据这个文件打开工作路径
excel文件当中的数据都是存储在一张张表(sheet)当中的,所以说需要先获取一个sheet才能读取其中的数据
sheet=excel_file.sheet_by_index(0)#打开第一个sheet
这个例子使用了sheet_by_index()方法来获取sheet,也就是表的编号,从0开始,即参数填写0则会提取出第一张表(默认名一般为sheet1)
当然,还有其他的方式来获取表,例如sheet_by_name()方法就是通过表的名字来获取,sheet()方法也是通过索引序号来获取的(用法一般为sheet=excel_file.sheet()[0])
上述的三种方法都会返回一个xlrd.sheet.Sheet()对象供用户使用
这种对象(这里命名为sheet)比较常用到的方法为row(),顾名思义就是获取sheet当中的一行,这在遍历表中内容的时候比较有用
1 countRow=sheet.nrows#获取excel文件的总行数 2 for i in range(1,countRow): 3 listrow=sheet.row(i)#使用for循环获得每一行的数据 4 math_word=listrow[0].value#获取第1列(编号为0)的数据 5 jieba.add_word(math_word,tag='n')#将excel中的数学关键词依次添加进去
这个例子是将excel文件当中的sheet1当中的第一列的所有数据读取出来,再使用jieba模块的add_word方法添加用户自定义词,通过for循环实现即可
3.jieba和xlrd模块组合使用
这部分内容涉及到我们小组项目的一部分功能,也就是运用这两个模块实现一些方法,纯粹是自己工作的记录,没什么必要看:
3.1从excel文件当中添加自定义词:
1 def set_additional_dict_excel(dict_path): 2 #设置添加excel词典的函数,这里的参数应当是一个excel的路径 3 print('已进入额外词典添加函数') 4 start_time=time.time() 5 excel_file=xlrd.open_workbook(dict_path)#根据这个文件打开工作路径 6 sheet=excel_file.sheet_by_index(0)#打开第一个sheet 7 countRow=sheet.nrows#获取excel文件的总行数 8 for i in range(1,countRow): 9 listrow=sheet.row(i)#使用for循环获得每一行的数据 10 math_word=listrow[0].value#获取第1列(编号为0)的数据 11 jieba.add_word(math_word,tag='n')#将excel中的数学关键词依次添加进去 12 end_time=time.time() 13 print('已经将数学词库添加进分词词库,数据量为:',countRow,'执行时间为:',(end_time-start_time),'s')
3.2从txt文件当中添加自定义词\从txt文件当中导入停用词表:
def set_additional_dict_txt(dict_path): with open(dict_path,'r',encoding='gbk')as f: for x in f.readlines(): words=x.split()#以空格为分隔符分开每一行 for math_word in words: jieba.add_word(math_word,tag='n') f.close() def set_stop_dict_txt(stop_path): #从txt文件导入停用词表,返回一个列表 stop_dict=[] with open(stop_path,'r',encoding='utf-8')as f: for x in f.readlines(): stop_dict.append(x[:-3]) f.close() return stop_dict
中文自然语言处理(NLP)(三)运用python jieba模块计算知识点当中关键词的词频:https://www.cnblogs.com/aLieb/p/11152109.html
这大概就是第二次的博客了,通过写博客好像真的可以激发一点写代码的热情和兴趣(虽然都是一些基础简单的代码就是了).