Java还是Python用于自然语言处理
我想知道哪个编程语言更适合处理自然语言,Java还是Python?我看到很多相关的问题和答案,但还是不知道该选哪个。
另外,我想了解在Java中应该使用哪个自然语言处理库,因为有很多库可供选择(比如LingPipe、GATE、OpenNLP、StanfordNLP)。而在Python中,大多数程序员推荐使用NLTK。
但是如果我想从非结构化数据(就是随意写的普通英语文本)中提取一些有用的信息,哪个语言更好呢?Java还是Python?用哪个库比较合适?
更新
我想做的是从非结构化数据中提取有用的产品信息(例如,用户用不太标准的英语写不同形式的手机或笔记本电脑广告)。
2 个回答
这个问题很开放。不过,既然不想只选一个,下面我会根据你想用的编程语言来比较一下(因为这两种语言都有不错的库可以使用)。
Python
如果你选择Python,首先要看看的是Python自然语言工具包(NLTK)。正如他们的介绍所说,NLTK是一个很棒的平台,可以用来构建处理人类语言数据的Python程序。它提供了简单易用的接口,可以访问超过50个语料库和词汇资源,比如WordNet,还有一系列文本处理库,能帮你进行分类、分词、词干提取、标记、解析和语义推理等操作。
另外,还有一些很棒的代码,源自谷歌的自然语言工具包项目,这些代码是基于Python的。你可以在这里找到这些代码的链接在GitHub上。
Java
如果你选择Java,首先要看看斯坦福大学的自然语言处理小组。他们那里分发的所有软件都是用Java写的。最近的版本需要Oracle Java 6以上或OpenJDK 7以上。分发包里包括命令行调用的组件、jar文件、Java API和源代码。
另一个很不错的选择是Weka,在很多机器学习环境中都能看到这个(一般选项)。Weka是一个用于数据挖掘任务的机器学习算法集合。这些算法可以直接应用于数据集,也可以从你自己的Java代码中调用。Weka包含数据预处理、分类、回归、聚类、关联规则和可视化等工具,非常适合开发新的机器学习方案。
在自然语言处理(NLP)方面,选择Java还是Python主要看个人的喜好或者项目的需求。不同的公司和项目可能会要求使用其中一种语言,通常情况下,除非你是项目的负责人,否则选择的余地不大。
除了NLTK
(www.nltk.org),Python还有其他一些文本处理的库:
- TextBlob: http://textblob.readthedocs.org/en/dev/
- Gensim: http://radimrehurek.com/gensim/
- Pattern: http://www.clips.ua.ac.be/pattern
- Spacy: http://spacy.io
- Orange: http://orange.biolab.si/features/
- Pineapple: https://github.com/proycon/pynlpl
(想了解更多,可以查看 这个链接)
对于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
这是一个关于基本字符串处理的不错比较,可以查看 这个链接
关于GATE、UIMA和OpenNLP的有用比较,可以查看 这个链接
如果你不确定选择哪种语言来进行NLP,我个人认为,“任何能给你想要的分析或输出的语言都是可以的”,可以参考 这个问题
这是一个比较新的(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
除了语言处理工具,你还需要机器学习
工具来融入到NLP
的工作流程中。
在Python
和Java
中都有很多选择,最终还是看个人的喜好和这些库是否足够友好:
Python中的机器学习库:
- Sklearn(Scikit-learn): http://scikit-learn.org/stable/
- Milk: 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(商业工具,但提供一年的免费学术许可证): https://dato.com/products/create/
(想了解更多,可以查看 这个链接)
- Weka: http://www.cs.waikato.ac.nz/ml/weka/index.html
- Mallet: http://mallet.cs.umass.edu/
- Mahout: https://mahout.apache.org/
随着最近(2015年)深度学习在NLP领域的浪潮,你可能会考虑: https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software
我会避免列出深度学习工具,以保持中立。
其他Stackoverflow上也询问NLP/ML工具的问题: