首页 > 解决方案 > 从 Python 中的文本中提取日期/持续时间

问题描述

要提取的文本和输出类似于以下内容:

“每两周检查一次” - 两周

“在第 1 天和第 14 天检查” - 第 1 天和第 14 天

“第 19 天和第 14 天很重要” - 第 19 天,第十四天

“在第 11 天和第 14 天检查它” - 第 11 天,第 14 天

“在第一天和第十二天检查” - 第一天,第十二天

我曾尝试使用 SUTime 库来提取必要的信息,但它仅适用于第一个示例,并且无法从其余示例中正确提取信息。考虑到可以编写相同文本的多种方式,使用正则表达式不太可行。这个问题还有其他解决方案吗?

标签: pythonpython-3.xdatetextnlp

解决方案


这是一个很好的问题,因为如果你真的想确保每次提到一天或持续时间,你可能最终会使用机器学习,因为这样你的程序可以被训练来识别像“每两周”这样的短语或“两年一次”,它们不是数值。但是,我认为对于这样的事情,采用不需要太多编码和努力的方法可能更明智。首先,根据您在此处显示的内容判断,您的程序应该识别“每 n 天/周”和“检查第 n 天和 m 天”(n 和 m 代表那里的任意数字)。首先,我建议使用words2num Python 库将任何文本(例如示例中的“十四”)转换为整数。可能需要使用正则表达式来解析文本 - 但仅限于单词。数字可以简单地通过使用split()内置函数来找到,通过分隔符将字符串拆分为单词的子字符串,在这里可以使用空格。然后您可以使用该isdigit()函数查看它是否为整数,然后应用您的规则。

我意识到这些不是分步说明,而是一种选择。如果你真的想让它变得高效,那么自然语言或机器学习将是最好的选择,但如果你愿意,你可以使用基本的解析和正则表达式来管理。


推荐阅读