作者|Mauro Di Pietro 编译|VK 来源|Towards Data Science

摘要

在本文中,我将使用NLP和Python解释如何为机器学习模型分析文本数据和提取特征。

自然语言处理(NLP)是人工智能的一个研究领域,它研究计算机与人类语言之间的相互作用,特别是如何对计算机进行编程以处理和分析大量自然语言数据。

NLP常用于文本数据的分类。文本分类是根据文本数据的内容对其进行分类的问题。文本分类最重要的部分是特征工程:从原始文本数据为机器学习模型创建特征的过程。

在本文中,我将解释不同的方法来分析文本并提取可用于构建分类模型的特征。我将介绍一些有用的Python代码。

这些代码可以很容易地应用于其他类似的情况(只需复制、粘贴、运行),并且我加上了注释,以便你可以理解示例(链接到下面的完整代码)。

https://github.com/mdipietro09/DataScience_ArtificialIntelligence_Utils/blob/master/deep_learning_natural_language_processing/text_classification_example.ipynb

我将使用“新闻类别数据集”(以下链接),其中向你提供从赫芬顿邮报获得的2012年至2018年的新闻标题,并要求你使用正确的类别对其进行分类。

https://www.kaggle.com/rmisra/news-category-dataset

特别是,我将通过:

  • 环境设置:导入包并读取数据。

  • 语言检测:了解哪些自然语言数据在其中。

  • 文本预处理:文本清理和转换。

  • 长度分析:用不同的指标来衡量。

  • 情绪分析:判断一篇文章是正面的还是负面的。

  • 命名实体识别:带有预定义类别(如人名、组织、位置)的标识文本。

  • 词频:找出最重要的n个字母。

  • 词向量:把一个字转换成向量。

  • 主题模型:从语料库中提取主题。


环境设置

首先,我需要导入以下库。

## 数据
import pandas as pd
import collections
import json
## 绘图
import matplotlib.pyplot as plt
import seaborn as sns
import wordcloud
## 文本处理
import re
import nltk
## 语言检测
import langdetect
## 情感分析
from textblob import TextBlob
## 命名实体识别
import spacy
## 词频
from sklearn import feature_extraction, manifold
## word embedding
import gensim.downloader as gensim_api
## 主题模型
import gensim

数据集包含在一个json文件中,因此我将首先使用json包将其读入字典列表,然后将其转换为pandas数据帧。

lst_dics = []
with open('data.json', mode='r', errors='ignore') as json_file:for dic in json_file:lst_dics.append( json.loads(dic) )
## 打印第一个
lst_dics[0]

原始数据集包含30多个类别,但在本教程中,我将使用3个类别的子集:娱乐、政治和技术(Entertainment, Politics, Tech)。

## 创建dtf
dtf = pd.DataFrame(lst_dics)
## 筛选类别
dtf = dtf[ dtf["category"].isin(['ENTERTAINMENT','POLITICS','TECH']) ][["category","headline"]]
## 重命名列
dtf = dtf.rename(columns={"category":"y", "headline":"text"})
## 打印5个随机行
dtf.sample(5)

为了理解数据集的组成,我将通过用条形图显示标签频率来研究单变量分布(仅一个变量的概率分布)。

x = "y"
fig, ax = plt.subplots()
fig.suptitle(x, fontsize=12)
dtf[x].reset_index().groupby(x).count().sort_values(by= "index").plot(kind="barh", legend=False, ax=ax).grid(axis='x')
plt.show()

数据集是不平衡的:与其他数据集相比,科技新闻的比例确实很小。这可能是建模过程中的一个问题,对数据集重新采样可能很有用。

现在已经设置好了,我将从清理数据开始,然后从原始文本中提取不同的细节,并将它们作为数据帧的新列添加。这些新信息可以作为分类模型的潜在特征。

语言检测

首先,我想确保我使用的是同一种语言,并且使用langdetect包,这非常简单。为了举例说明,我将在数据集的第一个新闻标题上使用它:

txt = dtf["text"].iloc[0]
print(txt, " --> ", langdetect.detect(txt))

我们为整个数据集添加一个包含语言信息的列:

dtf['lang'] = dtf["text"].apply(lambda x: langdetect.detect(x) if x.strip() != "" else "")
dtf.head()

数据帧现在有一个新列。使用之前的相同代码,我可以看到有多少种不同的语言:

即使有不同的语言,英语也是主要的语言。所以我要用英语过滤新闻。

dtf = dtf[dtf["lang"]=="en"]

文本预处理

数据预处理是准备原始数据以使其适合机器学习模型的阶段。对于NLP,这包括文本清理、删除停用词、词干还原。

文本清理步骤因数据类型和所需任务而异。通常,在文本被标识化之前,字符串被转换为小写,标点符号被删除。标识化Tokenization)是将字符串拆分为字符串列表(或“标识”)的过程。

