zoukankan      html  css  js  c++  java
  • 中文自然语言处理(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

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

  • 相关阅读:
    解析HTTP协议六种请求方法
    金蝶
    普元
    中间件
    [CTSC2008] 网络管理
    【Uva 10498】满意值
    【SPOJ839】最优标号
    bzoj2879 [Noi2012]美食节
    bzoj3144 [Hnoi2013]切糕
    bzoj3112 [Zjoi2013]防守战线
  • 原文地址:https://www.cnblogs.com/aLieb/p/11143235.html
Copyright © 2011-2022 走看看