使用Gensim库对文本进行词袋、TF-IDF和n-gram方法向量化处理
Gensim库简介
机器学习算法需要使用向量化后的数据进行预测,对于文本数据来说,因为算法执行的是关于矩形的数学运算,这意味着我们必须将字符串转换为向量。从数学的角度看,向量是具有大小和方向的几何对象,不需过多地关注概念,只需将向量化看作一种将单词映射到数学空间的方法,同时保留其本身蕴含的信息。
Gensim是世界上最大的NLP/信息检索Python库之一,兼具内存高效性和可扩展性。Gensim的可扩展性体现为它采用了Python内置的生成器和迭代器进行流式数据处理,所以数据集事实上并未完全加载到内存中。Gensim的主要特性有内存无关、潜在语义分析的多核实现、潜在Dirichlet分布、随即投影、分层Dirichlet过程,Word2Vec深度学习,以及在计算集群上运行LSA和LDA的能力。
1、数据预处理
本文通过处理部分新闻文本数据的test.txt,使用spacy和Gensim模块包对该文件进行去除停用词等预处理如下:
import spacy
from spacy.lang.zh.stop_words import STOP_WORDS
import pandas as pd
from gensim import corpora
from gensim import models
import gensim
#去除停用词
def stopwords(article):
nlp = spacy.load("zh_core_web_sm")
texts = []
doc = nlp(article)
for w in doc:
if w.is_stop == False:
texts.append(w.text)
return texts
在对文本进行预处理后,分别使用词袋、TF-IDF和n-gram三种方法向量化,并分别输出成三份txt。下面讨论向量的几种表示方法:
2、词袋
词袋是将句子转换成向量的直接手段,这种方法在信息检索领域非常常用。词袋模型的一个重要的特征是,他是一种无序的文档表示,唯一的信息是词频,所以我们在使用这种方法的时候无法判断哪个单词会先出现,这样可能导致空间信息以及语义信息的丢失,当然这在一些对词顺序并不重要的应用场景中并不重要。
代码:
#词袋
def cidai(txts):
dictionary = corpora.Dictionary(txts)
corpus = [dictionary.doc2bow(word) for word in txts]
corpus = str(corpus)
##将分好的语料库存储在本地
with open (r"E:\1\Study\大三下\自然语言处理\作业4\bag.txt",'w') as f:
f.write(corpus)
结果:
3、TF-IDF
词袋向量化的方法仅仅有词语出现的词频的信息,但是有些词频很高的词语却并不一定是关键词,因此我们可以用反向文档词频的方法来减少无效词的干扰,因此TF-IDF的向量表示方法便被提出。TF-IDF是一种将句子转换成向量的直观方法,它被广泛用于搜索引擎的算法。其中,TF表示一个词在文档中出现的词频,IDF表示单词在文档中的重要性。
代码:
#TF-IDF
def TfIdf(txts):
doc = []
tfidf = models.TfidfModel(txts)
for document in tfidf[txts]:
doc.append(document)
doc = str(doc)
with open (r"E:\1\Study\大三下\自然语言处理\作业4\TF_IDF.txt",'w') as f:
f.write(doc)
结果:
4、n-gram
前面两种表示方法假设字与字之间是相互独立的,没有考虑它们之间的顺序。于是引入n-gram( n元语法)的概念。n-gram指文本中n个相邻单词的连续序列,它是从一个句子中提取n个连续的字的集合,可以获取到字的前后信息。然而,词表的维度随着语料库的增长而膨胀,n-gram词序列随语料库增长呈指数型膨胀,更加快。
代码:
#n-grams
def N_g(txts):
bigram = gensim.models.Phrases(txts)
txts = [bigram[line] for line in txts]
dictionary = corpora.Dictionary(txts)
#print("token:",dictionary.token2id)
corpus = [dictionary.doc2bow(text) for text in txts]
corpus = str(corpus)
with open (r"E:\1\Study\大三下\自然语言处理\作业4\n_gram.txt",'w') as f:
f.write(corpus)
结果:
5、总结
本文介绍了Gensim库以及使用不同向量的几种表示方法(词袋、TF-IDF和n-grams)。计算机支持多种表示方式来变换单词,TF-IDF和词袋便是其中的两种向量表示方法。Gensim是一个Python包,它为我们提供了生成各种向量表示的方法,这些向量将会作为各种机器学习和信息检索算法的输入。
更高级的预处理技术还包括创建n-grams、固定搭配和删除低频词,能帮助我们获得更好的效果。同时,向量的概念也是构成自然语言处理基础的很大因素之一。
使用Gensim库对文本进行词袋、TF-IDF和n-gram方法向量化处理的更多相关文章
- 用jieba库统计文本词频及云词图的生成
一.安装jieba库 :\>pip install jieba #或者 pip3 install jieba 二.jieba库解析 jieba库主要提供提供分词功能,可以辅助自定义分词词典. j ...
- NLP从词袋到Word2Vec的文本表示
在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本.早期是基于规则 ...
- tensorflow在文本处理中的使用——词袋
代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)——第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-coo ...
- 词袋和 TF-IDF 模型
做文本分类等问题的时,需要从大量语料中提取特征,并将这些文本特征变换为数值特征.常用的有词袋模型和TF-IDF 模型 1.词袋模型 词袋模型是最原始的一类特征集,忽略掉了文本的语法和语序,用一组无序的 ...
- 学习笔记CB001:NLTK库、语料库、词概率、双连词、词典
聊天机器人知识主要是自然语言处理.包括语言分析和理解.语言生成.机器学习.人机对话.信息检索.信息传输与信息存储.文本分类.自动文摘.数学方法.语言资源.系统评测. NLTK库安装,pip insta ...
- 『Kaggle』Sklearn中几种分类器的调用&词袋建立
几种分类器的基本调用方法 本节的目的是基本的使用这些工具,达到熟悉sklearn的流程而已,既不会设计超参数的选择原理(后面会进行介绍),也不会介绍数学原理(应该不会涉及了,打公式超麻烦,而且近期也没 ...
- 文本特征提取---词袋模型,TF-IDF模型,N-gram模型(Text Feature Extraction Bag of Words TF-IDF N-gram )
假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...
- python根据文本生成词云图
python根据文本生成词云图 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analy ...
- paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.
paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
随机推荐
- H5 页面与小程序之间 传递数据
H5 页面与小程序之间 传递数据 小程序里面的 H5页面与小程序之间怎么传递数据 webview与小程序之间的实时通信 webview主动发消息给小程序 webview可以利用jssdk提供的 wx. ...
- js generator和yield
function co<T>(fn: () => Generator<any, any, any>): Promise<T> { const g: Gener ...
- js 最简单的发布订阅模式
let _subscriber: any; function autorun(subscriber: Function) { _subscriber = subscriber; _subscriber ...
- 10月份上线的NGK有什么不同之处?
近日,有小道消息传出公链项目NGK即将在10月上线的消息.各大社区纷纷开始布局,市场中关于NGK项目的消息也变得更多了起来.仅是社区热度这一点,对比之下就已经优于很多项目,那么是否还有其他优势呢?让我 ...
- Ribbon实现负载均衡时 服务提供者注册失败 原因之一
问题描述:提供者注册时总是不用自己配置的server.port 在project structuree中的模块总是自动添加别的模块的文件 那么一定要看看project structure中的langu ...
- idea更改包名无法加载主类解决
把工程下面的.idea目录下的workspace.xml里面的路径改成你最新的路径即可. <option name="SPRING_BOOT_MAIN_CLASS" valu ...
- [转载]Android MVC,MVP和MVVM 思想&例子
在Android开发中,常采用 MVC(Model-View-Controller)或者MVP(Model-View-Presenter) 等框架模式.设计如图 mvc mvp 可以看出,在 MV ...
- LeetCode-层数最深叶子结点的和
层数最深叶子结点的和 LeetCode-1302 这里可以采用上一题中求解二叉树的深度的方法. 因为需要记录最深结点的值的和,所以这里可以边求和,如果遇到不符合最深结点时再将和sum=0. /** * ...
- javascript处理HTML的Encode(转码)和解码(Decode)
HTML的Encode(转码)和解码(Decode)在平时的开发中也是经常要处理的,在这里总结了使用javascript处理HTML的Encode(转码)和解码(Decode)的常用方式 一.用浏览器 ...
- SHELL编程概念&变量剖析
一.shell软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...