使用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:// ...
随机推荐
- APP 跳转到支付包小程序
APP 跳转到支付包小程序 APP选择支付宝支付,会跳转到支付宝小程序再支付 支付包 小程序 我司有自己的APP.生活号,小程序,这种情况下如何和小程序关联,跳转到小程序里去,做到无缝对接? 其实,小 ...
- perl 打印目录结构
更多 #!/usr/bin/perl # 递归打印目录结构 use v5.26; use strict; use utf8; use autodie; use warnings; use Encode ...
- C++算法代码——Sumsets[uva10125]
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1278 题目描述 给你一个整数的集合S(里面所有的整数均不相同),请你找出最大的 d, ...
- 【Python】set 与 list ——如何对列表进行去重?
在Python中,形如 {1,2,3,4,5} 这样的数据类型叫做"集合",外形酷似列表list [1,2,3,4,5] 但是集合与列表有很多区别,具体表现在以下几方面: List ...
- 18_MySQL之HAVING字句的使用
本节涉及的sql语句: -- HAVING -- 错误示例 SELECT deptno FROM t_emp WHERE AVG(sal)>=2000 GROUP BY deptno; 因为wh ...
- node_puppeteer无界爬虫
环境:node----v14.5.0 vscode----2019 依赖库 (需要自行设置好目录结构,否则会报目录错误) const puppeteer = require("puppete ...
- .NET gRPC 核心功能初体验,附Demo源码
gRPC是高性能的RPC框架, 有效地用于服务通信(不管是数据中心内部还是跨数据中心). 由Google开源,目前是一个Cloud Native Computing Foundation(CNCF)孵 ...
- 学习一下 SpringCloud (五)-- 配置中心 Config、消息总线 Bus、链路追踪 Sleuth、配置中心 Nacos
(1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...
- SpringBoot(十一): Spring Boot集成Redis
1.在 pom.xml 中配置相关的 jar 依赖: <!-- 加载 spring boot redis 包 --> <dependency> <groupId>o ...
- 后端程序员之路 38、Scala入门
Scala 是 Scalable Language 的简写,是一门多范式的编程语言. 语言特性:1.面向对象,所有值都是对象,类可以继承和组合:2.函数式,支持闭包,支持柯里化等等:3.静态类型,支持 ...