为什么 spaCy 不像斯坦福 CoreNLP 那样在标记化过程中保留单词内连字符?

2023-11-29

SpaCy版本:2.0.11

Python版本:3.6.5

操作系统:Ubuntu 16.04

我的句子样本:

Marketing-Representative- won't die in car accident.

or

Out-of-box implementation

预期代币:

["Marketing-Representative", "-", "wo", "n't", "die", "in", "car", "accident", "."]

["Out-of-box", "implementation"]

SpaCy 令牌(默认令牌生成器):

["Marketing", "-", "Representative-", "wo", "n't", "die", "in", "car", "accident", "."]

["Out", "-", "of", "-", "box", "implementation"]

我尝试创建自定义标记生成器,但它不会处理 spaCy 使用 tokenizer_exceptions 处理的所有边缘情况(代码如下):

import spacy
from spacy.tokenizer import Tokenizer
from spacy.util import compile_prefix_regex, compile_infix_regex, compile_suffix_regex
import re
nlp = spacy.load('en')
prefix_re = compile_prefix_regex(nlp.Defaults.prefixes)
suffix_re = compile_suffix_regex(nlp.Defaults.suffixes)
infix_re = re.compile(r'''[.\,\?\:\;\...\‘\’\`\“\”\"\'~]''')

def custom_tokenizer(nlp):
    return Tokenizer(nlp.vocab, prefix_search=prefix_re.search,
                                suffix_search=suffix_re.search,
                                infix_finditer=infix_re.finditer,
                                token_match=None)
nlp.tokenizer = custom_tokenizer(nlp)
doc = nlp("Marketing-Representative- won't die in car accident.")
for token in doc:
    print(token.text)

Output:

Marketing-Representative-
won
'
t
die
in
car
accident
.

我需要有人指导我采取适当的方法来做到这一点。

在上面的正则表达式中进行更改可以做到这一点或任何其他方法,或者我什至尝试了 spaCy 的基于规则的匹配器,但无法创建规则来处理两个以上单词之间的连字符,例如“开箱即用”,以便可以创建与 span.merge() 一起使用的 Matcher。

无论哪种方式,我都需要让包含单词内连字符的单词成为斯坦福 CoreNLP 处理的单个标记。


虽然没有记录在spacey 使用地点 ,

看起来我们只需要添加regex对于我们正在使用的 *fix,在本例中为 infix。

另外,看来我们可以扩展nlp.Defaults.prefixes与定制regex

infixes = nlp.Defaults.prefixes + (r"[./]", r"[-]~", r"(.'.)")

这会给你想要的结果。不需要设置默认值prefix and suffix因为我们不与这些合作。

import spacy
from spacy.tokenizer import Tokenizer
from spacy.util import compile_prefix_regex, compile_infix_regex, compile_suffix_regex
import re

nlp = spacy.load('en')

infixes = nlp.Defaults.prefixes + (r"[./]", r"[-]~", r"(.'.)")

infix_re = spacy.util.compile_infix_regex(infixes)

def custom_tokenizer(nlp):
    return Tokenizer(nlp.vocab, infix_finditer=infix_re.finditer)

nlp.tokenizer = custom_tokenizer(nlp)

s1 = "Marketing-Representative- won't die in car accident."
s2 = "Out-of-box implementation"

for s in s1,s2:
    doc = nlp("{}".format(s))
    print([token.text for token in doc])

Result

$python3 /tmp/nlp.py  
['Marketing-Representative-', 'wo', "n't", 'die', 'in', 'car', 'accident', '.']  
['Out-of-box', 'implementation']  

您可能需要修复插件正则表达式,使其对于接近所应用的正则表达式的其他类型的标记更加健壮。

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

