机器学习或 NLP 方法将关于月份、年份的字符串转换为日期

数据挖掘 机器学习 Python nlp nltk 正则表达式
2021-09-17 05:57:08

我目前正在开发一个程序,该程序能够将表示年份的人类风格转换为实际日期。示例:去年上个月2018 年 12 月的 字符串可能是完整的句子,例如:5 年前你在做什么

它将给2014

目的是评估人类将年份或日期表示为实际日期的风格,我创建了此类字符串的集合并将它们与正则表达式匹配。

我已经阅读了一些机器学习,但我不确定哪种算法最适合这个问题,或者我是否应该考虑使用 NLP。

有没有人建议使用什么算法或者我可以在哪里找到必要的文献来解决我的问题?

感谢您的任何贡献!

3个回答

我得到了答案,NLTK 很适合解决这个问题。您可以将 sutime 与 python 包装器一起使用:

斯坦福 CoreNLP 的 SUTime 的 Python 包装器

NLP 中的常用方法是收集训练所需的数据集。处理该数据集,以便将数据集中的单词转换为数字。

将其转换为数字的一个简单示例是从数据集中制作一个大型单词字典,并使用字典中每个单词的索引作为表示数字

您需要寻找的是“命名实体识别”。来自维基百科

命名实体识别 (NER)(也称为实体识别、实体分块和实体提取)是信息提取的子任务,旨在将非结构化文本中提及的命名实体定位和分类为预定义的类别,例如人名、组织,地点,医疗代码,时间表达,数量,货币价值,百分比等。

正如评论部分提到的,斯坦福有一个很棒的 NER 标记器,你可以将它与 Python 一起使用(即使 StanfordNLP 是用 Java 实现的)

官方 url下载 jar 文件。它有这种格式stanford-ner-xxxx-xx-xx.zip

您需要将以下两个文件放在与 Python 脚本相同的应用程序文件夹中

  1. ner-tagger.jar
  2. ner-model-english.ser.gz(如果你不想要英语,请选择另一个)

import nltk

from nltk.tag.stanford import StanfordNERTagger  

yourText = this_is_your_text

words = nltk.word_tokenize(yourText)
jar = './stanford-ner.jar'
model = './ner-model-english.ser.gz'

tagger = StanfordNERTagger(model, jar, encoding='utf8')

print(ner_tagger.tag(words))

然后你可以从上面抓取任何标记为DATE

听起来你需要一个时间标记器。是一个很好的基于规则的。

斯坦福 CoreNLP 也有一个.

似乎通常基于规则的方法可以很好地完成这项任务。