命名实体识别 (NER)

发布日期:2026-07-19 09:21:02  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-19 09:21:02  
0

介绍

在本指南中,您将了解一种称为命名实体识别(或“NER”)的高级自然语言处理技术。

NER 是一项 NLP 任务,用于识别文本中的重要命名实体,例如人物、地点、组织、日期或任何其他类别。它可以单独使用,也可以与主题识别一起使用,并为内容添加大量语义知识,使我们能够理解任何给定文本的主题。

让我们开始加载所需的库和模块。

加载所需的库和模块

      import nltk
from nltk.tokenize import word_tokenize
from collections import Counter
nltk.download('wordnet')  #download if using this module for the first time
from nltk.stem import WordNetLemmatizer
from nltk.corpus import stopwords
nltk.download('stopwords')    #download if using this module for the first time
from nltk.tokenize import word_tokenize
from nltk import word_tokenize, pos_tag, ne_chunk
nltk.download('words')
nltk.download('averaged_perceptron_tagger')
nltk.download('punkt')
nltk.download('maxent_ne_chunker')
    

我们将在本指南中使用以下文本:

      textexample = "Avengers: Endgame is a 2019 American superhero film based on the Marvel Comics superhero team the Avengers, produced by Marvel Studios and distributed by Walt Disney Studios Motion Pictures. The movie features an ensemble cast including Robert Downey Jr., Chris Evans, Mark Ruffalo, Chris Hemsworth, and others. (Source: wikipedia)."
print(textexample)
    

输出:

      Avengers: Endgame is a 2019 American superhero film based on the Marvel Comics superhero team the Avengers, produced by Marvel Studios and distributed by Walt Disney Studios Motion Pictures. The movie features an ensemble cast including Robert Downey Jr., Chris Evans, Mark Ruffalo, Chris Hemsworth, and others. (Source: wikipedia).
    

词语标记

第一步是将文本标记为句子,这在下面的第一行代码中完成。第二行对句子进行单词标记,而第三行打印标记后的句子。

      sentences = nltk.sent_tokenize(textexample)
tokenized_sentence = [nltk.word_tokenize(sent) for sent in sentences]
tokenized_sentence
    

输出:

      ['Avengers'
    

词性 (POS) 标记

词性标注,也称为语法标注,是根据单词的定义和上下文,将文本中的单词标记为与特定词性相对应的过程。下面的代码行获取标记化的文本并将其传递给“nltk.pos_tag”函数以创建其 POS 标注。

      pos_tagging_sentences = [nltk.pos_tag(sent) for sent in tokenized_sentence]
    

让我们将这两个步骤合并为一个函数并分析输出。下面的第一到第四行代码创建了对文本进行标记并执行 POS 标记的函数。第五行代码将该函数运行到我们的文本中,而第六行打印输出。

      def preprocess(text):
    text = nltk.word_tokenize(text)
    text = nltk.pos_tag(text)
    return text

processed_text = preprocess(textexample)
processed_text
    

输出:

      ('Avengers'
    

上面的输出显示每个标记都已标记为其词性。下面解释了一些常见的缩写:

  • DT:限定词
  • IN: 介词/从属连词
  • JJ:形容词‘大’
  • JJR:形容词,比较级‘更大’
  • JJS:形容词,最高级‘最大’
  • LS:列表标记
  • NN:名词,单数‘desk’
  • NNS:名词复数‘desks’
  • NNP:专有名词,单数“Harrison”
  • NNPS:专有名词,复数“美国人”
  • PRP:人称代词“我”、“他”、“她”
  • RB:副词非常、默默地,
  • UH:感叹词
  • VB:动词,基本形式为
  • VBD:动词,过去式

分块

完成词性标注后,我们将进行分块。简单来说,分块的作用是在标注的基础上为句子添加更多结构。输出结果是将单词分组,称为“块”。

我们将对处理后的文本进行分块,这在下面的第一行代码中完成。第二到第四行代码进行分块,在我们的示例中,我们将只查看名词进行 NER 标记。

      res_chunk = ne_chunk(processed_text)

for x in str(res_chunk).split('\n'):
    if '/NN' in x:
        print(x)
    

输出:

      Avengers/NNS
      Endgame/NN
      superhero/NN
      film/NN
      (ORGANIZATION Marvel/NNP Comics/NNP)
      superhero/NN
      team/NN
      (ORGANIZATION Avengers/NNPS)
      (PERSON Marvel/NNP Studios/NNP)
      (PERSON Walt/NNP Disney/NNP Studios/NNP)
      Motion/NNP
      Pictures/NNP
      movie/NN
      cast/NN
      (PERSON Robert/NNP Downey/NNP Jr./NNP)
      (PERSON Chris/NNP Evans/NNP)
      (PERSON Mark/NNP Ruffalo/NNP)
      (PERSON Chris/NNP Hemsworth/NNP)
      others/NNS
      (PERSON Source/NN)
      wikipedia/NN
    

让我们探索一下上述输出。我们观察到单词标记“Endgame”、“film”和“Source”被标记为单数名词“NN”,而“Avengers”和“others”等标记被标记为复数名词“NNS”。另外,请注意,演员的名字“Robert”、“Evans”等已被标记为专有名词“NNP”。

结论

在本指南中,您了解了如何使用 nltk 执行命名实体识别。您了解了执行 NER 分析所需的三个重要阶段:词标记化、词性标记和分块。

要了解有关使用 Python 进行自然语言处理的更多信息,请参阅以下指南:

  1. 自然语言处理 - 使用文本数据的机器学习
  2. 自然语言处理 – 文本解析
  3. 自然语言处理 - 主题识别
  4. 使用词云可视化文本数据
以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据