再以第一条新闻标题为例:

NLP的文本分析与特征工程相关推荐

  1. NLP中的文本分析和特征工程

    语言检测,文本清理,长度测量,情绪分析,命名实体识别,n字频率,词向量,主题建模 前言 在本文中,我将使用NLP和Python解释如何分析文本数据并为机器学习模型提取特征. NLP(自然语言处理)是人 ...

  2. delphi 停电文本数据丢失_NLP中的文本分析和特征工程

    语言检测,文本清理,长度测量,情绪分析,命名实体识别,n字频率,词向量,主题建模 前言 在本文中,我将使用NLP和Python解释如何分析文本数据并为机器学习模型提取特征. NLP(自然语言处理)是人 ...

  3. NLP之文本预处理与特征工程——停顿词与词的过滤(2)

    在NLP应用中,通常需要对文本中的停用词.出现频率很低的词汇过滤掉,这类似于特征筛选. 停顿词和低频词 停顿词:对于理解文章或者句子没有太大意义的词.这些词实际上是任何语言中最常见的词(如冠词.介词. ...

  4. ML - 贷款用户逾期情况分析5 - 特征工程2(特征选择)

    文章目录 特征选择 (判定贷款用户是否逾期) 1. IV值进行特征选择 1.1 基本介绍 1.2 计算公式 2. 随机森林进行特征选择 2.1 平均不纯度减少 mean decrease impuri ...

  5. ML - 贷款用户逾期情况分析2 - 特征工程1(数据预处理)

    文章目录 数据预处理 (判定贷款用户是否逾期) 1. 删除无用特征 2. 数据格式化 - X_date 3. 数据处理 - 类别特征 X_cate 4. 数据处理 - 其他非数值型特征 5. 数据处理 ...

  6. woe分析_特征工程中的IV和WOE详解

    1.IV的用途 IV的全称是Information Value,中文意思是信息价值,或者信息量. 我们在用逻辑回归.决策树等模型方法构建分类模型时,经常需要对自变量进行筛选.比如我们有200个候选自变 ...

  7. 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(上)

    作者:尘沙杰少.樱落.新峰.DOTA.谢嘉嘉 特征工程--文本特征上半篇! 前 言 这是一个系列篇,后续我们会按照我们第一章中的框架进行更新,因为大家平时都较忙,不会定期更新,如有兴趣欢迎长期关注我们 ...

  8. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:06 高级特征工程和NLP算法

    06 高级特征工程和NLP算法 6.1 词嵌入 6.2 word2vec基础 6.2.1 分布语义 6.2.2 定义word2vec 6.2.3 无监督分布语义模型中的必需品 6.3 word2vec ...

  9. 特征工程——文本特征

    目录 文本特征 1.expansion编码 2.consolidation编码 3.文本长度特征 4.标点符号特征 5.词汇属性特征 6.特殊词汇特征 7.词频特征 8.TF-IDF特征 9.LDA特 ...

最新文章

  1. ios(iphone/ipad)一个简单的用代码判断当前设备的方法
  2. Unicode 和 UTF-8关系
  3. 使用selector修改TextView中字体的颜色
  4. matlab 数据拟合
  5. netflix feign概述
  6. 使用FFmpeg命令行进行UDP、RTP推流(H264、TS),ffplay接收
  7. 【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程
  8. python画画加粗_Matplotlib'粗体'字体 - python
  9. mysql 驱动说明_mysql_jdbc连接说明
  10. asp.net页面事件:顺序与回传
  11. 树组件:主要配置项、属性、方法
  12. Android vs iOS vs BlackBerry: Which is the most secure holiday gift?
  13. Android TextView 跑马灯效果和 EditText 冲突解决办法
  14. 计算机软件质量保证计划示例
  15. C++编程笔记(QT)
  16. ppt模板怎样用到html中,教你如何自己制作PPT模板及使用模板方法图文介绍
  17. google谷歌广告投放被拒登 提示有恶意垃圾软件
  18. No valid Maven installation found
  19. 掌握SQL Monitoring这些特性,SQL优化通通不在话下
  20. 邮件合并批量制作邀请函

热门文章

  1. 虽不能至,然心向往之
  2. windows用户管理
  3. 通讯白名单的设置与使
  4. ionic 打包prod模式是失败原因
  5. C/C++ 调用Adobe Acrobat Reader DC实现PDF文件打印
  6. 快速查快递物流,智能筛选出中转延误单号
  7. 【浅挖一下Java包装类的缓存】
  8. 您的数据安全保镖,全方位守护企业信息,它-功不可没!
  9. MySQL开启服务失败,错误1607
  10. 理解一维数组中buf\buf[0]\buf[0]\buf四个符号的含义