我正在研究一些自然语言处理算法来阅读一段文本,如果文本似乎试图建议一个会议请求,它会自动为你设置那个会议。
例如,如果电子邮件文本内容为:
让我们明天晚上 7 点在市中心的某个地方见面。”
该算法应该能够检测事件的时间、日期和地点。
有人知道我可以为此目的使用的一些现有的 NLP 算法吗?我一直在研究一些 NLP 资源(如NLTK和R 中的一些工具),但没有取得多大成功。
谢谢
这是信息提取的一种应用,可以通过隐马尔可夫模型 (HMM) 或条件随机场 (CRF) 等序列分割算法更具体地解决。
对于软件实现,您可能想从 UMass-Amherst 的MALLET 工具包开始,它是一个流行的库,它实现了用于信息提取的 CRF。
您可以将句子中的每个标记视为用您感兴趣的字段(或“x”表示以上都不是)标记的东西,作为单词特征(如词性、大小写、字典成员资格等)的函数.)... 是这样的:
token label features
-----------------------------------
Let x POS=NNP, capitalized
's x POS=POS
meet x POS=VBP
tomorrow DATE POS=NN, inDateDictionary
someplace x POS=NN
in x POS=IN
Downtown LOCATION POS=NN, capitalized
at x POS=IN
7pm TIME POS=CD, matchesTimeRegex
. x POS=.
不过,您需要先提供一些手工标记的训练数据。
你应该看看http://opennlp.apache.org java toolkit
这个问题今天仍然是头条新闻。如果您(仍在)寻找算法,则可以使用 ANTLR 作为解析器生成器的解决方案,可以选择多种编程语言(C/C++/C#/JS/Java/...)。一些开源参考:
我认为你应该能够用 spacy 做到这一点。我在 jupyter-notebook 中试过这个
import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(u'Over the last quarter in 2018-12-02 Apple sold nearly 20 thousand iPods for a profit of $6 million.')
displacy.render(doc, style='ent', jupyter=True)
输出
Over the last quarter DATE in 2018-12-02 DATE Apple ORG sold nearly 20 thousand CARDINAL iPods PRODUCT for a profit of $6 million MONEY .