常见nlp任务的效率

时间:2013-04-04 19:07:18

标签: java python nlp

我正在尝试制作一个大量使用pos标记的应用程序。但是nltk的pos标记功能对我来说似乎并不合适 - 例如:

import nltk
text = "Obama delivers his first speech."

sent  =  nltk.sent_tokenize(text)


loftags = []
for s in sent:
    d = nltk.word_tokenize(s)   

    print nltk.pos_tag(d)

结果:

akshayy @ ubuntu:〜/ summ $ python nn1.py [('奥巴马','NNP'),('递送','NNS'),('他'','PRP $'),('第一','JJ'),('演讲','NN') ),('。','。')]

与Stanford NLP相比,这并不好。现在,在这个时刻,当我有足够的投入时间和精力进行Python环境时,转向java对我来说似乎并不实用。此外,与java相比,我更倾向于C,因此Python在未来的使用中也更接近。因此,第一个问题是: 1)您是否真的认为Java对于具有大量可用工具的nlp任务更好。我做了很好的研究,发现java有更大的社区致力于nlp任务。

2)相反,有没有什么好的方法可以创建我自己的句子解析器,然后是pos tagger,可以灵活地修改将来使用的任何语言。

2 个答案:

答案 0 :(得分:2)

你绝对应该使用一种基于Java的POS标记器。我使用Stanford Core NLP标记符,但还有其他标记符。 NLTK主要是一个教学工具包,不适合工业强度使用。基于Java的标记器也会快得多。

但是,使用Java工具包并不妨碍您在Python中工作。在Python中编写一个包装器类是很简单的,它只运行Java命令并解析结果,以便在Python代码中使用。

答案 1 :(得分:0)

Python 拥有非常棒的XML / HTML解析库,例如Beautiful Soup [6]和Scrape.py [7]。您可以使用这些库快速抓取Web并生成大型数据集以提高模型的性能(因为让我们面对它,大数据胜过复杂性) 考虑一下您的其他选择:除非您需要提高性能(计算速度,而不是模型准确性),否则使用 C ++ / Java 等编译语言进行此类工作是没有意义的。据我所知,Ruby对于任何机器学习,数据挖掘或自然语言处理任务都是完全没用的。也许你可以使用Lisp,但在这一点上,Python有一个更大的生态系统。 在这里阅读更多 http://www.quora.com/What-programming-languages-are-suitable-for-natural-language-processing