栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用NLTK中的Stanford NER Tagger提取人员和组织列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用NLTK中的Stanford NER Tagger提取人员和组织列表

感谢@Vaulstein发现的链接,很显然,受过训练的Stanford标记器(至少在2012年发布) 不会对命名实体进行分块
。从接受的答案:

许多NER系统使用更复杂的标签,例如IOB标签,其中B-PERS之类的代码指示人员实体的起始位置。CRFClassifier类和功能工厂支持此类标签,
但我们当前分发的模型(截至2012年)未使用它们。

您有以下选择:

  1. 收集带有相同标签的单词;例如,所有被标记的相邻单词

    PERSON
    应一起作为一个命名实体。这很容易,但是当然有时会组合不同的命名实体。(例如
    New York, Boston [and] Baltimore
    ,大约是三个城市,而不是一个。) 编辑: 这是Alvas的代码在公认的答案中所做的事情。参见下面的简单实现。

  2. 使用

    nltk.ne_recognize()
    。它不使用斯坦福识别器,但使用大块实体。(这是一个围绕IOB的名为实体标记器的包装器)。

  3. 在斯坦福标记器返回的结果的基础上找出一种方法来进行自己的分块。

  4. 为您感兴趣的域训练自己的IOB命名实体分块器(使用Stanford工具或NLTK的框架)。如果您有足够的时间和资源来执行此操作,则可能会获得最佳效果。

编辑: 如果您只想提取连续命名实体的运行(上述选项1),则应使用

itertools.groupby

from itertools import groupbyfor tag, chunk in groupby(netagged_words, lambda x:x[1]):    if tag != "O":        print("%-12s"%tag, " ".join(w for w, t in chunk))

如果

netagged_words
(word, type)
您的问题中的元组列表,则会产生:

PERSON       Rami EidORGANIZATION Stony Brook UniversityLOCATION     NY

再次注意,如果两个相同类型的命名实体彼此相邻出现,则此方法会将它们组合在一起。例如

New York, Boston [and]Baltimore
大约三个城市,而不是一个。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638077.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号