python - 从 Python 中的文本中提取日期/持续时间
问题描述
要提取的文本和输出类似于以下内容:
“每两周检查一次” - 两周
“在第 1 天和第 14 天检查” - 第 1 天和第 14 天
“第 19 天和第 14 天很重要” - 第 19 天,第十四天
“在第 11 天和第 14 天检查它” - 第 11 天,第 14 天
“在第一天和第十二天检查” - 第一天,第十二天
我曾尝试使用 SUTime 库来提取必要的信息,但它仅适用于第一个示例,并且无法从其余示例中正确提取信息。考虑到可以编写相同文本的多种方式,使用正则表达式不太可行。这个问题还有其他解决方案吗?
解决方案
这是一个很好的问题,因为如果你真的想确保每次提到一天或持续时间,你可能最终会使用机器学习,因为这样你的程序可以被训练来识别像“每两周”这样的短语或“两年一次”,它们不是数值。但是,我认为对于这样的事情,采用不需要太多编码和努力的方法可能更明智。首先,根据您在此处显示的内容判断,您的程序应该识别“每 n 天/周”和“检查第 n 天和 m 天”(n 和 m 代表那里的任意数字)。首先,我建议使用words2num Python 库将任何文本(例如示例中的“十四”)转换为整数。可能需要使用正则表达式来解析文本 - 但仅限于单词。数字可以简单地通过使用split()
内置函数来找到,通过分隔符将字符串拆分为单词的子字符串,在这里可以使用空格。然后您可以使用该isdigit()
函数查看它是否为整数,然后应用您的规则。
我意识到这些不是分步说明,而是一种选择。如果你真的想让它变得高效,那么自然语言或机器学习将是最好的选择,但如果你愿意,你可以使用基本的解析和正则表达式来管理。
推荐阅读
- intellij-idea - intellij中的文本大写选项?
- python - 如果要直接使用而不是类对象,python函数中是否需要self
- flutter - 为什么 initState() 被调用了两次?
- sapui5 - 切换智能表的可编辑性
- java - Apache VFS2 - 无法将文件上传到 SFTP 服务器
- android - 基于 Flavor 的 gradle 依赖版本
- android - 将底部工作表对话框片段锚点扩展到屏幕的底角
- arrays - 在特定列上对数组进行排序的问题
- mysql - 在 Cloud SQL (MySQL) 上仅复制某些表 (replicate-do-table)
- d3.js - 将带有背景图像的svg rect转换为黑白