如何提取数字(以及比较形容词或范围)

2024-04-29

我正在用 Python 开发两个 NLP 项目,它们都有类似的任务提取数值和比较运算符来自句子,如下所示:

"... greater than $10 ... ",
"... weight not more than 200lbs ...",
"... height in 5-7 feets ...",
"... faster than 30 seconds ... "

我发现了两种不同的方法来解决这个问题:

  • 使用非常复杂的正则表达式。
  • using 命名实体识别 https://en.wikipedia.org/wiki/Named-entity_recognition(还有一些正则表达式)。

如何从这些句子中解析出数值?我认为这是 NLP 中的常见任务。


所需的输出类似于:

Input:

“超过 10 美元”

Output:

{'value': 10, 'unit': 'dollar', 'relation': 'gt', 'position': 3}

我可能会将其视为分块任务并使用nltk的词性标注器与其正则表达式分块器相结合。这将允许您根据句子中单词的词性而不是单词本身来定义正则表达式。对于给定的句子,您可以执行以下操作:

import nltk

# example sentence
sent = 'send me a table with a price greater than $100'

我要做的第一件事是稍微修改你的句子,这样你就不会太混淆词性标注器。以下是您可以进行的一些更改示例(使用非常简单的正则表达式),但您可以尝试并查看是否还有其他更改:

$10 -> 10 dollars
200lbs -> 200 lbs
5-7 -> 5 - 7 OR 5 to 7

所以我们得到:

sent = 'send me a table with a price greater than 100 dollars'

现在您可以从句子中获取词性:

sent_pos = nltk.pos_tag(sent.split())
print(sent_pos)

[('send', 'VB'), ('me', 'PRP'), ('a', 'DT'), ('table', 'NN'), ('with', 'IN'), ('a', 'DT'), ('price', 'NN'), ('greater', 'JJR'), ('than', 'IN'), ('100', 'CD'), ('dollars', 'NNS')]

我们现在可以创建一个chunker http://www.nltk.org/book/ch07.html这将根据(相对)简单的正则表达式对 POS 标记文本进行分块:

grammar = 'NumericalPhrase: {<NN|NNS>?<RB>?<JJR><IN><CD><NN|NNS>?}'
parser = nltk.RegexpParser(grammar)

这定义了一个解析器,其语法对数字短语进行分块(我们称之为短语类型)。它将数字短语定义为:一个可选名词,后跟一个可选副词,然后是一个比较形容词、一个介词、一个数字和一个可选名词。 这只是关于如何定义短语的建议,但我认为这比在单词本身上使用正则表达式要简单得多。

要获取您的短语,您可以执行以下操作:

print(parser.parse(sent_pos))
(S
  send/VB
  me/PRP
  a/DT
  table/NN
  with/IN
  a/DT
  (NumericalPhrase price/NN greater/JJR than/IN 100/CD dollars/NNS))  

或者只获取您可以执行的短语:

print([tree.leaves() for tree in parser.parse(sent_pos).subtrees() if tree.label() == 'NumericalPhrase'])

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

如何提取数字(以及比较形容词或范围) 的相关文章