为什么 spaCy 不像斯坦福 CoreNLP 那样在标记化过程中保留单词内连字符? 的相关文章

  • Python替换多个字符串同时支持反向引用

    有一些好方法 https stackoverflow com questions 6116978 python replace multiple strings处理 python 中的同时多字符串替换 但是 我在创建一个高效的函数来实现这一
  • 数据帧中标志切换之间的行的总和/平均值

    我有一个像这样的数据框 id power flag 0 20 0 1 25 0 2 26 1 3 30 1 4 18 0 5 30 0 6 19 0 7 21 1 8 23 0 我正在尝试获取行的平均值 总和power柱子 输出应该是这样的
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • Python多处理错误“ForkAwareLocal”对象没有属性“连接”

    下面是我的代码 我面临着多处理问题 我看到这个问题之前已经被问过 我已经尝试过这些解决方案 但它似乎不起作用 有人可以帮我吗 from multiprocessing import Pool Manager Class X def init
  • 从另一个线程调用线程中的方法,python

    如何实现线程之间的通信 我有一个线程在其中执行一些操作 然后我需要从位于主程序线程中的对象调用一个方法 并且该方法应该在主进程中执行 class Foo def help self pass class MyThread threading
  • 使用 Python 从 AWS S3 下载文件

    我尝试使用以下代码将文件从 Amazon S3 存储桶下载到本地 但收到错误消息 无法找到凭证 下面给出的是我编写的代码 from boto3 session import Session import boto3 ACCESS KEY A
  • mac安装Tensorflow出错

    我正在尝试使用以下说明在 mac 中安装 Tensorflow https www tensorflow org install https www tensorflow org install 但是当我想导入tensorflow时 我总是
  • pip 安装最新的依赖版本

    当我使用安装包时pip install e 它仅安装不满足的依赖项并忽略依赖项升级 如何在每次运行时安装最新的依赖版本pip install e 我尝试过使用pip install upgrade e 但是使用这个选项没有任何改变 我仍然得
  • python win32com.client 调整窗口大小

    我正在使用 Python 3 4 1 通过 win32com client 控制 Windows 应用程序 我可以激活它 我可以发送击键 点击等 现在我想知道是否有办法调整窗口大小并将其设置到特定位置 我找不到方法 这里有一些代码片段 所以
  • 将文件拆分为块

    我正在尝试分割格式为以下的文件 some garbage lines target G0 S0 type xy 0 108847E 02 0 489034E 04 0 108711E 02 0 491023E 04 0 108574E 02
  • 从 C++ 调用 Python 脚本并使用其输出

    我想从 C 调用 python 脚本 并希望使用该脚本生成的输出 csv 文件返回 C 我在 main 中尝试过 std string filename home abc xyz script py std string command p
  • 如何在 psycopg2 线程连接类中重新连接到 postgreSQL? SSL SYSCALL 错误导致的失败:在 Azure 中检测到 EOF?

    我们的应用程序运行良好 直到我们将 PostgreSQL 移植到 Azure 中的 Microsoft 数据库 然后 我们的应用程序会定期无故失败 并且到处都会出现 SSL SYSCALL 错误 删除等 我们已经尝试了互联网上描述的所有内容
  • 使用 pyspark awsglue 时显示 DataFrame

    如何使用 awsglue 的 job etl 显示 DataFrame 我尝试了下面的代码 但没有显示任何内容 df show code datasource0 glueContext create dynamic frame from c
  • Selenium 3 Firefox .click() 不起作用

    自从我升级到最新的 Selenium 版本后 我的 Firefox 驱动程序无法正常工作 未能通过搜索 Google Stack 找到答案 我希望这里有人能找到答案 我已经构建了一个页面对象模型 用于登录网页 单击管理站点并填写用户名 密码
  • 如果多个测试有特定异常,则停止 pytest 测试

    我想使用停止测试套件pytest exit 如果任何测试因特定异常而失败 例如 50 个测试 其中任何一个都可能在某个时刻因该异常而失败 如果这些测试中至少有 2 个测试因该异常而失败 我想停止执行 我试图保留一个全局计数器 一个固定装置s
  • Huggingface 变形金刚模块未被 anaconda 识别

    我正在使用 Anaconda python 3 7 Windows 10 我尝试通过安装变压器https huggingface co transformers https huggingface co transformers 在我的环境
  • 让 Bazel 使用 Python3 运行(语法错误)

    我正在尝试使用 Bazel 运行此代码 https github com google in silico labeling https github com google in silico labeling 这是关联的 Bazel BU
  • “char”/“character”类型的类型提示

    char 或 character 没有内置的原始类型 因此显然必须使用长度为 1 的字符串 但是为了暗示这一点并暗示它应该被视为一个字符 如何通过类型提示来实现这一点 grade chr A 一种方法可能是使用内置的 chr 函数来表示这一
  • spacy 如何使用词嵌入进行命名实体识别 (NER)?

    我正在尝试使用以下方法训练 NER 模型spaCy识别位置 人 名和组织 我试图理解如何spaCy识别文本中的实体 但我无法找到答案 从这个问题 https github com explosion spaCy issues 491在 Gi
  • TypeError:无法使用抽象方法实例化抽象类 <...>

    这是我的代码 from abc import ABC from abc import abstractmethod class Mamifiero ABC docstring for Mamifiero def init self self

