问题可能(约100%)是主观的,但我需要建议。什么是自然语言处理的最佳语言?我知道Java和C ++,但有更简单的方法。更具体地说,我需要处理来自很多站点的文本并获取信息。
答案 0 :(得分:30)
正如我在评论中所说,问题不是关于语言,而是关于合适的库。 Java和C ++中都有很多NLP libraries。我相信你必须检查它们中的一些(用两种语言)然后,当你知道所有大量可用的库时,创建某种“大计划”,如何实现你的任务。所以,在这里,我只是给你一些链接,简要解释一下是什么。
GATE - 这正是其名称的含义 - 文本处理的一般架构。 GATE中的应用程序是一个管道。您将语言处理资源(如标记器,POS标记器,形态分析器等)放在其上并运行该过程。结果表示为一组注释 - 元信息,附加到文本的和平(例如令牌)。除了大量的plugins(包括与其他NLP资源集成的插件,如WordNet或Stanford Parser),它还有许多预定义的词典(城市,名称等)和它自己的正则表达式语言JAPE。 GATE附带自己的IDE(GATE Developer),您可以在其中尝试管道设置,然后保存并从Java代码加载。
UIMA - 或非结构化信息管理应用程序。它在架构方面与GATE非常相似。它还表示管道并生成注释集。与GATE一样,它具有可视化IDE,您可以在其中试用未来的应用程序。不同之处在于UIMA主要涉及信息提取,而GATE在没有明确考虑其目的的情况下执行文本处理。 UIMA还带有简单的REST服务器。
OpenNLP - 他们称自己是NLP上开源项目的组织中心,这是最合适的定义。主要的开发方向是将机器学习算法用于最一般的NLP任务,如词性标注,命名实体识别,共参考分辨率等。它还与UIMA很好地集成,因此它的工具也可用。
Stanford NLP - 可能是拥有NLP和ML知识的工程师和研究人员的最佳选择。与GATE和UIMA这样的库不同,它的目的不是提供尽可能多的工具,而是专注于惯用的模型。例如。你没有全面的词典,但你可以训练概率算法来创建它!除了CoreNLP组件,它提供了最常用的工具,如标记化,POS标记,NER等,它有几个非常有趣的子项目。例如。他们的Dependency framework允许你提取完整的句子结构。也就是说,您可以轻松地提取有关动词的主语和宾语的信息,这在使用其他NLP工具时要困难得多。
UIMA - 是的,Java和C ++都有完整的实现。
Stanford Parser - 一些斯坦福大学的项目仅在Java中,其他项目 - 仅在C ++中,其中一些项目以两种语言提供。您可以找到其中许多here。
许多Web服务API执行特定的语言处理,包括:
Alchemy API - 语言识别,命名实体识别,情感分析等等!看看他们的主页 - 这是非常自我描述的。
OpenCalais - 此服务尝试构建所有内容的巨型图表。您传递了一个网页URL,它使用找到的实体以及它们之间的关系丰富了此页面文本。例如,您将一个页面传递给“史蒂夫·乔布斯”并返回“Apple Inc.” (粗略地说)与史蒂夫乔布斯相同的概率。
是的,你一定要看看Python的NLTK。它不仅是一个功能强大且易于使用的NLP库,而且是极其友好的社区创建的优秀scientific stack的一部分。
更新(2017-11-15):7年后,有更多令人印象深刻的工具,很酷的算法和有趣的任务。可在此处找到一个全面的描述:
答案 1 :(得分:12)
Python和NLTK
答案 2 :(得分:7)
ScalaNLP,这是一个用Scala编写的自然语言处理库,似乎适合您的工作。
答案 3 :(得分:6)
我会推荐Python和NLTK。
根据我使用它的经验,我可以查明一些提示和注意事项:
如果学习新的编程语言是一个障碍,你可以查看openNLP for Java http://incubator.apache.org/opennlp/