普通nlp任务的效率



我正在尝试制作一个大量使用pos标记的应用程序。但是对我来说,nltk的词性标注功能似乎不符合要求——例如:

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’),("交付"、"得到")("他","PRP美元"),("第一次","JJ")("演讲","神经网络")("。', '.')]

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

2)相反,是否有任何好的方法可以让我创建自己的句子解析器,然后发布标记器,以便灵活地修改将来使用的任何语言。

您绝对应该使用一种基于java的pos标记器。我用的是斯坦福核心自然语言处理标注器,但也有其他的。NLTK主要是一个教学工具包,不打算用于工业强度的使用。基于java的标记器也会快得多。

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

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

最新更新