1.载入文档

 #!/usr/bin/python
# -*- coding: utf-8 -*- import pandas as pd
import re
import jieba
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer #加载文本
dataPath1='D:/machinelearning data/crawlerData/mi6x_JD500.csv'
dataPath2='D:/machinelearning data/crawlerData/huaWei_P20_JD100.csv'
dataPath3='D:/machinelearning data/crawlerData/test1.txt'
stopWord_Path='D:/论文文件/学习文件/情感分析/dict词典/哈工大stopword .txt'#停用词路径
f1=pd.read_csv(dataPath1,sep=',',encoding='GBK')#.iloc[:,1]#加载文本1
f2=pd.read_csv(dataPath2,sep=',',encoding='GBK')#.iloc[:,1]#加载文本2
f3=pd.read_csv(dataPath3,sep=',',encoding='GBK',header=0)#.iloc[:,1]#加载文本3

2.加载停用词

把停用词典的停用词存到列表里,下面去停用词要用到

 #加载停用词,停用词要是列表形式才能使用
stopWord=[]
with open(stopWord_Path,'r',encoding='utf-8') as fr:#加载停用词
for word in fr.readlines():
stopWord.append(word.strip())
#print(stopWord)

3.文本分词

这里有两个切分词的函数,第一个是手动去停用词,第二个是下面在CountVectorizer()添加stop_words参数去停用词。两种方法都可用。

 #文本切分函数,用来对中文文本分词,包括除去数字字母以及停用词,得到一个分词用空格隔开的字符串,便于下面向量化(因为这个CountVouterizer()是针对英文分词的,英文之间直接用空格隔开的)
def cut_word(sent):
line=re.sub(r'[a-zA-Z0-9]*','',sent)
wordList=jieba.lcut(line,cut_all=False)
return ' '.join([word for word in wordList if word not in stopWord and len(word)>1])#文本分词,并且用空格连接起来,便于下面向量化 #也是文本切分函数,只不过这个没有去停用词,CountVouterizer()中可以直接添加停用词表参数,不统计文档中的停用词的数量
def cutword(sent):
line=re.sub(r'[a-zA-Z0-9]*','',sent)
wordList=jieba.lcut(line,cut_all=False)
return ' '.join([word for word in wordList if len(word)>1])

4.对文本进行分词,向量化

(1)对文本进行分词,并且将分词结果加到'word_list’列中。

f3['word_list']=f3.comment.apply(cutword)#将文本分词,并且分词用空格隔开变成文本存才DataFrame中
print(f3)

结果如下

                                        comment            word_list
0 你好吗,你的我的他的都不行,非常好,中国加油! 你好 不行 非常 中国 加油
1 真的非常好,你知道吗,手机性能不行 真的 非常 知道 手机 性能 不行
2 昨天晚上下单,今早拿到机器。这物流很给力!电池不耐用,不优秀。严重发烫,希望小米后续优化跟进。 昨天晚上 下单 今早 拿到 机器 物流 电池 耐用 优秀 严重 发烫 希望 小米 后续 优化 跟进

(2)对文本向量化,sklearn中的CounterVectorizer()向量化为系数矩阵,文本必须是空格隔开的字符串,因为CounterVectorizer()是针对英文分词的,英文之间直接用空格隔开的。

get_feature_names()获得上面稀疏矩阵的列索引,即特征的名字(就是分词)。这样就能知道稀疏矩阵中的每一列表示的是哪个词了
 wordList=list(f3.word_list)#必须变成列表个是才能输入下面的向量化函数
count_vect = CountVectorizer(min_df=1,stop_words=stopWord,analyzer ='word') # 并且设置了停用词表为列表stopWord,即在向量化时去掉停用词不统计,词至少在1个文档中出现过
words_vec = count_vect.fit_transform(wordList)
print(words_vec.toarray())#得到分词的系数矩阵
#print(words_vec.todense())
vec1=pd.DataFrame(words_vec.toarray())
print(count_vect.get_feature_names())#获得上面稀疏矩阵的列索引,即特征的名字(就是分词)

向量化的结果

[[0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0]
[1 0 0 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1]]

(3)count_vect.get_feature_names()得到的分词索引列表

