Spacy - 标记带引号的字符串

2024-03-13

我正在使用 spacy 2.0 并使用带引号的字符串作为输入。

示例字符串

"The quoted text 'AA XX' should be tokenized"

并期望提取

[The, quoted, text, 'AA XX', should, be, tokenized]

然而,我在实验时得到了一些奇怪的结果。名词 chunks 和 ents 失去了其中一个引语。

import spacy
nlp = spacy.load('en')
s = "The quoted text 'AA XX' should be tokenized"
doc = nlp(s)
print([t for t in doc])
print([t for t in doc.noun_chunks])
print([t for t in doc.ents])

Result

[The, quoted, text, ', AA, XX, ', should, be, tokenized]
[The quoted text 'AA XX]
[AA XX']

满足我的需求的最佳方式是什么


当你could修改标记生成器并添加您自己的自定义前缀、后缀和中缀规则(排除引号),我不确定这是这里的最佳解决方案。

对于您的用例,添加一个可能更有意义成分 https://spacy.io/usage/processing-pipelines#custom-components在调用标记器、解析器和实体识别器之前,将(某些)带引号的字符串合并到一个标记中的管道。要实现此目的,您可以使用基于规则的Matcher http://spacy.io/usage/linguistic-features#rule-based-matching并找到由 包围的标记组合'。以下模式查找一个或多个字母数字字符:

pattern = [{'ORTH': "'"}, {'IS_ALPHA': True, 'OP': '+'}, {'ORTH': "'"}]

交互式匹配器演示中的模式。要进行合并,您可以设置Matcher,添加模式并编写一个函数,该函数接受Doc对象,提取匹配的跨度并通过调用它们将它们合并为一个标记.merge method.

import spacy
from spacy.matcher import Matcher

nlp = spacy.load('en')
matcher = Matcher(nlp.vocab)
matcher.add('QUOTED', None, [{'ORTH': "'"}, {'IS_ALPHA': True, 'OP': '+'}, {'ORTH': "'"}])

def quote_merger(doc):
    # this will be called on the Doc object in the pipeline
    matched_spans = []
    matches = matcher(doc)
    for match_id, start, end in matches:
        span = doc[start:end]
        matched_spans.append(span)
    for span in matched_spans:  # merge into one token after collecting all matches
        span.merge()
    return doc

nlp.add_pipe(quote_merger, first=True)  # add it right after the tokenizer
doc = nlp("The quoted text 'AA XX' should be tokenized")
print([token.text for token in doc])
# ['The', 'quoted', 'text', "'AA XX'", 'should', 'be', 'tokenized']

对于更优雅的解决方案,您还可以将组件重构为可重用类,在其中设置匹配器__init__方法 (请参阅文档 https://spacy.io/usage/processing-pipelines#custom-components举些例子)。

如果您首先在管道中添加组件,则所有其他组件(例如标记器、解析器和实体识别器)将只能看到重新标记化的组件Doc。这也是为什么您可能想要编写更具体的模式,仅合并您关心的某些带引号的字符串。在您的示例中,新的令牌边界improve预测 - 但我也可以想到许多其他情况,但它们没有,特别是如果引用的字符串更长并且包含句子的重要部分。

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

Spacy - 标记带引号的字符串 的相关文章

随机推荐

  • Django url 模板标签添加绝对文件路径

    我遇到一个问题 我的 url django 模板标记将文件路径添加到生产中的网址 这不会在我的本地开发计算机上复制 通过 urls py 设置 url about us views about us name about us 在生产中 我
  • 创建一个简单的用户界面来访问 Oracle 数据库

    这是我所拥有的 1 给我一个简单的sql文件 它创建表并用数据填充它们 2 一个简单的 sql 文件 其中包含我编写的用于显示 操作表的 PL SQL 过程 目标是创建某种用户界面 允许学生登录 查看成绩单 退出课程等 我正在使用sqlpl
  • 网络共享文件夹上的 GIT 存储库中的并发性

    我想要一个存储在 Windows 网络共享上的裸 git 存储库 我使用linux 并使用CIFS挂载了上述网络共享 我的同事使用 Windows XP 并将网络共享自动安装 以某种方式从 ActiveDirectory 作为网络驱动器 我
  • PHP + PDO:如果参数为空则绑定 null

    我正在尝试这个 并且所有 PoST var 在用户发送之前都会被处理 无需担心 SQL 注入 stmt con gt prepare sql stmt gt bindParam 1 this gt getPes cdpessoa stmt
  • HTML2PDF 无法识别表格的大小

    我正在使用 Yii Extension 开发的网页中工作 并且使用 HTML2PDF 扩展来生成 PDF http html2pdf fr http html2pdf fr 虽然 PDF 生成得很好 但它似乎无法识别我的表格大小 我为一行或
  • FAT32 每个目录的文件数限制

    我目前正在尝试在 Xilinx Kintex 7 卡上用 C 语言编写 FAT 系统 它配备了 MicroBlaze 我已经成功创建了大部分所需的功能 我面临的问题是关于文件夹的总容量 我在网上读到 在 FAT32 中 一个文件夹应该能够包
  • 将 Resharper 测试运行器与 Jasmine 2.0 结合使用

    我正在尝试将 VS2013 中的 Resharper v8 2 测试运行程序与 Jasmine 2 一起使用 但在 beforeEach 调用 全局 时遇到问题 该规范文件有一个对 SpecHelper js 的 脚本引用 该引用调用了 b
  • 从 Kickstarter 项目中抓取文本不会返回任何结果

    我正在尝试从 Kickstarter 项目网页中抓取项目的主要文本 我有以下代码 适用于第一个 URL 但不适用于第二个和第三个 URL 我想知道是否可以轻松修复我的代码而无需使用其他软件包 url https www kickstarte
  • 数组放置新需要缓冲区中未指定的开销?

    5 3 4 expr new C 11 Feb 草案给出了示例 new 2 f T 5 结果调用operator new sizeof T 5 y 2 f 这里 x和y是非负未指定值 表示数组分配开销 的结果新表达将从返回的值中抵消此金额o
  • Flash、Flex、Adobe Air、Java FX 和 Silverlight 到底有什么用?

    Flash Flex Adobe Air Java FX 和 Silverlight 到底有什么用 为什么我会选择其中之一而不是另一个 Java Applet 和 ActiveX 控件发生了什么 哦 AJAX 在哪里适合这一切呢 拉斯洛相关
  • pylint 找不到 QWidget 和 QApplication

    import sys from PyQt5 QtWidgets import QApplication QWidget app QApplication sys argv window QWidget window setGeometry
  • 2D char Array 和 char** 之间的区别(OR、3D char Array 和 char*** 等)

    首先 我已经回顾过这些 多维数组在内存中是如何格式化的 https stackoverflow com questions 2565039 how are multi dimensional arrays formatted in memo
  • Phonegap 屏幕因 AdMob 动画而闪烁

    一位用户报告说 当 admob 广告有动画时 应用程序的 html 视图会 闪烁 这是他录制的一个小视频 http www youtube com watch v gQ7yxzpqfDA http www youtube com watch
  • 从同一类中的另一个构造函数调用构造函数

    我有一个有 2 个构造函数的类 public class Lens public Lens string parameter1 blabla public Lens string parameter1 string parameter2 w
  • 为什么Django的Meta是一个旧式类?

    我注意到在 Django 模型中 有一个class Meta这对模型做了一些额外的定义 我的问题是 为什么这是一个老式的课程 即不子类化object 这是有原因的还是这只是一种习俗 我可以在我的项目中将其作为新式课程吗 我相信没有真正的原因
  • UITableView 延迟图像加载,图像在表格停止滚动后出现

    我使用 NSUrlConnection 为 UITableView 实现了延迟图像加载 这一切都运行得非常好 当我打开桌子时 等待一秒钟 在 3G 上 我会自动获取图像 但是 当我滚动时 表格会加载新单元格 启动 NSURLConnecti
  • Neo4j - 按相关性排序

    我想按 Neo4j 中的相关性对返回的数据进行排序 就我的目的而言 相关性可以简化为 我正在搜索的单词的索引 其中索引越低 相关性越高 Example 我有这三个节点 node Label PROD properties name Bear
  • 使用 java 泛型迭代枚举值

    我试图找到一种在使用泛型时迭代枚举值的方法 不确定如何执行此操作或是否可能 下面的代码说明了我想要做的事情 注意代码T values 在以下代码中无效 public class Filter
  • Javascript:用户完成滚动后执行操作

    我正在想办法做到这一点 我有一个盒子清单 每个盒子都是关于150px高的 我正在使用 javascript 和 jquery 并希望在用户向下滚动页面后 页面将自动滚动 以便框与页面的其余部分对齐 也就是说 如果用户滚动并且 y页面位置不能
  • Spacy - 标记带引号的字符串

    我正在使用 spacy 2 0 并使用带引号的字符串作为输入 示例字符串 The quoted text AA XX should be tokenized 并期望提取 The quoted text AA XX should be tok