12 種天然語言處理的開源工具

https://linux.cn/article-11927-1.htmlhtml


讓咱們看看能夠用在你本身的 NLP 應用中的十幾個工具吧。node

在過去的幾年裏,天然語言處理(NLP)推進了聊天機器人、語音助手、文本預測等這些滲透到咱們的平常生活中的語音或文本應用程技術的發展。目前有着各類各樣開源的 NLP 工具,因此我決定調查一下當前開源的 NLP 工具來幫助你制定開發下一個基於語音或文本的應用程序的計劃。linux

儘管我並不熟悉全部工具,但我將從我所熟悉的編程語言出發來介紹這些工具(對於我不熟悉的語言,我沒法找到大量的工具)。也就是說,出於各類緣由,我排除了三種我熟悉的語言以外的工具。git

R 語言多是沒有被包含在內的最重要的語言,由於我發現的大多數庫都有一年多沒有更新了。這並不必定意味着它們沒有獲得很好的維護,但我認爲它們應該獲得更多的更新,以便和同一領域的其餘工具競爭。我還選擇了最有可能用在生產場景中的語言和工具(而不是在學術界和研究中使用),而我主要是使用 R 做爲研究和發現工具。github

我也驚訝地發現 Scala 的不少庫都沒有更新了。我上次使用 Scala 已通過去了兩年了,當時它很是流行。可是大多數庫從那個時候就再沒有更新過,或者只有少數一些有更新。算法

最後,我排除了 C++。 這主要是由於我上次使用 C++ 編寫程序已經有不少年了,而我所工做的組織尚未將 C++ 用於 NLP 或任何數據科學方面的工做。apache

Python 工具

天然語言工具包(NLTK)

毋庸置疑,天然語言工具包(NLTK)是我調研過的全部工具中功能最完善的一個。它幾乎實現了天然語言處理中多數功能組件,好比分類、令牌化、詞幹化、標註、分詞和語義推理。每個都有多種不一樣的實現方式,因此你能夠選擇具體的算法和方式。同時,它也支持不一樣的語言。然而,它以字符串的形式表示全部的數據,對於一些簡單的數據結構來講可能很方便,可是若是要使用一些高級的功能來講就可能有點困難。它的使用文檔有點複雜,但也有不少其餘人編寫的使用文檔,好比這本很棒的書。和其餘的工具比起來,這個工具庫的運行速度有點慢。但總的來講,這個工具包很是不錯,能夠用於須要具體算法組合的實驗、探索和實際應用當中。npm

SpaCy

SpaCy 多是 NLTK 的主要競爭者。在大多數狀況下都比 NLTK 的速度更快,可是 SpaCy 的每一個天然語言處理的功能組件只有一個實現。SpaCy 把全部的東西都表示爲一個對象而不是字符串,從而簡化了應用構建接口。這也方便它與多種框架和數據科學工具的集成,使得你更容易理解你的文本數據。然而,SpaCy 不像 NLTK 那樣支持多種語言。它確實接口簡單,具備簡化的選項集和完備的文檔,以及用於語言處理和分析各類組件的多種神經網絡模型。總的來講,對於須要在生產中表現出色且不須要特定算法的新應用程序,這是一個很不錯的工具。編程

TextBlob

TextBlob 是 NLTK 的一個擴展庫。你能夠經過 TextBlob 用一種更簡單的方式來使用 NLTK 的功能,TextBlob 也包括了 Pattern 庫中的功能。若是你剛剛開始學習,這將會是一個不錯的工具,能夠用於對性能要求不過高的生產環境的應用。整體來講,TextBlob 適用於任何場景,可是對小型項目尤佳。小程序

Textacy

這個工具是我用過的名字最好聽的。先重讀「ex」再帶出「cy」,多讀「Textacy」幾回試試。它不只僅是名字讀起來好,同時它自己也是一個很不錯的工具。它使用 SpaCy 做爲它天然語言處理核心功能,但它在處理過程的先後作了不少工做。若是你想要使用 SpaCy,那麼最好使用 Textacy,從而不用去編寫額外的附加代碼就能夠處理不一樣種類的數據。

PyTorch-NLP

PyTorch-NLP 纔出現短短的一年,但它已經有一個龐大的社區了。它適用於快速原型開發。當出現了最新的研究,或大公司或者研究人員推出了完成新奇的處理任務的其餘工具時,好比圖像轉換,它就會被更新。整體來講,PyTorch 的目標用戶是研究人員,但它也能用於原型開發,或使用最早進算法的初始生產載荷中。基於此基礎上的建立的庫也是值得研究的。

