NLTK 是使用 Python 教學以及實踐計算語言學的極好工具。此外,計算語言學與人工 智能、語言/專門語言識別、翻譯以及語法檢查等領域關系密切。
NLTK 包括什么
NLTK 會被自然地看作是具有棧結構的一系列層,這些層構建于彼此基礎之上。那些熟悉人工語言(比如 Python)的文法 和解析的讀者來說,理解自然語言模型中類似的 —— 但更深奧的 —— 層不會有太大困難。
術語表
全集(Corpora):相關文本的集合。例如,莎士比亞的作品可能被統稱為一個 文集(corpus); 而若干個作者的作品稱為 全集。
直方圖(Histogram):數據集中不同單詞、字母或其他條目的出現頻率的統計分布。
結構(Syntagmatic):對語段的研究;也就是全集中字母、單詞或短語連續出現的統計關系。
上下文無關語法(Context-free grammar): 由四類形式語法構成的 Noam Chomsky 層級中的第二類。參閱 參考資料 以獲得 詳盡描述。
盡管 NLTK 附帶了很多已經預處理(通常是手工地)到不同程度的全集,但是概念上每一層 都是依賴于相鄰的更低層次的處理。首先是斷詞;然后是為單詞加上 標簽;然后將成組 的單詞解析為語法元素,比如名詞短語或句子(取決于幾種技術中的某一種,每種技術都有其優缺點); 最后對最終語句或其他語法單元進行分類。通過這些步驟,NLTK 讓您可以生成關于不同元素出現情況 的統計,并畫出描述處理過程本身或統計合計結果的圖表。
在本文中,您將看到關于低層能力的一些相對完整的示例,而對大部分高層次能力將只是進行簡單抽象的描述。 現在讓我們來詳細分析文本處理的首要步驟。
斷詞(Tokenization)
您可以使用 NLTK 完成的很多工作,尤其是低層的工作,與使用 Python 的基本數據結構來完成相比,并 沒有 太 大的區別。不過,NLTK 提供了一組由更高的層所依賴和使用的系統化的接口,而不只是 簡單地提供實用的類來處理加過標志或加過標簽的文本。
具體講, nltk.tokenizer.Token 類被廣泛地用于存儲文本的有注解的片斷;這些 注解可以標記很多不同的特性,包括詞類(parts-of-speech)、子標志(subtoken)結構、一個標志(token) 在更大文本中的偏移位置、語形詞干 (morphological stems)、文法語句成分,等等。實際上,一個 Token 是一種 特別的字典 —— 并且以字典形式訪問 —— 所以它可以容納任何您希望的鍵。在 NLTK 中使用了一些專門的鍵, 不同的鍵由不同的子程序包所使用。
讓我們來簡要地分析一下如何創建一個標志并將其拆分為子標志:
清單 1. 初識 nltk.tokenizer.Token 類
>>> from nltk.tokenizer import *>>> t = Token(TEXT='This is my first test sentence')>>> WSTokenizer().tokenize(t, addlocs=True) # break on whitespace>>> print t['TEXT']This is my first test sentence>>> print t['SUBTOKENS'][<This>@[0:4c], <is>@[5:7c], <my>@[8:10c], <first>@[11:16c],<test>@[17:21c], <sentence>@[22:30c]]>>> t['foo'] = 'bar'>>> t<TEXT='This is my first test sentence', foo='bar',SUBTOKENS=[<This>@[0:4c], <is>@[5:7c], <my>@[8:10c], <first>@[11:16c],<test>@[17:21c], <sentence>@[22:30c]]>>>> print t['SUBTOKENS'][0]<This>@[0:4c]>>> print type(t['SUBTOKENS'][0])<class 'nltk.token.SafeToken'>
新聞熱點
疑難解答