【NLP自然语言处理】文本特征提取
目录
1、文本表示方法:
2、Count Vecotrs(Bag of Words词袋模型)
3、TF-IDF模型
3.1 jieba
下载结巴 :
使用结巴进行分词
3.2TF-IDF提取文本特征实例
1、文本表示方法:
- One-hot
- Bag of Words
- N-gram
N-gram与Count Vectors类似,加入了相邻单词组合成为新的单词,并进行计数。
- TF-IDF
这几种文本表示方法存在的缺陷:转换得到的向量维度很高,需要较长的训练实践;没有考虑单词与单词之间的关系,只是进行了统计。
2、Count Vecotrs(Bag of Words词袋模型)
词向量之词袋模型(BOW)详解
sklearn——CountVectorizer详
from sklearn.feature_extraction.text import CountVectorizer
#CountVectors+RidgeClassifier
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score
from sklearn.model_selection import train_test_splitdf = pd.read_csv('新建文件夹/天池—新闻文本分类/train_set.csv', sep='\t',nrows = 15000)
##统计每个字出现的次数,并赋值为0/1 用词袋表示text(特征集)
##max_features=3000文档中出现频率最多的前3000个词
#ngram_range(1,3)(单个字,两个字,三个字 都会统计
vectorizer = CountVectorizer(max_features = 3000,ngram_range=(1,3))
train_text = vectorizer.fit_transform(train_df['text'])X_train,X_val,y_train,y_val = train_test_split(train_text,df.label,test_size = 0.3)#岭回归拟合训练集(包含text 和 label)
clf = RidgeClassifier()
clf.fit(X_train,y_train)
val_pred = clf.predict(X_test)
print(f1_score(y_val,val_pred,average = 'macro'))
3、TF-IDF模型
TF-IDF 分数由两部分组成:第一部分是词语频率(Term Frequency),第二部分是逆文档频率(Inverse Document Frequency)。其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。
- TF(t)= 该词语在当前文档出现的次数 / 当前文档中词语的总数
- IDF(t)= log_e(文档总数 / 出现该词语的文档总数)
当有TF(词频)和IDF(逆文档频率)后,将这两个词相乘,就能得到一个词的TF-IDF的值。某个词在文章中的TF-IDF越大,那么一般而言这个词在这篇文章的重要性会越高,所以通过计算文章中各个词的TF-IDF,由大到小排序,排在最前面的几个词,就是该文章的关键词。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as npcorpus = ['This is the first document.','This document is the second document.','And this is the third one.','Is this the first document?',
]vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)# 得到tf-idf矩阵,稀疏矩阵表示法vectorizer.get_feature_names()X.toarray()
#最后to_array()函数返回的是每个文档中关键词的tf-idf值#将每个文档的toptf-idf值输出
word = vectorizer.get_feature_names()
#['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']weight = X.toarray()for i in range(len(weight)):w_sort = np.argsort(-weight[i])print('doc: {0}, top tf-idf is : {1},{2}'.format(corpus[i], word[w_sort[0]], weight[i][w_sort[0]]) )
from sklearn.feature_extraction.text import TfidfVectorizer
document = ["I have a pen.","I have an apple."]
tfidf_model = TfidfVectorizer().fit(document)
sparse_result = tfidf_model.transform(document) # 得到tf-idf矩阵,稀疏矩阵表示法
word = tfidf_model.get_feature_names()
word
# ['an', 'apple', 'have', 'pen']print(sparse_result) # 第0个字符串,对应词典序号为3的词的TFIDF为0.8148# 词语与列的对应关系
# '''
# (0, 3) 0.8148024746671689
# (0, 2) 0.5797386715376657
# (1, 2) 0.4494364165239821
# (1, 1) 0.6316672017376245
# (1, 0) 0.6316672017376245
# '''
3.1 jieba
TF-IDF在用之前,要经过分词处理,使用工具jieba进行分词
下载结巴 :
直接在jupyter notebook 代码栏中下载
pip install jieba
使用结巴进行分词
import jieba
text = """我是一条天狗呀!
我把月来吞了,
我把日来吞了,
我把一切的星球来吞了,
我把全宇宙来吞了。
我便是我了!"""sentences = text.split()
sent_words = [list(jieba.cut(sen0)) for sen0 in sentences ]
document= [' '.join(sen0) for sen0 in sent_words]
print(document)
# ['我 是 一条 天狗 呀 !', '我 把 月 来 吞 了 ,', '我 把 日来 吞 了 ,', '我 把 一切 的 星球 来 吞 了 ,
# ', '我 把 全宇宙 来 吞 了 。', '我 便是 我 了 !']model = TfidfVectorizer().fit(document)
print(model.vocabulary_)
# {'一条': 1, '天狗': 4, '日来': 5, '一切': 0, '星球': 6, '全宇宙': 3, '便是': 2}sparse_result = model.transform(document)
print(sparse_result)''' (0, 4) 0.7071067811865476(0, 1) 0.7071067811865476(2, 5) 1.0(3, 6) 0.7071067811865476(3, 0) 0.7071067811865476(4, 3) 1.0(5, 2) 1.0'''
3.2TF-IDF提取文本特征实例
#TF-IDF + RidgeClassifier
import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_scoredf = pd.read_csv('新建文件夹/天池—新闻文本分类/train_set.csv', sep='\t',nrows = 15000)train_test = TfidfVectorizer(ngram_range=(1,3),max_features = 3000).fit_transform(df.text)X_train,X_val,y_train,y_val = train_test_split(train_text,df.label,test_size = 0.3)clf = RidgeClassifier()
clf.fit(X_train,y_train)
val_pred = clf.predict(X_test)
print(f1_score(y_val,val_pred,average = 'macro'))
- 这两个模型一般与机器学习模型一起使用,前者负责提取文本中的特征,机器学习模型负责预测和分类
CountVectorizer TfidfVectorizer 中文处理
【NLP自然语言处理】文本特征提取相关推荐
- NLP自然语言处理—文本分类入门
前言 NLP作为机器学习三大热门领域之一,现在的发展也是越来越完备,从2012年神经网络崛起之后,自然语言领域就迎来了春天,特别是当预训练方法横空出世之后,NLP作为最先尝到预训练甜头的先锋,可以说是 ...
- NLP自然语言处理——文本分类(CNN卷积神经网络)
文本分类是NLP自然语言处理中一项基本功能,它在新闻分类.主题分类.问答匹配.意图识别.情感分类.推断等领域都有涉及. 学习应用文本分类任务的难点有被识别语言的复杂性和评测函数的设计等,本篇将介绍一个 ...
- NLP自然语言处理——文本分类之数据集汇总
文本分类数据集汇总 名词解释 一."达观杯"文本智能处理挑战赛数据集 二.东方财富网上市公司公告数据集 2.1 获取手段:python网络爬虫.具体方法和代码见我的另一篇博客. 2 ...
- 数据分析学习总结笔记16:NLP自然语言处理与文本探索性分析
文章目录 1 引言 2 数据集 3 文本统计信息分析 4 Ngram模型探索 5 基于pyLDAvis的主题模型探索 6 绘制词云图 7 情感分析 7.1 TextBlob 7.2 Vader Sen ...
- NLP基础--文本特征提取中文分词word2vec原理
文章目录 1. 文本特征提取 1.1 词集模型 1.2 BOW(Bag of Words)词袋模型 1.3 TF-IDF 2. 中文分词 2.1 基于词典匹配的分词方法 2.1.1 正向最大匹配(MM ...
- 数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化...
全文下载链接:http://tecdat.cn/?p=28877 作者:Yunfan Zhang Twitter是一家美国社交网络及微博客服务的网站,致力于服务公众对话.迄今为止,Twitter的日活 ...
- NLP中的语言模型及文本特征提取算法
本文以基本语言模型为逻辑主线,漫谈NLP中两个核心问题,即文本表示(Text Representation)与文本特征提取(Feature Engineering).通过本文你会发现,NLP的一部分经 ...
- NLP 自然语言处理实战
前言 自然语言处理 ( Natural Language Processing, NLP) 是计算机科学领域与人工智能领域中的一个重要方向.它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和 ...
- NLP自然语言处理系列-音乐推荐系统实战 - 数据处理
NLP自然语言处理系列-音乐推荐系统实战 - 数据处理 本文进行音乐推荐系统案例实战,对音乐数据集进行数据清洗和特征提取,基于矩阵分解进行音乐推荐. 数据处理 读取音乐数据集,统计数据指标,选择文本信 ...
- 自然语言处理——文本分类综述
最近在学习文本分类,读了很多博主的文章,要么已经严重过时(还在一个劲介绍SVM.贝叶斯),要么就是机器翻译的别人的英文论文,几乎看遍全文,竟然没有一篇能看的综述,花了一个月时间,参考了很多文献,特此写 ...
最新文章
- 此文一出,从此无需再熬夜等待
- SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10.50.1600
- 垃圾回收(GC)浅谈
- 作坊的反思-----走出软件作坊:三五个人十来条枪 如何成为开发正规军(四十)...
- 以太网端口类型和可插拔模块揭密
- OpenShift安装
- 特性和混入不是面向对象的
- python怎么筛选excel数据_【In Action】工具-2-用Excel三分钟才能完成的复杂筛选,python十秒完成...
- idea2020.1使用Lombok注解,点击运行项目提示找不到get,set方法?
- mysql开启远程访问权限
- 机器学习:分类算法SVM(支持向量机)
- 如何在chrome加载.ctx文件(亲测可用,只需3步)
- 计算机实战项目之 [含论文+任务书+中期检查表+答辩PPT+源码等]基于javaweb宠物领养网站
- 芝麻授权 java调用_手机浏览器怎么调用支付宝进行用户授权呢?
- 幼儿的健脑菜谱:椰子鸡汤
- js-最常用的js表单校验1
- 什么是运动控制,工业控制与自动化领域中运动控制器的作用是什么?- 顶控科技
- Xilinx ISE系列教程(2):LED点灯工程、仿真、bit下载和mcs固化
- Vue 实现展开折叠效果
- 杰奇采集分页 php,修改杰奇1.7模板 给章节内容添加分页