Node.js 工具

Retext

RetextUnified 集合的一部分。Unified 是一個接口,可以集成不一樣的工具和插件以便它們可以高效的工做。Retext 是 Unified 工具中使用的三種語法之一,另外的兩個分別是用於 Markdown 的 Remark 和用於 HTML 的 Rehype。這是一個很是有趣的想法,我很高興看到這個社區的發展。Retext 沒有涉及不少的底層技術,更多的是使用插件去完成你在 NLP 任務中想要作的事情。拼寫檢查、字形修復、情緒檢測和加強可讀性均可以用簡單的插件來完成。整體來講,若是你不想了解底層處理技術又想完成你的任務的話,這個工具和社區是一個不錯的選擇。

Compromise

Compromise 顯然不是最複雜的工具,若是你正在找擁有最早進的算法和最完備的系統的話,它可能不適合你。然而,若是你想要一個性能好、功能普遍、還能在客戶端運行的工具的話,Compromise 值得一試。整體來講,它的名字(「折中」)是準確的,由於做者更關注更具體功能的小軟件包,而在功能性和準確性上有所折中,這些小軟件包得益於用戶對使用環境的理解。

Natural

Natural 包含了常規天然語言處理庫所具備的大多數功能。它主要是處理英文文本,但也包括一些其它語言,它的社區也歡迎支持其它的語言。它可以進行令牌化、詞幹化、分類、語音處理、詞頻-逆文檔頻率計算(TF-IDF)、WordNet、字符類似度計算和一些變換。它和 NLTK 有的一比,由於它想要把全部東西都包含在一個包裏頭,但它更易於使用,並且不必定專一於研究。總的來講,這是一個很是完整的庫,目前仍在活躍開發中,但可能須要對底層實現有更多的瞭解才能徹底發揮效力。

Nlp.js

Nlp.js 創建在其餘幾個 NLP 庫之上,包括 Franc 和 Brain.js。它爲許多 NLP 組件提供了一個很好的接口,好比分類、情感分析、詞幹化、命名實體識別和天然語言生成。它也支持一些其它語言,在你處理英語以外的語言時能提供一些幫助。總之,它是一個不錯的通用工具,而且提供了調用其餘工具的簡化接口。在你須要更強大或更靈活的工具以前,這個工具可能會在你的應用程序中用上很長一段時間。

Java 工具

OpenNLP

OpenNLP 是由 Apache 基金會管理的,因此它能夠很方便地集成到其餘 Apache 項目中,好比 Apache Flink、Apache NiFi 和 Apache Spark。這是一個通用的 NLP 工具,包含了全部 NLP 組件中的通用功能,能夠經過命令行或者以包的形式導入到應用中來使用它。它也支持不少種語言。OpenNLP 是一個很高效的工具,包含了不少特性,若是你用 Java 開發生產環境產品的話,它是個很好的選擇。

Stanford CoreNLP

Stanford CoreNLP 是一個工具集,提供了統計 NLP、深度學習 NLP 和基於規則的 NLP 功能。這個工具也有許多其餘編程語言的版本,因此能夠脫離 Java 來使用。它是由高水平的研究機構建立的一個高效的工具,但在生產環境中可能不是最好的。此工具採用雙許可證,具備能夠用於商業目的的特定許可證。總之,在研究和實驗中它是一個很棒的工具,但在生產系統中可能會帶來一些額外的成本。比起 Java 版原本說,讀者可能對它的 Python 版本更感興趣。一樣,在 Coursera 上最好的機器學習課程之一是斯坦福教授提供的,點此訪問其餘不錯的資源。

CogCompNLP

CogCompNLP 由伊利諾斯大學開發的一個工具,它也有一個類似功能的 Python 版本。它能夠用於處理文本,包括本地處理和遠程處理,可以極大地緩解你本地設備的壓力。它提供了不少處理功能,好比令牌化、詞性標註、斷句、命名實體標註、詞型還原、依存分析和語義角色標註。它是一個很好的研究工具,你能夠本身探索它的不一樣功能。我不肯定它是否適合生產環境,但若是你使用 Java 的話,它值得一試。


你最喜歡的開源 NLP 工具和庫是什麼?請在評論區分享文中沒有提到的工具。


via: https://opensource.com/article/19/3/natural-language-processing-tools

做者:Dan Barker 選題:lujun9972 譯者:zxp 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

訂閱「Linux 中國」官方小程序來查看

相關文章
相關標籤/搜索