随机推荐

  • 在 Angular 中强制进行摘要

    在用户操作后的某个时刻 我希望发生摘要 因此 UI 反映了支持它的数据模型的更改 我有一个服务在回调中执行一些更改 异步 我明白那个 scope仅在控制器的上下文中才有意义 我可以通过执行来达到相同的效果吗 apply on the roo
  • 如何在 Cypress 的 E2E 测试中登录 Auth0?

    我已经开始测试 React Web 应用程序 但我没有走得太远 因为我遇到了登录问题 我在用cypress https www cypress io e2e测试工具 将显示一个带有登录按钮的欢迎页面 该页面会将您重定向到auth0 http
  • Traefikv2.3 出现 `Failed to list *v1beta1.IngressClass: ingressclasses.networking.k8s.io` 错误

    我正在尝试使用Traefik Kubernetes Ingress 我在用着traefik v2 3 K8的cli版本是v1 18 3服务器版本是v1 18 6IKS 我正在使用 IBM Kubernetes 服务来部署它 但我在 pod
  • 将 SSL 与 MAMP PRO 4 结合使用

    由于我已更新到 chrome 63 我在 localhost 中的网站被重定向到 https 因此我决定将 SSL 与 MAMP PRO 一起使用 但我无法使其工作 chrome 说您的连接不是私有的 在 MAMP 的 SSL 面板中 我生
  • 在 Three.js 中获取 Object3D 的大小

    我的场景中有这个 3D 对象 var icon new THREE Object3D var iconTexture THREE ImageUtils loadTexture images icon png iconMaterial new
  • Next.js API 路由神秘地修改 JSON 负载

    由于某种原因 当我通过 Postman 作为原始文本发送 JSON 格式的数据时 没有任何问题 当我通过 Postman 发送与原始 JSON 完全相同的数据时 区别应该只是content type标头是application json代替
  • 抑制 retina.js 库中的 404 错误

    我们使用js库视网膜 js https github com imulus retinajs 它将低质量图像替换为 视网膜 图像 大小乘以 2 问题是 retina js 会为每个无法找到的 视网膜 图像抛出 404 错误 我们拥有一个网站
  • Github 下载文件夹为 zip

    如何为我的 Github 存储库的访问者提供一个链接 以将我的存储库的 builds 文件夹下载为 zip 文件 该文件夹包含应用程序所需的可执行文件 着色器和纹理 当然 我可以手动构建该目录的 zip 文件并将其添加到存储库中 但这会导致
  • Devise 和 Ruby on Rails:尝试登录时如何解决“Completed 401 Unauthorized”问题

    我正在尝试将 Devise gem v4 7 2 与 Ruby on Rails v6 0 3 2 一起使用 单击 登录 按钮时 我收到以下输出 Started POST users sign in for 1 at 2020 11 21
  • 如何从 CMake 运行 .bat 文件?

    如何在预链接或构建后事件中从 CMake 运行 bat 文件 你可以使用add custom command e g if WIN32 add custom command TARGET
  • 如何在 Android WebView 中从远程 URL 访问本地资源?

    要加载 HTML 中的资源 我使用 URLfile android asset my image png 当我在本地加载 HTML 时 它可以工作 例如 使用WebView loadData method 但是 我无法从远程网站加载本地资源
  • 使用 JsonWriter 时,WriteStartConstructor 的用途是什么?

    标题说明了一切 我看到它 及其相应的结尾 吐出以下内容 new Foo 但我不明白什么new实际上是在反序列化时执行的 文档只是说它编写了一个 Json 构造函数 但没有说 Json 构造函数是什么is 此方法是作为增强功能的一部分引入的
  • React textarea 的值是只读的,但需要更新

    我的 React 应用程序中有一个文本区域 其中填充了一个值 我希望更新此文本区域并提交表单以更新数据库中的行
  • 在 iOS 8 中呈现相机权限对话框

    当我的应用程序在 iOS 8 上第一次尝试访问摄像头时 会向用户显示一个摄像头权限对话框 很像 iOS 7 中用于访问麦克风的麦克风对话框 在 iOS 7 中 可以预先调用麦克风权限对话框并查看是否授予了权限 请参阅这个问题 https s
  • 将数据导入 Django 的好方法

    我想定期将数据导入 Django 项目 我需要告诉我的数据提供者我想要以什么格式接收数据 我应该以 Json XML CSV 格式请求吗 在 Django 中通常如何处理这个问题 Django 有一个用于导入数据的完整框架 称为 Fixtu
  • 无法使用 process.ErrorDataReceived c# 获取进程错误输出

    我已经建立了Form我使用了一段时间的应用程序 现在我想捕捉StandardError我的流程及其standartOutput 我查看了答案SO and MSDN https msdn microsoft com en us library
  • jquery 可以操作用 DOM 创建的临时文档吗?

    我想要实现的目标是通过传递一个大的 html 字符串来操作使用 jquery 使用 DOM 创建的文档 考虑以下示例 var doctype document implementation createDocumentType html v
  • 如何在库的上下文中实例化 Spring?

    我正在寻找一个示例 该示例展示了如何在打包在普通旧的 不可执行的 java 库 JAR 中的一组类的上下文中实例化 Spring 容器 这里的核心目的是提供依赖注入 主要用于日志记录 我认为最根本的问题是不可执行的 jar 没有单一的启动点
  • 如何接收在 PHP 中使用“application/octet-stream”发送的 POST 数据?

    这就是我正在处理的事情 我们的一个计划有一个支持表格 用户可以使用它来请求支持 此表单的作用是 它向 PHP 脚本执行 HTTP POST 请求 该脚本应该收集信息并将其转发到支持电子邮件地址 POST 请求包含三个类型的文本字段Conte
  • 如何提取数字(以及比较形容词或范围)

    我正在用 Python 开发两个 NLP 项目 它们都有类似的任务提取数值和比较运算符来自句子 如下所示 greater than 10 weight not more than 200lbs height in 5 7 feets fas