Dar*_*der 27 text-processing nlp machine-learning named-entity-recognition nltk
我正在尝试使用NLTK工具包从文本消息中获取提取位置,日期和时间.我刚刚在我的机器上安装了工具包,我编写了这个快速片段来测试它:
sentence = "Let's meet tomorrow at 9 pm";
tokens = nltk.word_tokenize(sentence)
pos_tags = nltk.pos_tag(tokens)
print nltk.ne_chunk(pos_tags, binary=True)
Run Code Online (Sandbox Code Playgroud)
我假设它将确定日期(明天)和时间(晚上9点).但令人惊讶的是,它未能认识到这一点.运行上面的代码时,我得到以下结果:
(S (GPE Let/NNP) 's/POS meet/NN tomorrow/NN at/IN 9/CD pm/NN)
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我理解我是否遗漏了某些东西,或者NLTK还不够成熟,无法正确标记时间和日期.谢谢!
Vik*_*ski 29
nltk中的默认NE chunker是在ACE语料库上训练的最大熵chunker(http://catalog.ldc.upenn.edu/LDC2005T09).它没有经过训练来识别日期和时间,所以如果你想这样做,你需要训练你自己的分类器.
看看http://mattshomepage.com/articles/2016/May/23/nltk_nec/,整个过程解释得很好.
此外,nltk_contrib中有一个名为timex的模块,可以帮助您满足需求.https://github.com/nltk/nltk_contrib/blob/master/nltk_contrib/timex.py
命名实体识别是不是一个简单的问题,就不能指望任何库是100%准确.你不应该基于一句话对NLTK的表现做出任何结论.这是另一个例子:
sentence = "I went to New York to meet John Smith";
Run Code Online (Sandbox Code Playgroud)
我明白了
(S
I/PRP
went/VBD
to/TO
(NE New/NNP York/NNP)
to/TO
meet/VB
(NE John/NNP Smith/NNP))
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,NLTK在这里做得非常好.但是,我无法让NLTK识别today或tomorrow作为时间表达.您可以尝试斯坦福SUTime,这是斯坦福大学的一部分CoreNLP -我已经用它之前,我那很好(这是在Java中虽然).
| 归档时间: |
|
| 查看次数: |
20356 次 |
| 最近记录: |