中文自然语言处理(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

  这大概就是第二次的博客了,通过写博客好像真的可以激发一点写代码的热情和兴趣(虽然都是一些基础简单的代码就是了).

posted @ 2019-07-06 16:46  aLieb  阅读(947)  评论(0编辑  收藏  举报