为什么 CoreNLP ner tagger 和 ner tagger 将分开的数字连接在一起?

2023-12-23

这是代码片段:

In [390]: t
Out[390]: ['my', 'phone', 'number', 'is', '1111', '1111', '1111']

In [391]: ner_tagger.tag(t)
Out[391]: 
[('my', 'O'),
 ('phone', 'O'),
 ('number', 'O'),
 ('is', 'O'),
 ('1111\xa01111\xa01111', 'NUMBER')]

我期望的是:

Out[391]: 
[('my', 'O'),
 ('phone', 'O'),
 ('number', 'O'),
 ('is', 'O'),
 ('1111', 'NUMBER'),
 ('1111', 'NUMBER'),
 ('1111', 'NUMBER')]

正如您所看到的,人工电话号码由 \xa0 连接,据说这是一个不间断的空格。我可以通过设置 CoreNLP 来分离它而不更改其他默认规则吗?

ner_tagger 定义为:

ner_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='ner')

TL;DR

NLTK 将标记列表读入字符串中,然后将其传递到 CoreNLP 服务器。 CoreNLP 重新标记输入并将类似数字的标记与\xa0(不间断空格)。


In Long

让我们浏览一下代码,如果我们看一下tag()函数来自CoreNLPParser,我们看到它调用了tag_sents()函数并在调用之前将输入的字符串列表转换为字符串raw_tag_sents()这使得CoreNLPParser要重新标记输入,请参阅https://github.com/nltk/nltk/blob/develop/nltk/parse/corenlp.py#L348 https://github.com/nltk/nltk/blob/develop/nltk/parse/corenlp.py#L348:

def tag_sents(self, sentences):
    """
    Tag multiple sentences.
    Takes multiple sentences as a list where each sentence is a list of
    tokens.

    :param sentences: Input sentences to tag
    :type sentences: list(list(str))
    :rtype: list(list(tuple(str, str))
    """
    # Converting list(list(str)) -> list(str)
    sentences = (' '.join(words) for words in sentences)
    return [sentences[0] for sentences in self.raw_tag_sents(sentences)]

def tag(self, sentence):
    """
    Tag a list of tokens.
    :rtype: list(tuple(str, str))
    >>> parser = CoreNLPParser(url='http://localhost:9000', tagtype='ner')
    >>> tokens = 'Rami Eid is studying at Stony Brook University in NY'.split()
    >>> parser.tag(tokens)
    [('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'),
    ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'O')]
    >>> parser = CoreNLPParser(url='http://localhost:9000', tagtype='pos')
    >>> tokens = "What is the airspeed of an unladen swallow ?".split()
    >>> parser.tag(tokens)
    [('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'),
    ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'),
    ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]
    """
    return self.tag_sents([sentence])[0]

然后打电话时raw_tag_sents()使用以下命令将输入​​传递到服务器api_call():

def raw_tag_sents(self, sentences):
    """
    Tag multiple sentences.
    Takes multiple sentences as a list where each sentence is a string.

    :param sentences: Input sentences to tag
    :type sentences: list(str)
    :rtype: list(list(list(tuple(str, str)))
    """
    default_properties = {'ssplit.isOneSentence': 'true',
                          'annotators': 'tokenize,ssplit,' }

    # Supports only 'pos' or 'ner' tags.
    assert self.tagtype in ['pos', 'ner']
    default_properties['annotators'] += self.tagtype
    for sentence in sentences:
        tagged_data = self.api_call(sentence, properties=default_properties)
        yield [[(token['word'], token[self.tagtype]) for token in tagged_sentence['tokens']]
                for tagged_sentence in tagged_data['sentences']]

那么问题是如何解决问题并获取传入的令牌?

如果我们查看 CoreNLP 中 Tokenizer 的选项,我们会看到tokenize.whitespace option:

  • https://stanfordnlp.github.io/CoreNLP/tokenize.html#options https://stanfordnlp.github.io/CoreNLP/tokenize.html#options
  • 防止斯坦福 CoreNLP 中的标记包含空格 https://stackoverflow.com/questions/36440495/preventing-tokens-from-containing-a-space-in-stanford-corenlp

如果我们对允许额外的进行一些更改properties打电话之前api_call(),我们可以在令牌传递到由空格连接的 CoreNLP 服务器时强制执行令牌,例如代码更改:

def tag_sents(self, sentences, properties=None):
    """
    Tag multiple sentences.

    Takes multiple sentences as a list where each sentence is a list of
    tokens.

    :param sentences: Input sentences to tag
    :type sentences: list(list(str))
    :rtype: list(list(tuple(str, str))
    """
    # Converting list(list(str)) -> list(str)
    sentences = (' '.join(words) for words in sentences)
    if properties == None:
        properties = {'tokenize.whitespace':'true'}
    return [sentences[0] for sentences in self.raw_tag_sents(sentences, properties)]

def tag(self, sentence, properties=None):
    """
    Tag a list of tokens.

    :rtype: list(tuple(str, str))

    >>> parser = CoreNLPParser(url='http://localhost:9000', tagtype='ner')
    >>> tokens = 'Rami Eid is studying at Stony Brook University in NY'.split()
    >>> parser.tag(tokens)
    [('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'),
    ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'O')]

    >>> parser = CoreNLPParser(url='http://localhost:9000', tagtype='pos')
    >>> tokens = "What is the airspeed of an unladen swallow ?".split()
    >>> parser.tag(tokens)
    [('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'),
    ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'),
    ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]
    """
    return self.tag_sents([sentence], properties)[0]

def raw_tag_sents(self, sentences, properties=None):
    """
    Tag multiple sentences.

    Takes multiple sentences as a list where each sentence is a string.

    :param sentences: Input sentences to tag
    :type sentences: list(str)
    :rtype: list(list(list(tuple(str, str)))
    """
    default_properties = {'ssplit.isOneSentence': 'true',
                          'annotators': 'tokenize,ssplit,' }

    default_properties.update(properties or {})

    # Supports only 'pos' or 'ner' tags.
    assert self.tagtype in ['pos', 'ner']
    default_properties['annotators'] += self.tagtype
    for sentence in sentences:
        tagged_data = self.api_call(sentence, properties=default_properties)
        yield [[(token['word'], token[self.tagtype]) for token in tagged_sentence['tokens']]
                for tagged_sentence in tagged_data['sentences']]

修改上面的代码后:

>>> from nltk.parse.corenlp import CoreNLPParser
>>> ner_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='ner')
>>> sent = ['my', 'phone', 'number', 'is', '1111', '1111', '1111']
>>> ner_tagger.tag(sent)
[('my', 'O'), ('phone', 'O'), ('number', 'O'), ('is', 'O'), ('1111', 'DATE'), ('1111', 'DATE'), ('1111', 'DATE')]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 CoreNLP ner tagger 和 ner tagger 将分开的数字连接在一起? 的相关文章

  • Django 中的 Rpy2 错误 - 未为“”类型的对象定义转换“py2rpy”

    我以前从未使用过 R 并且正在尝试使用 rpy2 从 python 调用 R 函数 它可以在独立的 python 终端上运行 但不能在 Django 中运行 但rpy2似乎无法将python字符串转换为r对象 我正在使用同事提供的自定义库
  • 在 pandas 中单独打印一列的原始值?

    我有一个数据框 df pd DataFrame name george age 23 name anna age 26 现在我想检索乔治的年龄 df df name george age 但这会输出一些额外的信息以及原始值 0 23 Nam
  • Python GTK + webkit - 在 gtk.main() 之后插入 JavaScript

    我在终端中尝试了这个 一切正常 但是如果我在脚本内运行这个 我无法在 gtk main 之后插入 JavaScript import gtk import webkit w gtk Window b webkit WebView w add
  • 以矢量化方式在另一个 DataFrame 中查找包含值子集的行

    如何匹配此 DataFrame 中的值source car id lat lon 0 100 10 0 15 0 1 100 12 0 10 0 2 100 09 0 08 0 3 110 23 0 12 0 4 110 18 0 32 0
  • 正则表达式,选择最接近的匹配

    假设以下单词序列 BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA 我想做的是将 BLA 中的文本
  • 组和平均 NumPy 矩阵

    假设我有一个任意的 numpy 矩阵 如下所示 arr 6 0 12 0 1 0 7 0 9 0 1 0 8 0 7 0 1 0 4 0 3 0 2 0 6 0 1 0 2 0 2 0 5 0 2 0 9 0 4 0 3 0 2 0 1 0
  • 无法使用 BeautifulSoup 和 Requests 抓取下拉菜单

    我想抓取百年灵网站上的产品页面以获取各种信息 示例页面 https www breitling com gb en watches navitimer b01 chronograph 46 AB0127211C1A1 https www b
  • Paramiko SSHException 通道已关闭

    我一直在使用 Paramiko 在 Linux Windows 机器上发送命令 它可以很好地在 Ubuntu 机器上远程执行测试 但是 它不适用于 Windows 7 主机 以下是我收到的错误 def unit for event self
  • Python——捕获异常的效率[重复]

    这个问题在这里已经有答案了 可能的重复 Python 常见问题解答 异常有多快 https stackoverflow com questions 8107695 python faq how fast are exceptions 我记得
  • 按多个键分组并对字典列表的值进行汇总/平均值

    在Python中按多个键进行分组并对字典列表进行汇总 平均值的最Pythonic方法是什么 假设我有一个字典列表 如下所示 input dept 001 sku foo transId uniqueId1 qty 100 dept 001
  • Python 3在for循环中更改字典键的值不起作用

    我的 python 3 代码没有按预期工作 def addFunc x y print x y def subABC x y z print x y z def doublePower base exp print 2 base exp d
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • Pandas:将 pytz.FixedOffset 应用于系列

    我有一个带有timestamp列看起来像这样 0 2020 01 26 05 00 00 08 00 1 2020 01 26 06 00 00 08 00 Name timestamp dtype datetime64 ns pytz F
  • 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

    我正在 Webfaction 上设置实时服务器的开发版本 在本地计算机上的虚拟 Apache 服务器环境 运行没有任何错误 中运行 Django 应用程序 XP 使用 Python 2 6 运行 XAMPP Lite 我可以提交更改通过 G
  • PyArmor - 打包为一个可执行文件

    当我执行此命令时 您好 使用 PyArmor pyarmor pack main py 它将它打包到一个名为的文件夹中dist里面包含我的 exe 以及许多 Python 扩展文件 据我所知 PyArmor 使用 PyInstaller 来
  • 根据第三个变量更改散点图中的标记样式

    我正在处理多列字典 我想绘制两列 然后根据第三列和第四列更改标记的颜色和样式 我很难改变 pylab 散点图中的标记样式 我的方法适用于颜色 不幸的是不适用于标记样式 x 1 2 3 4 5 6 y 1 3 4 5 6 7 m k l l
  • 根据列索引重命名 Dataframe 列

    是否有内置函数可以按索引重命名 pandas 数据框 我以为我知道列标题的名称 但事实证明第二列中有一些十六进制字符 根据我接收数据的方式 我将来可能会在第 2 列中遇到这个问题 因此我无法将这些特定的十六进制字符硬编码到 datafram
  • 在Python中连续解析文件

    我正在编写一个脚本 该脚本使用 HTTP 流量行解析文件 并取出域 目前仅将它们打印到屏幕上 我正在使用 httpry 将流量连续写入文件 这是我用来删除域名的脚本 usr bin python import re input open r
  • Python:无法使用 os.system() 打开文件

    我正在编写一个使用该应用程序的 Python 脚本pdftk http www pdflabs com tools pdftk the pdf toolkit 几次来执行某些操作 例如 我可以在 Windows 命令行 shell 中使用
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code