['下单', '不行', '中国', '今早', '优化', '优秀', '你好', '加油', '发烫', '后续', '小米', '希望', '性能', '手机', '拿到', '昨天晚上', '机器', '物流', '电池', '真的', '耐用', '跟进']

  对应上面的稀疏矩阵就是,第一列为‘下单’,在文档1,2,3中分别出现0,0,1次。其他的同理

自然语言处理--中文文本向量化counterVectorizer()的更多相关文章

  1. LSTM实现中文文本情感分析

    1. 背景介绍 文本情感分析是在文本分析领域的典型任务,实用价值很高.本模型是第一个上手实现的深度学习模型,目的是对深度学习做一个初步的了解,并入门深度学习在文本分析领域的应用.在进行模型的上手实现之 ...

  2. NLP自然语言处理入门-- 文本预处理Pre-processing

    引言 自然语言处理NLP(nature language processing),顾名思义,就是使用计算机对语言文字进行处理的相关技术以及应用.在对文本做数据分析时,我们一大半的时间都会花在文本预处理 ...

  3. 自然语言0_nltk中文使用和学习资料汇总

    http://blog.csdn.net/huyoo/article/details/12188573 官方数据 http://www.nltk.org/book/ Natural Language ...

  4. 『TensotFlow』RNN中文文本_上

    中文文字预处理流程 文本处理 读取+去除特殊符号 按照字段长度排序 辅助数据结构生成 生成 {字符:出现次数} 字典 生成按出现次数排序好的字符list 生成 {字符:序号} 字典 生成序号list ...

  5. SnowNLP:•中文分词•词性标准•提取文本摘要,•提取文本关键词,•转换成拼音•繁体转简体的 处理中文文本的Python3 类库

    SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和Te ...

  6. 文本向量化及词袋模型 - NLP学习(3-1)

    分词(Tokenization) - NLP学习(1) N-grams模型.停顿词(stopwords)和标准化处理 - NLP学习(2)   之前我们都了解了如何对文本进行处理:(1)如用NLTK文 ...

  7. SnowNLP:一个处理中文文本的 Python 类库[转]

    SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和Te ...

  8. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  9. 推荐 | 中文文本标注工具Chinese-Annotator(转载)

    自然语言处理的大部分任务是监督学习问题.序列标注问题如中文分词.命名实体识别,分类问题如关系识别.情感分析.意图分析等,均需要标注数据进行模型训练.深度学习大行其道的今天,基于深度学习的 NLP 模型 ...

随机推荐

  1. docker容器中搭建kafka集群环境

    Kafka集群管理.状态保存是通过zookeeper实现,所以先要搭建zookeeper集群 zookeeper集群搭建 一.软件环境: zookeeper集群需要超过半数的的node存活才能对外服务 ...

  2. spring data jpa分页5种方法

    7.12.12 分页 本地sql查询 注意表名啥的都用数据库中的名称, 适用于特定数据库的查询 public interface UserRepository extends JpaRepositor ...

  3. remote Request

    import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; ...

  4. hibernate 异常

    1.异常:org.hibernate.AnnotationException: No identifier specified for entity异常. entity类是必须要主键的,否则就会报出这 ...

  5. bat 批量更改文件名的批处理文件

    bat 批量更改文件名的批处理文件 最近下了不少动画,不过文件名都太长,一般都是 [字幕组][名称][集数][语言][分辨率][编码].后缀 这样的格式 我喜欢简单的名字,比如 01.rmvb 之类, ...

  6. 实现spring IOC的常见二种方法 setter注入与构造器注入

    案例: beans.xml配置 <?xml version="1.0" encoding="UTF-8"?><beansxmlns=" ...

  7. Linux Shell 文本处理工具集锦(转载)

    内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...

  8. Python bool() 函数

    Python bool() 函数  Python 内置函数 描述 bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False. bool 是 int 的子类. 语法 以下是 boo ...

  9. 【英宝通Unity4.0公开课学习 】(三)脚本使用

    清明出去放松了一天. 看了下大姑爷,然后去大姑家吃了个午饭,下午三点左右出去找煤球耍,在他们学校和良乡镇逛了一下.当时感觉离北京好远好远啊... 其实不得不说现在的交通确实很方便,到哪都要不了几天,如 ...

  10. ECMAScript6新特性之String API

    填充到指定长度,默认使用空格填充. 一 左填充 var arr = []; for(var i=0;i<20;i++){ var str = (i+'').padStart(2,'0'); ar ...