赞
踩
对评论数据打好标签,这里将汽车评论数据分为正面和负面两类。假设负面标签为0,正面标签为1.
一般可分为训练集,验证集和测试集。为什么要这么分,这篇博文给了浅显的解释:训练集、验证集和测试集的意义本试验将数据分为训练集和测试集两类。
例如,训练集文本的路径:train_data/train_positive.xlsx , train_data/train_negtive.xlsx…
例如,测试集文本的路径:test_data/test_negtive.xlsx , test_data/test_positive.xlsx…
第1节预处理中的语料库都是没有分词的原始语料(即连续的句子,而后面的工作需要把文本分为一个个单词),现在需要对这些文本进行分词,只有这样,才能在基于单词的基础上,对文档进行结构化表示。
中文分词有其特有的难点(相对于英文而言),最终完全解决中文分词的算法是基于概率图模型的条件随机场(CRF),CRF的原理我们不细说了,直接调用中文分词的工具,这里用的是python第三方分词库jieba(所采用的算法就是条件随机场)
关于分词库的更多讨论可以参考这篇文章:python分词工具推荐
首先讲解jieba分词使用方法(详细的和更进一步的,可以参考jieba分词原理
jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
实例代码:
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
输出:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】: 我/ 来到/ 北京/ 清华大学
【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大
接下来,我们要通过python编程,来将1.3节中的 ./train_data/原始训练语料库和1.4节中的./test_data/原始测试语料库进行分词,分词后保存的路径可以设置为:./train_data_seg/和./test_data_seg/
代码如下,思路很简单,就是将excel里面的评论数据一条一条取出来保存到DataFrame中,然后遍历DataFrame中的文本数据,将每个文本依次进行分词之后保存到对应路径。
# encoding = utf-8 import sys import os import jieba import jieba.analyse import pandas as pd import xlrd import importlib from pandas import DataFrame from sklearn.datasets.base import Bunch ''' #全模式 seg_list = jieba.cut("我是一位小仙女", cut_all = True) print("Full Mode:" + "/".join(seg_list)) #精确模式,cut_all 属性不写的话也是默认精确模式 seg_list = jieba.cut("DX7 Prime是国产汽车SUV由内到外最上乘的!", cut_all= False) print("Default Mode:" + "/".join(seg_list)) ''' #保存至文件 def savefile(savepath, content): with open(savepath, "wb") as fp: fp.write(content.encode("utf-8")) #
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。