语言检测,文本清理,长度测量,情绪分析,命名实体识别,n字频率,词向量,主题建模
前言在本文中,我将使用NLP和Python解释如何分析文本数据并为机器学习模型提取特征 。
文章插图
【NLP中的文本分析和特征工程】
NLP(自然语言处理)是人工智能的一个领域,研究计算机和人类语言之间的交互,特别是如何编程计算机来处理和分析大量的自然语言数据 。NLP经常被应用于文本数据的分类 。文本分类是根据文本数据的内容给文本数据分配类别的问题 。文本分类最重要的部分是特征工程:从原始文本数据为机器学习模型创建特征的过程 。
在本文中,我将解释分析文本和提取可用于构建分类模型的特征的不同方法 。我将展示一些有用的Python代码,它们可以很容易地应用于其他类似的情况(只是复制、粘贴、运行),并带注释遍历每一行代码,以便复制这个示例(链接到下面的完整代码) 。
我将使用“新闻类别数据集”(链接如下),在该数据集中,你将获得从《赫芬顿邮报》获得的2012年至2018年的新闻标题,并要求你按照正确的类别对它们进行分类 。
https://www.kaggle.com/rmisra/news-category-dataset
具体来说,主要讲的是:
• 环境设置:导入包并读取数据 。
• 语言检测:了解数据属于哪种自然语言 。
• 文本预处理:文本清洗和转换 。
• 长度分析:用不同的度量方法测量 。
• 情绪分析:确定文本是积极的还是消极的 。
• 命名实体识别:带有预定义类别(如人名、组织、位置)的标记文本 。
• 词频:找出最重要的n字 。
• 字向量:把字转换成数字 。
• 主题建模:从语料库中提取主要主题 。
环境设置首先,我需要导入以下库 。
## for dataimport pandas as pd import collections import json## for plotting import matplotlib.pyplot as plt import seaborn as sns import wordcloud## for text processing import re import nltk## for language detection import langdetect ## for sentiment from textblob import TextBlob## for ner import spacy## for vectorizer from sklearn import feature_extraction, manifold## for word embedding import gensim.downloader as gensim_api## for topic modeling import gensim
数据集包含在一个json文件中,因此我将首先将其读入一个带有json包的字典列表,然后将其转换为一个pandas Dataframe 。lst_dics = []with open('data.json', mode='r', errors='ignore') as json_file: for dic in json_file: lst_dics.Append( json.loads(dic) )## print the first one lst_dics[0]
文章插图
原始数据集包含30多个类别,但出于本教程的目的,我将使用其中3个类别的子集:娱乐、政治和技术 。
## create dtfdtf = pd.DataFrame(lst_dics)## filter categories dtf = dtf[ dtf["category"].isin(['ENTERTAINMENT','POLITICS','TECH']) ][["category","headline"]]## rename columns dtf = dtf.rename(columns={"category":"y", "headline":"text"})## print 5 random rows 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()
文章插图
数据集是不平衡的:与其他新闻相比,科技新闻的比例真的很小 。这可能是建模过程中的一个问题,数据集的重新取样可能会很有用 。
现在已经设置好了,我将从清理数据开始,然后从原始文本中提取不同的见解,并将它们添加为dataframe的新列 。这个新信息可以用作分类模型的潜在特征 。
文章插图
语言检测首先,我想确保我使用的是同一种语言,并且使用langdetect包,这真的很容易 。为了举例说明,我将在数据集的第一个新闻标题上使用它:
推荐阅读
- 茶在生活中的其他用处,玫瑰花茶泡法技巧
- 把MySQL中的各种锁及其原理都画出来
- 互动直播中的前端技术——即时通讯
- 茶叶在旅行中的作用,白茶的保健功效介绍
- 敦煌月牙泉其中的水,辨证茶疗与疾病的关系
- 人的身材在一天中的什么时候最高?
- 一款强大的本地文件内容搜索软件,可搜索文件中的文字
- 图解 Go 微服务中的熔断器和重试
- 血缘关系在中国文化中的作用
- Netty 中的内存分配浅析