我有一个应用程序,NLTK需要解释人类的语言,并从中找到有意义的片段。需要解释的句子是from <somewhere>, to <somewhere> on <some_date>, <class_of_travel,like AC_CHAIR_CAR>
的形式。如你所知,这可以用很多种方式来表达,例如
我想从亚特兰大去纽约,商务舱,2014年7月25日。
我想坐公务舱,7月25日从纽约到亚特兰大。
我有一个梦想,有一天我会登上飞机,坐商务舱,在纽约降落,出发地在亚特兰大,最好是在7月25日。
7月25日亚特兰大到纽约,公务舱。
你明白了。我想提取的是一些信息的小道消息——源、目的地、类、日期。有些可能丢失,必须加以识别或适当假设。就像如果发现来源不见了,就去确认。或者,如果年份不见了,就把它记到当年。而一直忽视那些无用的信息(比如《我有一个梦想》这一部分,就像我崇拜马丁·路德一样)。在
我有什么办法可以在NLTK中实现这一点吗?我知道这里有贴标签的,也有一些方法可以训练标签的,但我对此还没有足够的知识。是否有可能涵盖所有可能的情况下,可以这样一个句子,并提取信息像这样?如果是这样的话,我会很感激你的指导。在
在计算语言学中,这被称为“Named Entity Recognition”,它是从文本中识别组织、人和地点等事物的过程。在
这里的挑战是nltk中默认的NE chunker是在ACE corpus上训练的最大熵chunker。它还没有被训练识别日期和时间,所以你需要调整它,找到一种检测时间的方法。在
有一些软件包可以帮助提取命名实体,Stanford-NER(Named Entity Recognizer)是目前最流行的命名实体识别工具之一,由Java实现。但是您可以通过下载包来使用它,并通过NLTK进行交互,NLTK提供了Stanford-NER的接口。在
您可以下载Stanford Named Entity Recognizer version 3.4 你在哪里找到斯坦福大学-内贾尔和分类器模型“全部”类distsim.crf.gz系列““
你也可以使用NTLK,你可以在official document上找到更多细节,检查一下这个要点from Gavin
^{pr2}$最好编写一个正则表达式模式来标识源和目标。您可能在获取其他单词(如
"to get"
)时遇到问题,但是您已经确定了要从st.tag
(“LOCATION”)验证的位置列表,或者,如果您使用了NTLK,您可以验证它是否是动词(“VB”/“NN”)。您还可以通过使用NLTK的UnigramTagger()和BigramTagger()来检查可能性,以便在“FROM”和“to”之后获取可以标识为位置的名称如上所述,这是我们可以面对的问题之一,但我们可以使用正则表达式,如本文thread所述。在
输出:
我们也可以使用python-dateutil或this,而不是使用正则表达式。在
以防丢失部分,如年份或月份。我们可以使用parsedatetime包对此进行调整。在
检查这个快速的例子(你可以根据不同的场景调整它)
最后一件事是,您可以使用这个dataset来提取airports,并验证所提到位置的正确性,以防您用availability回答(有些位置没有airport)。在
对于类,您可以通过查看句子中的“经济舱”、“商务舱”单词来验证它(您可以在
in
或正则表达式之间进行选择)。在有关此主题的详细信息,请检查:NTLK - Extracting Information from Text
这个问题被称为“命名实体识别”(或简称“ner”)。你应该针对那些特定的数据库类型,比如,google上的一些特定的规则
在http://nlp.stanford.edu:8080/ner/处签出演示NER系统
检测对日期和时间的引用可能是最具启发性的解决方案。在
如果您使用的文本域是特定且非常有限的,那么设置手动编辑的实体列表可能会非常有用。
e、 g.只需列出所有机场代码/拥有商业机场的所有城市的名称,并尝试将这些名称与任何输入文本进行精确的字符串匹配。在
相关问题 更多 >
编程相关推荐