随机推荐

  • - 讨论' aria-label='CSS 和 - 讨论'> CSS 和 - 讨论

    我想更改用于在网站上上传文件的输入和浏览按钮的样式 并且一直在阅读这实际上是不可能做到的 显然有一些黑客可能有效 未经测试 但在我浪费时间之前 我想知道为什么专业网站似乎没有问题 当我说专业时 我指的是可以上传简历的求职网站 可以上传脚本的
  • 如何在不使用 !important 或 javascript 的情况下覆盖内联 CSS?

    有没有办法在不使用的情况下覆盖内联CSS important并且不使用 JavaScript 例如 div style background color red div 我想知道是否可以在没有以下内容的情况下覆盖它 div backgrou
  • 如何使用 Databricks 将 CSV 写回 Azure Blob 存储?

    我正在努力写回 Azure Blob 存储容器 我可以使用以下内容从容器中读取内容 storage account name expstorage storage account key 1VP89J container source sp
  • Angular js 不起作用

    这是我的 html 文件 angular js 文件位于 java main webapp js 文件夹下 当我点击它时 Intellij 可以看到它 但代码不起作用 我在屏幕上打印出 helloMessage 而不是 hello worl
  • 当前上下文中不存在 MVC Razor 帮助程序

    我在 MVC4 Web 应用程序中创建了一个自定义剃刀助手 我需要在所有视图中使用它 在我的所有视图页面中 我似乎无法使用我的自定义助手 VS2012不只是看到它 请问我该如何解决这个问题 EDIT 当我运行页面时它确实有效 只是VS看不到
  • pytesseract 和 image.tif 文件

    我需要使用 pytesseract 将包含多个页面的 image tif 转录为文本 我有下一个代码 gt From PIL import Image gt Import pytesseract gt Pytesseract pytesse
  • 检测给定文件是否是图像以及java中特定类型的有效图像

    我需要从用户输入文件中获取该文件应该只是指定类型的图像 例如 仅有的JPEGs 其他文件必须被拒绝 所以我对文件实施了简单的基本检查 fileName toLowerCase endsWith jpg fileName toLowerCas
  • 对数据框列进行排序/对齐,以便行字符串值与主列表列匹配,如果列中不匹配则打印 0

    我想根据第一列 MASTER 中的字符串主列表对数据帧 3106 行 x 24 列 进行排序 以便数据帧的每一行中的字符串在存在匹配且存在时对齐不匹配则为该单元格打印 0 主列表包含任何列中的每个可能的字符串 但并非每个字符串都会出现在每列
  • 从表格上清除物体,何时何地?

    我有一个简单的 Windows 窗体应用程序 在表单上 我有一个自定义类 它有自己的 Dispose 方法 所以问题是我什么时候应该调用这个 FormClosed 事件 即 Form1 FormClosed 是否是执行此操作的正确位置 或者
  • .NET 的 StringBuilder 是线程安全的吗

    MSDN 文档的常规 线程安全 部分StringBuilder指出 不保证任何实例成员都是线程安全的 但这个语句感觉就像是为框架中的几乎每个类复制并粘贴了 http msdn microsoft com en us library syst
  • CombinedDomainXYPlot 不重新缩放域轴

    当我从使用 CombinedDomainXYPlot 的图表中隐藏系列数时 所有范围轴都会很好地自动重新缩放 但是 域轴不会重新缩放 有没有办法手动刷新缩放 或者我可能缺少一个设置来启用此设置中域轴的自动缩放 CombinedDomainX
  • JAX-RS和自定义授权

    我正在尝试保护 JAX RS 端点 目前正在尝试弄清楚身份验证和授权是如何工作的 大多数示例都非常简单 因为它们仅通过 web xml 搭载 Java EE 应用服务器角色 我想知道如何使用 Java EE AS 角色之外的其他角色 例如
  • Couchbase Lite 2 + JsonConvert

    以下代码示例将一个简单的对象写入 couchbase lite 版本 2 数据库 然后读取所有对象 这个你可以在官方文档中找到here https developer couchbase com documentation mobile 2
  • 在 Chrome 扩展中运行喊播广播

    我想为我的网络shoutcast网络广播电台创建一个chrome扩展 我设法使这一切正常工作 除了每当我点击弹出窗口时 它就会关闭 并且流也会随之停止 读了一点之后 我发现我需要创建一个后台页面 这将使播放器在后台运行 这就是我迷失和困惑的
  • 如何强制浏览器不存储 HTML 表单字段数据?

    在 HTML 表单中输入内容时 Firefox 或 Internet Explorer 等浏览器会存储这些值 有时会悄悄存储 因此 当输入另一个网络表单时 浏览器会智能地建议相同的信息 显示下拉列表的另一种方法是双击空文本框 在电子商务网站
  • Python读取设备管理器信息

    我只需要使用 python 2 7 脚本读取设备管理器中列出的所有信息 特别是 IDE ATA ATAPI 控制器 子类别下的信息 需要检测 SATA 驱动器是否处于 AHCI 或 IDE 模式 一种简单的方法 在 Windows 上 是使
  • multer、multiparty 和 connect-multiparty + Nodejs 之间的区别

    我是 Node 世界的新手 用例 有一个在 Angular 前端上传 XLS 文件的简单场景 在 Node 上处理它们 进行一些操作 然后将 JSON 保存到 蒙戈数据库 从 Angular 收到文件后 我正在搜索在 Node 上解析 处理
  • ARKit Stereo – 是否可以同时运行两个 ARSCNView?

    我正在考虑对现有的 AR 应用程序进行一些修改 我想拆分视图并添加内部 2ARSCNView这样用户就可以使用VR卡盒并获得不同的体验 但Xcode总是返回给我 Session 0x102617d10 did fail with error
  • 如何在 UITextView 中显示可点击的链接

    我正在尝试在 UITextview 中显示带有可单击链接的属性字符串 我创建了一个简单的测试项目来看看哪里出了问题 但仍然无法弄清楚 我尝试启用用户交互并设置 shouldInteractWithURLs 委托方法 但它仍然不起作用 这是我
  • 为什么 CoreNLP ner tagger 和 ner tagger 将分开的数字连接在一起?

    这是代码片段 In 390 t Out 390 my phone number is 1111 1111 1111 In 391 ner tagger tag t Out 391 my O phone O number O is O 111