51. 命名实体识别(NER)
命名实体识别(NER)是从文本中识别和提取命名实体(如人名、地点、组织等)的任务。你可以使用 spaCy 或 NLTK 等库自动进行NER。
示例:从新闻文章中提取命名实体
假设你有一组新闻文章的数据集,想要提取每篇文章中提到的命名实体。下面是如何使用 spaCy 自动完成这项任务的示例:
import spacy
# 加载预训练的英文模型
nlp = spacy.load("en_core_web_sm")
# 新闻文章
articles = [
"苹果公司计划下个月推出一款新的 iPhone 型号。该公司的首席执行官 Tim Cook 在加州库比蒂诺举行的新闻发布会上宣布了这一消息。",
"联合国在纽约市举行了一场气候变化峰会。来自包括美国、中国和印度在内的各国领导人出席了这一活动。"
]
# 对每篇文章进行命名实体识别
for article in articles:
doc = nlp(article)
print("文章:", article)
print("命名实体:")
for entity in doc.ents:
print(f"- {
entity.text} ({
entity.label_})")
print("---")
这段代码通过使用 spacy.load()
方法从 spaCy 加载预训练的英文模型。然后定义了一组新闻文章。它对每篇文章进行迭代,并使用加载的 spaCy 模型处理文章文本创建了一个 Doc
对象。 doc.ents
属性提供了对文章中识别到的命名实体的访问。它打印了每个命名实体的文本和标签。打印出了从每篇文章提取的命名实体,以及文章文本本身。
52. 文本摘要
文本摘要是在保留关键信息的同时,生成较长文本的简洁摘要的任务。你可以使用 gensim 或 sumy 等库自动进行文本摘要。
示例:对新闻文章进行摘要
假设你有一组新闻文章的数据集,想要为每篇文章生成摘要。下面是如何使用 gensim 自动完成这项任务的示例:
from gensim.summarization import summarize
# 新闻文章
articles = [
"政府宣布了一项新的经济刺激计划,以提振国家经济。该计划包括减税、基础设施投资和支持小企业。专家认为这些措施将有助于创造就业机会和刺激经济增长。然而,一些批评人士认为这项计划可能不足以解决经济面临的长期挑战。",
"一家主要的科技公司在一场备受期待的活动中推出了其最新的智能手机型号。新设备具有更大的屏幕、改进的摄像功能和提高的性能。该公司声称该手机将改变智能手机行业,并树立新的创新标准。该设备的预订已经开始,预计将于下个月上市。"
]
# 为每篇文章生成摘要
for article in articles:
summary = summarize(article, ratio=0.3)
print("文章:", article)
print("摘要:", summary)
print("---")
这段代码定义了一组新闻文章。然后它对每篇文章进行迭代,并使用 gensim.summarization.summarize()
函数生成摘要。 ratio
参数指定了摘要相对于原始文本的长度。在这个示例中,摘要将大约是原始文章长度的 30%。生成的摘要与原始文章文本一起打印出来。
53. 文本分类
文本分类是将预定义的类别或标签分配给给定文本的任务。你可以使用机器学习算法和类似 scikit-learn 的库自动进行文本分类。
示例:将电子邮件消息分类为垃圾邮件或正常邮件
假设你有一组标记为垃圾邮件或正常邮件(非垃圾邮件)的电子邮件消息的数据集,并且想要构建一个文本分类模型来自动分类新的电子邮件消息。下面是如何使用 scikit-learn 自动完成这项任务的示例:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
# 电子邮件消息及其标签
emails = [
("购买廉价的伟哥!", "垃圾邮件"),
("明天上午 10 点重要会议", "正常邮件"),
("恭喜!你赢得了一个奖品!", "垃圾邮件"),
("嘿,你好吗?", "正常邮件"