文本:它无处不在。它充斥着我们的社交媒体,塞满了我们的收件箱,并且像其他任何事物一样吸引着我们的注意力。它是如此熟悉,但作为一名程序员,它又是如此陌生。我们在很小的时候就学习口语和书面语言的基础知识,并在高中和大学学习更正式的一面,但我们大多数人在应用程序中处理文本时,从未超越非常简单的处理规则。然而,据大多数说法,非结构化内容(几乎总是文本或至少具有文本组件)构成了我们遇到的大部分数据。难道你不认为现在是时候提升你的技能以更好地处理文本了吗?
值得庆幸的是,开源领域充斥着高质量的库,可以解决文本处理中的常见问题,例如情感分析、主题识别、内容自动标记等等。更重要的是,开源还提供了许多构建模块库,使您可以轻松创新,而无需重新发明轮子。如果所有这些东西都让您回想起高中语法课,请不用担心——我们在最后 включили 一些有用的资源,以帮助您复习知识,并解释围绕自然语言处理 (NLP) 的一些关键概念。要开始您的旅程,请查看以下项目
- 斯坦福 CoreNLP 套件 一个 GPL 许可的工具框架,用于处理英语、中文和西班牙语。包括用于分词(将文本拆分为单词)、词性标注、语法解析(识别名词和动词短语等)、命名实体识别等的工具。掌握基础知识后,请务必查看斯坦福大学同一小组的其他项目。
- 自然语言工具包 (NLTK) 如果您选择的语言是 Python,那么 NLTK 是满足您许多 NLP 需求的理想之选。与斯坦福库类似,它包括分词、解析和识别命名实体以及更多功能。
- Apache Lucene 和 Solr 虽然 Lucene 和 Solr 在技术上并非旨在解决 NLP 问题,但它们包含大量用于处理文本的强大工具,从高级字符串操作实用程序到强大而灵活的分词库,再到用于处理有限状态自动机的极速库。最重要的是,您还可以免费获得搜索引擎!
- Apache OpenNLP OpenNLP 项目使用与斯坦福库不同的底层方法,是一个 Apache 许可的工具套件,用于执行分词、词性标注、解析和命名实体识别等任务。虽然其方法不一定是目前最先进的,但它仍然是一个可靠的选择,易于上手和运行。
- GATE 和 Apache UIMA 随着您的处理能力不断发展,您可能会发现自己正在构建复杂的 NLP 工作流程,这些工作流程需要集成多个不同的处理步骤。在这些情况下,您可能需要使用像 GATE 或 UIMA 这样的框架,它们可以标准化和抽象构建复杂 NLP 应用程序的大部分重复性工作。
如果所有关于解析、分词和命名实体的讨论让您想知道如何入门,请务必查看以下书籍
- 《驾驭文本》 由 Drew Farris、Tom Morton 和我本人合著,旨在帮助刚开始接触 NLP 和搜索的程序员入门。每章都解释了搜索、命名实体识别、聚类和分类等功能背后的概念。每章还展示了使用知名开源项目的工作示例。
- Steven Bird、Ewan Klein 和 Edward Loper 合著的《使用 Python 进行自然语言处理》 是 NLTK 的权威指南,引导用户完成分类、信息提取等任务。
- 如果您追求学术严谨性,那么 Christoph Manning 和 Hinrich Schütz 合著的《统计自然语言处理基础》 是一个很好的起点。它不仅解释了 NLP 许多技术背后的概念,还提供了支持它的数学原理。
一旦您进阶到更高级的 NLP 任务,您可能还希望查看诸如 Apache cTakes(针对医疗 NLP)、Apache Mahout 和马萨诸塞大学阿默斯特分校的 MALLET 等项目。如果您希望尝试使用大数据分析和复杂机器学习的新方法,请务必查看 Deeplearning4J 项目。
通过一些实践和创造力,结合开源的力量和上述项目,您的下一个应用程序很可能处于真正使语言处理像处理所有零和一一样自然的的最前沿!
本文是由 Rikki Endsley 协调的 Apache Quill 专栏的一部分。通过向 Opensource.com 提交您的故事,分享您在 Apache 软件基金会项目中的成功案例和开源更新.
5 条评论