随着企业业务和市场价值的扩展,从商业数据中获取重要和有意义的洞察变得至关重要。另一方面,从逐渐增加的非结构化文本数据中获取洞察可能是一项繁琐且耗时的任务。缺乏结构化自然语言格式的文本数据在生成有意义的趋势、模式和洞察以获取商业价值方面可能非常贫乏。在这里,文本分析通过汇总自然语言处理、统计和语言学技术来处理大量非结构化文本数据的知识库,为成长中的组织和企业节省了时间。
命名实体识别是文本分析和文本挖掘中非常关键的技术,通过识别位置、组织、人员等实体,并把这些实体分类到几个预定义的类别中,从而从文本数据中提取重要信息。
在本教程中,将探讨如何执行命名实体识别,并从文本语料库中获得有意义的洞察。将涵盖以下内容:
如果尚未安装,请安装以下依赖项!在项目目录中,请确保添加一个名为‘requirements.txt’的文本文件,并按顺序添加以下库:
NLTK
SpaCy
word cloud
NumPy
Pandas
Plotly
Matplotlib
Seaborn
最后,在保存了包含上述依赖项的requirements.txt文件后,请确保在终端中运行此命令:
pip install -r requirements.txt
在加载数据之前,让先导入必要的库。
import numpy as np
import pandas as pd
import re
import nltk
import spacy
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use(‘ggplot’)
import plotly.offline as po
from plotly.offline import init_notebook_mode,iplot
import plotly.graph_objs as go
from plotly import tools
init_notebook_mode(connected=True)
import plotly.figure_factory as ff
import os
print(os.listdir(‘../input/’))
现在让加载数据集!数据集包含了3150条亚马逊客户对Alexa Echo、Firestick、Echo Dot等的评价。
data = pd.read_csv('../input/amazon-alexa-reviews/amazon_alexa.tsv', delimiter='t')
data.shape
data.head(10)
让对输出进行一个基本检查:
在进行任何分析之前,预处理文本是极其关键的。健康的文本对于获得洞察非常有用,而非结构化的文本则会带来各种问题和不良结果/洞察。根据数据科学家的说法,“进行数据分析所需的60%的艰苦工作是在预处理和清理数据时完成的”。
首先,来检查一些事情:
data.info()
data.describe()
data.isnull().any()
可以看到数据中没有缺失/空值!非常棒。
现在让进行一些文本预处理:
nltk.download('stopwords')
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
corpus= []
for i in range(0,3150):
review = re.sub('[^a-zA-Z]', "", data['verified_reviews'][i])
review = review.lower()
review = review.split()
ps = PorterStemmer()
review = [ps.stem(word) for word in review if not word in set(stopwords.words('english'))]
review = "".join(review)
corpus.append(review)
太好了!文本现在干净了,准备好进行数据分析了。
在开始之前,让给所有读者简要介绍一下SpaCy。
SpaCy是一个开源的自然语言处理库,被认为是所有NLP库中最为流畅和快速的,用于文本分析任务。它内置了命名实体识别模型,帮助数据科学家在短时间内生成分析报告,因此他们不必花费数小时在预处理上,可以继续进行建模部分!
现在让看看如何使用SpaCy进行NER!
import spacy
nlp = spacy.load('en')
def text_entities(text):
doc = nlp(text)
for entity in doc.ents:
print(f'Entity: {ent}, Label: {ent.label_}, {spacy.explain(ent.label_)}')
for i in range(15,50):
sentence = data['verified_reviews'][i]
doc = nlp(sentence)
spacy.displacy.render(doc, style='ent', jupyter=True)
让看看输出:
希望在探索命名实体识别及其工作原理时有所收获。在本文中,成功地学习了如何: