在 NLTK 中使用斯坦福 NER Tagger 提取人员和组织列表

2024-02-28

我正在尝试使用 Python NLTK 中的斯坦福命名实体识别器 (NER) 提取人员和组织的列表。 当我跑步时:

from nltk.tag.stanford import NERTagger
st = NERTagger('/usr/share/stanford-ner/classifiers/all.3class.distsim.crf.ser.gz',
               '/usr/share/stanford-ner/stanford-ner.jar') 
r=st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
print(r) 

输出是:

[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'),
('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'),
('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'LOCATION')]

我想要的是从此列表中提取以下形式的所有个人和组织:

Rami Eid
Sony Brook University

我尝试遍历元组列表:

for x,y in i:
        if y == 'ORGANIZATION':
            print(x)

但此代码每行仅打印每个实体一个:

Sony 
Brook 
University

真实的数据在一句话中可能有多个组织、多个人,如何在不同实体之间进行限制?


感谢link https://stackoverflow.com/questions/13765349/multi-term-named-entities-in-stanford-named-entity-recognizer由 @Vaulstein 发现,很明显,训练有素的斯坦福标注器是分布式的(至少在 2012 年)不分块命名实体. From 接受的答案 https://stackoverflow.com/a/13781588/699305:

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

您有以下选择:

  1. 收集具有相同标记的单词;例如,所有相邻的单词都被标记PERSON应被视为一个命名实体。这很简单,但当然有时它会组合不同的命名实体。 (例如。New York, Boston [and] Baltimore是关于三个城市,而不是一个。)Edit:这就是阿尔瓦斯代码在接受的答案中所做的事情。请参阅下面的更简单的实现。

  2. Use nltk.ne_chunk()。它不使用斯坦福识别器,但它使用块实体。 (它是 IOB 命名实体标记器的包装器)。

  3. 找出一种方法,根据斯坦福标记器返回的结果进行自己的分块。

  4. 针对您感兴趣的领域训练您自己的 IOB 命名实体分块器(使用斯坦福工具或 NLTK 框架)。如果您有时间和资源来正确执行此操作,它可能会给您带来最佳结果。

Edit:如果您想要的只是提取连续的命名实体(上面的选项 1),您应该使用itertools.groupby:

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

If netagged_words是列表(word, type)你的问题中的元组,这会产生:

PERSON       Rami Eid
ORGANIZATION Stony Brook University
LOCATION     NY

再次注意,如果两个相同类型的命名实体紧邻出现,则此方法会将它们组合起来。例如。New York, Boston [and] Baltimore是关于三个城市,而不是一个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 NLTK 中使用斯坦福 NER Tagger 提取人员和组织列表 的相关文章

随机推荐

  • “编译器选项”-auxbase-strip 的作用是什么?

    我刚刚使用编译器选项 frecord gcc switches 编译了代码 以查看编译器自动选择哪些选项 现在我可以看到部分中的选项 GCC command line 有几个看似合理的编译器选项 但也有一个我找不到任何相关文档 什么是 au
  • 如何从 YouTube 视频中删除黑条

    YouTube 视频中出现了黑条 视频播放时看起来没什么奇怪的 我们可以删除视频中的黑色空间吗 我想删除那个黑色空间 并以我们为播放器尺寸选择的所需宽高比显示视频 目前我正在使用stander google YT 播放器API 这有意义吗
  • 如何在FabricJs中设置相对位置(oCoords)?

    我在fabricJs中有一个文本 我设置了顶部和左侧 这会将 aCoords 正确设置为这些值 但是 oCoords 不匹配 并且文本未显示在正确的位置 我怀疑我需要以某种方式设置为 oCoords 以便文本显示在画布上的右侧像素坐标 顶部
  • 如何动态更改 Jekyll _config.yml 中的变量?

    您好 我正在开发一个 Jekyll 项目 我需要在 config yml 中放置一个变量 我想从模板代码中动态更改该变量 这就是我想做的 但我无法让它发挥作用 是否有可能做到这一点 在 config yml中 my var value 在模
  • 友好 ID slug 不包含 id

    我想要这样的网址 http domain com products 454 table lamp 所以我像这样使用Friendly id extend FriendlyId friendly id slug candidates use h
  • 配置执行器端点安全

    Spring Boot Actuator 端点默认受基本 http 安全保护 可以更改为使用 Spring Security 吗 我已成功设置 Spring Security 并使用它来保护我的其他页面 I tried security b
  • 如何从nodejs中的process.environment中提取环境变量

    我已成功将条纹支付集成到我的虚拟 Nodejs 项目中 但我仍然面临一个问题 它不允许我继续前进 因为我必须将代码推送到我的 github 存储库 因此 我通过 npm 安装了 dotenv 包 并创建了一个 env 文件来存储我的条带密钥
  • 如何获取 Woocommerce 产品中的变体 ID

    我正在尝试进入一个插件 我正在编写产品的变体 ID 这是我写的 class mass public function construct add action woocommerce product after variable attri
  • Android minLines 和 maxLines 不能在同一个 TextView 中一起工作

    这里我只有 1 件商品ListView我展示了两个不同的TextViews末尾有不同颜色的ListView item 但问题是我想显示每个最多 3 行TextView但如果长度为TextView是小 但如果文本很大 它效果很好 当我添加an
  • 如何确保我的 django 项目正在使用我为其创建的虚拟环境?

    我知道已经有一个与此类似的问题 但我认为我想要的答案不存在 我是 django 的新手 我已经使用 virtualenv 和 django 项目创建了一个虚拟环境 但是我们如何知道我的项目正在使用虚拟环境的包而不是使用全局包 请给我一些详细
  • 在 Episerver 中截断 Xhtmlstring

    我需要获得截断的 Xhtmlstring 的 html 友好版本 因为截断时标签结尾可能会被截断 关于如何实现这一目标有什么想法吗 我想过先删除所有标签 然后进行剪切 但是 Episerver 内部是否有解决方案 或者这只是使用正则表达式进
  • Matplotlib 中的像素化动画

    我一直在使用 Matplotlib 的动画工具来制作动画人物 我注意到一个问题 对于具有大量帧的动画来说尤其明显 即图形的质量很快就会恶化 导致输出看起来像素化 模糊 例子 Messy grid lines pixelated output
  • 将 HTMLDocument 转换为可打印字符串

    我想将 Javascript DOM HTMLDcument 转换为可以写入文件的字符串 但是如何将 HTMLDocument 的字符串转换为 xml Update如果可能的话 我希望看到应用任何动态 JavaScript 渲染后生成的 h
  • Python从文件中删除一行或多行而不修改现有内容

    我必须根据文件中的用户输入删除字符串或字符串列表 我参考了下面的链接 一切正常 删除文件中的特定行 python https stackoverflow com questions 4710067 deleting a specific l
  • Jenkinsfile 中的 Jenkins 全局环境变量

    如何在 Jenkinsfile 中调用全局环境变量 例如 如果我有一个变量 name credentialsId value xxxx xxxx xxxxx xxxxxxxxx 如何在 groovy 脚本中使用它 I tried crede
  • 视差效果使元素延迟滚动

    我正在尝试复制此网站 www adidas co uk climazone 这些元素似乎只在用户滚动后轻微移动 我怎样才能实现这个目标 谢谢你 Here s DEMO http s codepen io CY5 debug vKkELx它实
  • 正则表达式匹配任何单词 - 没有非贪婪运算符

    我想将任何内容匹配到特定单词 例如 C 中的结束评论 但是 由于性能原因 我不想使用非贪婪运算符 例如 要匹配 C 注释 对于我的文件来说太慢了 有没有可能提高性能 当然可以 使用展开循环技术 http www softec lu site
  • 通过 Vagrant 在 Docker 中共享卷

    我有一个 Vagrant virtualbox 它托管一个 Docker 容器 主机有一个需要在虚拟机和容器中访问的文件夹 Host host path gt VM vagrant path gt Container docker path
  • 名称和尺寸来自 NSFont

    我试图在互联网上找到一些东西 但现在我没有答案 所以如果你能帮助我那就太好了 到目前为止 我有一个 NSFont 对象 但我想要字体的名称 如 NSString 和大小 这样我就可以输出它 就像是 NSFont fontWithName M
  • 在 NLTK 中使用斯坦福 NER Tagger 提取人员和组织列表

    我正在尝试使用 Python NLTK 中的斯坦福命名实体识别器 NER 提取人员和组织的列表 当我跑步时 from nltk tag stanford import NERTagger st NERTagger usr share sta