问题

我想知道哪种编程语言更适合自然语言处理.JavaorPython?我找到了很多关于它的问题和答案。但我仍然迷失在选择使用哪一个。

我想知道哪个NLP库用于Java,因为有很多库(LingPipe,GATE,OpenNLP,StandfordNLP)。对于Python,大多数程序员推荐使用NLTK。

但是,如果我要从非结构化数据(只是自由形成的纯英文文本)中进行一些文本处理或信息提取以获得一些有用的信息,那么最佳选择是什么? Java还是Python?适合的图书馆
更新了
我想要做的是从非结构化数据中提取有用的产品信息(例如,用户制作不同形式的广告,关于手机或笔记本电脑的标准不是很标准)


#1 热门回答(118 赞)

用于NLP的Java与Python是非常偏好或必要的。根据公司/项目,你需要使用其中一个,除非你正在进行项目,否则通常没有多少选择。

除了NLTK(www.nltk.org)之外,在python中实际上还有其他文本处理库:

  • TextBlob:http://textblob.readthedocs.org/en/dev/
  • Gensim:http://radimrehurek.com/gensim/
  • 模式:http://www.clips.ua.ac.be/pattern
  • Spacy :: http://spacy.io
  • 橙色:http://orange.biolab.si/features/
  • 菠萝:https://github.com/proycon/pynlpl

(更多信息,请参见https://pypi.python.org/pypi?%3Aaction=search&term=natural+language+processing&submit=search)

对于Java,还有很多其他的,但这是另一个列表:

  • Freeling:http://nlp.lsi.upc.edu/freeling/
  • OpenNLP:http://opennlp.apache.org/
  • LingPipe:http://alias-i.com/lingpipe/
  • Stanford CoreNLP:http://stanfordnlp.github.io/CoreNLP/(包含其他语言的包装器,包括python)
  • CogComp NLP:https://github.com/CogComp/cogcomp-nlp

这是基本字符串处理的一个很好的比较,参见http://nltk.googlecode.com/svn/trunk/doc/howto/nlp-python.html

GATE与UIMA与OpenNLP的有用比较,见https://www.assembla.com/spaces/extraction-of-cost-data/wiki/Gate-vs-UIMA-vs-OpenNLP?version=4

如果你不确定,这是NLP的语言,我个人说,"任何能给你所需分析/输出的语言",参见Which language or tools to learn for natural language processing?

这是最近(2017年)的NLP工具:https://github.com/alvations/awesome-community-curated-nlp

较旧的NLP工具列表(2013):http://web.archive.org/web/20130703190201/http://yauhenklimovich.wordpress.com/2013/05/20/tools-nlp

除语言处理工具外,你非常需要machine learning工具来合并到NLP管道中。

PythonJava中有一个完整的范围,并且再次取决于首选项以及这些库是否足够用户友好:

python中的机器学习库:

  • Sklearn(Scikit-learn):http://scikit-learn.org/stable/
  • 牛奶:http://luispedro.org/software/milk
  • Scipy:http://www.scipy.org/
  • Theano:http://deeplearning.net/software/theano/
  • PyML:http://pyml.sourceforge.net/
  • pyBrain:http://pybrain.org/
  • Graphlab Create(商业工具,但免费学术许可1年):https://dato.com/products/create/

(更多信息,请参见https://pypi.python.org/pypi?%3Aaction=search&term=machine+learning&submit=search)

  • Weka:http://www.cs.waikato.ac.nz/ml/weka/index.html
  • Mallet:http://mallet.cs.umass.edu/
  • Mahout:https://mahout.apache.org/

随着最近(2015)deep learning tsunami in NLP,你可能会考虑:https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

我会避免列出非偏袒/中立的深度学习工具。

其他Stackoverflow问题也要求NLP / ML工具:

  • 机器学习和自然语言处理
  • 对自然语言处理感兴趣的人有什么好的起点?
  • 自然语言处理
  • Java中的自然语言处理(NLP)
  • 有一个很好的自然语言处理库
  • Java的简单自然语言处理启动
  • 哪些库提供基本或高级NLP方法?
  • 最新的优秀语言和自然语言处理书籍,基础知识
  • (对于NER)实体提取/识别使用免费工具同时喂养Lucene指数
  • (使用PHP)使用PHP的NLP编程工具?
  • (使用Ruby)https://stackoverflow.com/questions/3776361/ruby-nlp-libraries

#2 热门回答(37 赞)

这个问题非常开放。也就是说,不是选择一个,而是根据你想要使用的语言进行比较(因为这两种语言都有很好的库)。
Python
就Python而言,你应该首先看看的是Python Natural Language Toolkit。正如他们在描述中所述,NLTK是构建Python程序以使用人类语言数据的领先平台。它为50多种语料库和词汇资源(如WordNet)提供了易于使用的界面,还提供了一套用于分类,标记化,词干化,标记,解析和语义推理的文本处理库。

还有一些优秀的代码,你可以查看源自Google基于Python的Natural Language Toolkit项目。你可以在这里找到该代码的链接on GitHub
Java
首先要看的是斯坦福大学的Natural Language Processing Group。在那里分发的所有软件都是用Java编写的。所有最近的发行版都需要Oracle Java 6或OpenJDK 7。分发包包括用于命令行调用的组件,jar文件,Java API和源代码。

你在许多机器学习环境中看到的另一个很好的选择(一般选项),isWeka。 Weka是用于数据挖掘任务的机器学习算法的集合。算法可以直接应用于数据集,也可以从你自己的Java代码调用。 Weka包含用于数据预处理,分类,回归,聚类,关联规则和可视化的工具。它也非常适合开发新的机器学习方案。


原文链接