在当今信息爆炸的时代,数据的利用变得尤为重要。如果能够正确处理这些数据,将会带来丰硕的成果。自然语言处理(NLP)中一些最重要的应用包括文本分析、词性标注、情感分析和命名实体识别。大量的文本数据包含了丰富的信息,分析这些文本数据的一个重要方面就是识别命名实体。本文将讨论如何使用Python和Spacy进行命名实体识别(NER)!
命名实体基本上是具有适当标识的现实生活中的对象,可以用适当的名称来表示。命名实体可以是地点、人物、组织、时间、物体或地理实体。例如,命名实体可能是罗杰·费德勒、本田城市、三星Galaxy S10。命名实体通常是实体实例。例如,罗杰·费德勒是网球运动员/人的实例,本田城市是汽车的实例,三星Galaxy S10是手机的实例。
Python中的命名实体识别是NLP的一个过程,它涉及识别和分类命名实体。输入原始和结构化的文本,并将命名实体分类为人、组织、地点、货币、时间等。基本上,命名实体被识别并分割到各种预定义的类别中。NER系统是使用各种语言方法、统计和机器学习方法开发的。它对项目或商业目的有很多应用。
NER模型首先识别一个实体,然后将实体归类到最合适的类别。一些常见的命名实体类型包括:
NER模型的一个重要特点是它们理解命名实体的能力取决于它们训练过的数据。NER有很多应用。NER可以用于内容分类,收集文本的各种命名实体,基于这些数据,可以理解内容主题。在学术和研究中,NER可以用来从各种文本信息中更快地检索数据和信息。在处理大量文本数据集时,NER在信息提取方面非常有帮助。
Spacy是一个开源的自然语言处理库,可以用于各种任务。它有内置的命名实体识别方法。Spacy有一个快速的统计实体识别系统。可以使用Spacy非常容易地进行NER任务。尽管通常需要为特定业务需求训练自己的数据,但Spacy模型通常对所有类型的文本数据表现良好。让开始编码,首先导入Spacy并继续。
import spacy
from spacy import displacy
NER = spacy.load("en_core_web_sm")
现在,输入要测试的样本文本。文本取自维基百科的ISRO页面。
raw_text="The Indian Space Research Organisation or is the national space agency of India, headquartered in Bengaluru. It operates under Department of Space which is directly overseen by the Prime Minister of India while Chairman of ISRO acts as executive of DOS as well."
text1= NER(raw_text)
现在,打印这个文本样本中发现的NE数据。
for word in text1.ents:
print(word.text,word.label_)
输出:
现在可以看到,这段特定文本中的所有命名实体都被提取出来了。如果面临任何问题,不知道特定NE的类型是什么,可以使用以下方法。
spacy.explain("ORG")
输出:
‘公司、机构、组织等’
spacy.explain("GPE")
输出:
‘国家、城市、州’
现在,尝试一个有趣的视觉,它直接在文本中显示NE。
displacy.render(text1,style="ent",jupyter=True)
输出:将在最后留下Kaggle链接,以便读者可以自己尝试代码。说到视觉,命名实体在文本中被正确提及,颜色对比鲜明,使数据可视化变得非常容易和简单。还有另一种视觉,它探索整个数据集。请参阅文末的Kaggle链接。
将从新闻文章中网络抓取数据,并对从那里收集的文本数据进行NER。将使用Beautiful Soup进行网络抓取。
from bs4 import BeautifulSoup
import requests
import re
现在,将使用新闻文章的URL。
URL="https://www.zeebiz.com/markets/currency/news-cryptocurrency-news-today-june-12-bitcoin-dogecoin-shiba-inu-and-other-top-coins-prices-and-all-latest-updates-158490"
html_content = requests.get(URL).text
soup = BeautifulSoup(html_content, "lxml")
现在,获取正文内容。
body=soup.body.text
现在,使用正则表达式清理文本。
body= body.replace('n', ' ')
body= body.replace('t', ' ')
body= body.replace('r', ' ')
body= body.replace('xa0', ' ')
body=re.sub(r'[^ws]', '', body)
让现在看看文本。
body[1000:1500]
‘ 在应用中查看 比特币下跌了6%,交易价格为2728815卢比,此前曾触及2900208卢比的高点。来源路透社 报道者ZeeBiz网络团队 Ravi Kant Kumar 更新于周六6月12日18:46 帕特那ZeeBiz网络工作台 相关新闻 加密货币最新新闻6月14日比特币在埃隆·马斯克的推文后引领加密货币上涨超过12%,查看以太坊、波卡点、狗狗币、柴犬和其他顶级货币的INR价格世界印度更新 比特币法律仅’
现在,继续进行命名实体识别。
text3= NER(body)
displacy.render(text3,style="ent",jupyter=True)
形成的视觉效果非常大,但有一些有趣的部分想覆盖。
命名实体识别(NER)是自然语言处理中的关键技术,可以使用Python中的各种库,如spaCy、NLTK和StanfordNLP来实现。NER Python黑带课程可能提供了深入的知识和实践技能,以使用Python库实现NER。掌握NER对于各种应用如情感分析、聊天机器人和从非结构化文本数据中提取信息都是有益的。
Q1. 什么是命名实体识别,举例说明?
A.命名实体识别(NER)是一种自然语言处理技术,它在文本中识别和分类命名实体到预定义的类别,如人、组织和地点。例如,在句子“约翰在纽约的谷歌工作”中,NER会识别“约翰”为人,“谷歌”为组织,“纽约”为地点。
Q2. 什么是基于名称的实体识别?
A. 基于名称的实体识别是一种NER,它特别关注识别和提取人或组织的命名实体。它有助于社交媒体分析或新闻文章,其中识别个人和组织很重要。
Q3. 命名实体识别的三个步骤是什么?
A. 命名实体识别的三个步骤是: