我想知道的是从文本中提取含义的最佳方法是什么。我给NLTK进行了阅读,它确实为我提供了一些有关NLP基础知识的信息。
我是nlp的新手,所以我很难决定我的方向。阅读NLTK文本后,这就是我在想什么可以解决我的问题的方法:
这是我理想的目标,例如:
输入:
在2018年8月29日之前执行X,直到2018年12月9日(每个星期三)和2018年9月10日(星期一)
以粗体显示“语音”标签的内容(至少是我的想法):
在2018年8月29日做X( 日期 )直到( 范围 )9/12 / 2018( 日期 )(每( 频率 )周三( 日 )和9/10/2018( 日期 )(星期一)( 日 )>
接下来,我将遍历语音标记的一部分,然后将文本取下来。我的希望是在对文本进行适当的分块之后,然后需要进行一些其他处理才能弄清楚用户到底想要什么。这就是我在想从句子中成功提取出意思之后的输出结果:
8/29/2018-9/12/2018,星期三
9/10/2018,星期一
我意识到可以通过正则表达式轻松找到月份中的几天,日期和日期等。
但是我的问题是NLTK方法 nltk.pos_tag 对我不起作用。 (对于不熟悉的人,该方法是语音标记程序的一部分,用于标记单词喜欢的名词,动词等。)我很可能必须自定义自己的 pos_tag 方法?
这是我的问题。是先标记每个标记词,然后将标记中的句子分块,然后才视为提取含义的最佳做法?
我猜测我需要某种AI分类来学习分块部分,以便将来我可以从多个句子中提取含义。
我的方法是否理智?我发疯了吗? :)
答案 0 :(得分:1)
虽然您没有发疯(可能是:),但这是一个非常普遍的问题,管理员可能会很快将其标记为不适合SO,因为它太广泛了。基本上,所有在NLP中工作的人都在“提取句子的含义”数十年。存在大多数(商业/实际)可行的方法是因为它们的应用领域相对有限。考虑一个用于酒店预订的聊天机器人(具有明确定义的到达/离开日期,位置等位置),一个允许语音输入的汽车导航系统(“我想去X,避开高速公路”)等等。
由于您的示例输出针对的是日期和时间,而实际上这并不是pos-tagger的意思,因此某些时间分析模块可能对您的用例更好。想到的只有一个工具包是https://github.com/HeidelTime/heideltime,它使用TimeML方案(这也是您可能想看看的东西)来指示具体的时间点和时间间隔,并尝试对此进行标准化。机器可读的时间点。
除了NLP模块外,您还需要什么,取决于您的输入。如果相对严格(说某事的不同方式的数量很少),那么最好手动编写简单的语法。但是事情很容易变得复杂。自然语言中的“从dd-mm-yyyy到周一dd-mm-yyyy的星期一执行X”同样可以很好地表示为“从dd-mm-yyyy开始的星期一进行Do X,以dd-mm-yyyy结尾。这确实有助于了解您的用户将使用哪种语言。可以从句子中提取含义的即用型软件包或工具包(对于英语,更不用说其他6.000种左右官方认可的语言(无论哪个机构决定):):
除了NLTK(我发现它对于教育目的非常有价值,并且相对而言使用起来相对灵活,但是现在有点过时了),您可以签出https://spacy.io/。在某种程度上,它的意思是做相同的事情,但是具有更现代的方法和数据集。
答案 1 :(得分:0)