随机推荐

  • android中声音转换为频率[重复]

    这个问题在这里已经有答案了 可能的重复 实时音高检测 确定通过麦克风接收到的声音的音频频率 我正在开发自己的 Android 吉他调音器 在这里我将不得不使用吉他音符频率 因此 我想知道如何在android中将通过麦克风端口传来的声音转换为
  • 在静态类中使用依赖注入

    我需要在静态类中使用依赖注入 静态类中的方法需要注入依赖项的值 以下代码示例演示了我的问题 public static class XHelper public static TResponse Execute string metodo
  • 缓冲区为空后关闭“worker”go 例程

    我想要我的 goroutine 工作人员 ProcessToDo 在下面的代码中 等待所有 排队 工作处理完毕后再关闭 工作例程有一个 待办事项 通道 缓冲 通过该通道将工作发送给它 它有一个 完成 通道来告诉它开始关闭 文档称 如果满足多
  • 如何在JAVA中将纪元转换为mySQL时间戳

    如何获取mySQL时间戳格式mySQLtimestamp long epochNow System currentTimeMillis 1000 long epochWeek 604800 long date7daysAgo epochNo
  • 对 mongoose 3.x 填充文档进行排序的正确语法

    我有两个 MongoDB 集合Customer and User in 1 1关系 我正在尝试使用查询两个文档猫鼬种群并对它们进行排序User name 下面没有任何工作 我的猫鼬是 3 8 19 Customer find populat
  • PHP array_search 多维数组并返回键

    我试图在多维数组中搜索一个值 下面只是大数组的一部分 并获取该值的密钥 但我无法自己管理它 这是我尝试过的 Array 0 gt Array 0 gt SMEG 30 1 gt ALES 2 gt 3 gt 4 gt 5 gt ALES 6
  • 使用sklearn load_files()从png加载图像作为数据

    我目前正在使用 sklearn 构建一个简单的图像识别器 我需要使用 load files directory 从该目录中的子文件夹加载图像 它正确地获取了目标值 但数据属性不是简单的像素值 我假设我需要设置编码参数来考虑图像文件 但找不到
  • 整合ivy和doxygen

    有没有办法整合ivy和doxygen 我想通过 ivy 发布我的 doxygen 文档 可以吗 如果是的话怎么办 有文档说明如何操作吗 我不是 doxygen 用户 我假设您正在使用它来创建文档的 zip 存档 Ivy 可用于发布任何类型的
  • SwiftUI:了解使用常量与 @Binding 初始值设定项时的 .sheet / .fullScreenCover 生命周期

    我试图了解如何以及何时调用 sheet 和 fullScreenCover 初始值设定项 下面是一个最小的可重现示例 其中第一个屏幕有 3 个彩色矩形 而 SecondView 通过 fullScreenCover 显示 有 1 个矩形 该
  • 如何将方法作为回调传递给 Windows API 调用(后续)?

    这篇文章是相关文章的后续question发布于此处Ran The 接受的答案坚持使用通常的普通旧功能 这段摘录特别引起我的注意 实例方法有一个额外的隐式参数 其中包含 实例引用 即 Self 坚信应该有一种方法来使用一种 参数 适配器 重新
  • 如何在onsenui中使用多个html文件

    在 OnsenUI 中 它说 您还可以在同一页面中定义页面内容 而不是在单独的文件中创建 index html 和 services html 我不喜欢将整个应用程序放在一个 html 文件中 因此我尝试将每个模板放入一个单独的文件中 这是
  • 迭代器和列表迭代器的区别?

    Iterator ite Set iterator Iterator ite List iterator ListIterator listite List listIterator 我们可以用Iterator遍历一个Set or a Li
  • Folium Choropleth Map 呈现灰色阴影而不是专题地图的真实颜色

    我遇到的问题是我的分区统计图无法正确渲染 我有大量芝加哥市的叫车数据 我想按人口普查区创建分区统计图 我查了一下key ongeojson 文件中的特征为 geoid10 并确保拾取人口普查区域全部匹配 我还确保geojson文件和data
  • 你什么时候会看到 Jquery 美元符号出现在某个名称的末尾

    你什么时候会看到 jQuery 美元符号出现在某些名称的末尾 例如plot or plot getName 当美元符号位于这样的名称末尾时 这意味着什么 就其本身而言 什么也没有 这 只是标识符中的另一个合法字符 仅此而已 无论您使用什么代
  • 如何使用OpenSSL解密Java AES加密数据?

    我正在连接到一个旧版 Java 应用程序 该应用程序无法更改 该应用程序使用 AES 加密数据 以下是原始 Java 代码实例化 AES 密码的方式 SecretKeySpec skeySpec new SecretKeySpec key
  • 从 dask 读取并行 excel 表

    您好 到目前为止我遇到的使用 dask 的所有示例都有 使用 dask read csv 读取文件夹中的多个 csv 文件 称呼 如果我提供了一个包含多个选项卡的 xlsx 文件 我可以使用任何内容吗 在DASK并行阅读它们 附 我正在使用
  • 如何在给定包中查找带注释的方法?

    我有一个简单的方法标记注释 类似于第 35 项中的第一个示例 有效的Java 第二版 Marker annotation for methods that are called from installer s validation scr
  • didOutputSampleBuffer 委托未调用

    我的代码中的 didOutputSampleBuffer 函数没有被调用 我不知道为什么会这样 这是代码 import UIKit import AVFoundation import Accelerate class ViewContro
  • 梯度大小的单位和限制是什么?

    图像梯度大小的单位和限制是什么 例如 我知道如何获取图像的梯度大小 见下文 以及由此产生的Mat将包含源图像中每个边缘的边缘强度 大小 但是 边缘强度 幅度 的单位是什么 梯度方向以度 弧度为单位 大小的单位是什么 OpenCV 中的 Ma
  • 为什么 spaCy 不像斯坦福 CoreNLP 那样在标记化过程中保留单词内连字符?

    SpaCy版本 2 0 11 Python版本 3 6 5 操作系统 Ubuntu 16 04 我的句子样本 Marketing Representative won t die in car accident or Out of box