標籤:
1.自然語言工具包(NLTK)NLTK 建立於2001 年,最初是賓州大學電腦與資訊科學系計算語言學課程的一部分。從那以後,在數十名貢獻者的協助下不斷髮展壯大。如今,它已被幾十所大學的課程所採納,並作為許多研究項目的基礎。表P -2 列出了NLTK 的一些最重要的模組。 這本書提供自然語言處理領域非常方便的入門指南。它可以用來自學,也可以作為自然語言處理或計算語言學課程的教科書,或是人工智慧、文本挖掘、語料庫語言學課程的補充讀物。本書的實踐性很強,包括幾百個實際可用的例子和分級練習。
本書基於Python 程式設計語言及其上的一個名為自然語言工具包(Natural Language Toolkit ,簡稱NLTK)的開源庫。NLTK 包含大量的軟體、資料和文檔,所有這些都可以從http://www.nltk.org/免費下載。NLTK 的發行版本支援Windows、Macintosh 和Unix 平台。
2. 獲得文本語料和詞彙語料2.1 擷取文本語料庫 通過nltk.download()下載配套的資料,本文文本語料庫包括以下:
- 古騰堡語料庫(Gutenberg)
- NLTK 包含古騰堡項目(Project Gutenberg)電子文本檔案的經過挑選的一小部分文本。該項目大約有25,000(現在是36,000 了)本免費電子書。
- 網路和聊天文本
- NLTK 的網路文本小集合的內容包括Firefox 交流論壇,在紐約無意聽到的對話,《加勒比海盜》的電影劇本,個人廣告和葡萄酒的評論等
- 布朗語料庫
- 布朗語料庫是第一個百萬詞級的英語電子語料庫的,由布朗大學於1961 年建立。這個語料庫包含500 個不同來源的文本,按照文體分類,如:新聞、社論等。
- 路透社語料庫
- 路透社語料庫包含10,788 個新聞文檔,共計130 萬字。這些文檔分成90 個主題,按照“訓練”和“測試”分為兩組。這樣分割是為了訓練和測試演算法的,這種演算法自動檢測文檔的主題。
- 就職演說語料庫
- 就職演說語料庫,實際上是55 個文本的集合,每個文本都是一個總統的演說。這個集合的一個有趣特性是它的時間維度
- 標註文本語料庫
- 包含語言學標註,有詞性標註、具名實體、句法結構、語義角色等。NLTK 中提供了很方便的方式來訪問這些語料庫中的幾個,還有一個包含語料庫和語料樣本的資料包。
- 其他語言的語料庫
NLTK 包含多國語言語料庫。
文本語料庫的結構:語料庫結構最簡單的一種沒有任何結構,僅僅是一個文本集合。通常,文本會按照其可能對應的文體、來源、作者、語言等分類。有時,這些類別會重疊,尤其是在按主題分類的情況下,因為一個文本可能與多個主題相關。偶爾的,文本集有一個時間結構,新聞集合是最常見的例子。NLTK 語料庫閱讀器支援高效的訪問大量語料庫,並且能用於處理新的語料庫。表2-3 NLTK中定義的基本語料庫函數 載入你自己的語料庫:如果你有自己收集的文字檔,並且想使用前面討論的方法訪問它們,你可以很容易地
在NLTK 中的PlaintextCorpusReader 協助下載入它們。 2.2 條件頻率分布條件頻率分布是頻率分布的集合,每個頻率分布有一個不同的“條件”,這個條件通常是文本的類別。當語料文本被分為幾類(文體、主題、作者等)時,我們可以計算每個類別獨立的頻率分布。這將允許我們研究類別之間的系統性差異。 條件頻率分布是一個對許多NLP 任務都有用的資料結構。表2-4 NLTK中條件機率分布: 定義、訪問和可視化一個計數的條件機率分布的常用方法和習慣用法2.3 詞典資源詞典或者詞典資源是一個詞和/或短語以及一些相關資訊的集合,例如:詞性和詞意定義等相關資訊。詞典資源附屬於文本,通常在文本的協助下建立和豐富。複雜的詞典資源套件括在詞彙項內和跨詞彙項的複雜的結構。 NLTK包括的詞典資源:
- 詞彙列表語料庫
NLTK 包括一些僅僅包含詞彙列表的語料庫。詞彙語料庫是Unix 中的/usr/dict/words 檔案,被一些拼字檢查程式使用。我們可以用它來尋找文本語料中不尋常的或拼字錯誤的詞彙。
- 還有一個停用詞語料庫,就是那些高頻詞彙,如:the,to,我們有時在進一步的處理之前想要將它們從文檔中過濾。停用詞通常幾乎沒有什麼詞彙內容,而它們的出現會使區分文本變困難。
- 發音的詞典
- 一個稍微豐富的詞典資源是一個表格(或試算表),在每一行中含有一個詞加一些性質。NLTK 中包括美國英語的CMU 發音詞典,它是為語音合成器使用而設計的。
- 對每一個詞,這個詞典資源提供語音的代碼——不同的聲音不同的標籤——叫做音素。
請看fire 有兩個發音(美國英語中):單音節F AY1 R 和雙音節F AY1 ER0。
- 比較詞表
- 表格詞典的另一個例子是比較詞表。NLTK 中包含了所謂的斯瓦迪士核心詞列表(Swadesh wordlists),幾種語言中約200 個常用詞的列表。
- 我們可以通過在entries()方法中指定一個語言鏈表來訪問多語言中的同源詞。
- 詞彙工具:Toolbox
- 可能最流行的語言學家用來管理資料的工具是Toolbox,以前叫做Shoebox,因為它用滿滿的檔案卡片佔據了語言學家的舊鞋盒。一個Toolbox 檔案由一個大量條目的集合組成,其中每個條目由一個或多個欄位組成。大多數欄位都是可選的或重複的,這意味著這個詞彙資源不能作為一個表格或試算表來處理。
- WordNet
- 是面向語義的英語詞典,類似與傳統辭典,但具有更豐富的結構。NLTK 中包括英語WordNet,共有155,287 個詞和117,659 個同義字集合。
2.4 WordNetWordNet的階層:WordNet 的同義字集對應於抽象的概念,它們並不總是有對應的英語詞彙。這些概念在階層中相互聯絡在一起。一些概念也很一般,如實體、狀態、事件;這些被稱為獨一無二的根同義字集。其他的,如:油老虎和有倉門式後背的汽車等就比較具體的多。圖2-8 展示了一個概念層次的一小部分。圖2-8. WordNet 概念層次片段:每個節點對應一個同義字集;邊表示上位詞/下位詞關係,即上級概念與從屬概念的關係。 更多的詞彙關係:上位詞和下位詞被稱為詞彙關係,因為它們是同義集之間的關係。這個關係定位上下為“是一個”層次。WordNet 網路另一個重要的漫遊方式是從物品到它們的組件(部分)或到它們被包含其中的東西(整體)。例如:一棵樹的部分是它的樹榦,樹冠等;這些都是part_meronyms()。一棵樹的實質是包括心材和邊材組成的,即substance_meronyms()。樹木的集合形成了一個森林,即member_holonyms()。 語義相似性:我們已經看到同義字集之間構成複雜的詞彙關係網路。給定一個同義字集,我們可以遍曆WordNet 網路來尋找相關含義的同義字集。知道哪些詞是語義相關的,對索引文本集合非常有用,當搜尋一個一般性的用語——例如:車輛——時就可以匹配包含具體用語——例如豪華轎車——的文檔。回想一下每個同義字集都有一個或多個上位詞路徑串連到一個根上位詞。串連到同一個根的兩個同義字集可能有一些共同的上位詞。如果兩個同義字集共用一個非常具體的上位詞——在上位詞階層中處於較低層的上位詞——它們一定有密切的聯絡。 2.5 小結
?? 文本語料庫是一個大型結構化文本的集合。NLTK 包含了許多語料庫,如:布朗語料庫nltk.corpus.brown。
?? 有些文本語料庫是分類的,例如通過文體或者主題分類;有時候語料庫的分類會相互重疊。
?? 條件頻率分布是一個頻率分布的集合,每個分布都有一個不同的條件。它們可以用於通過給定內容或者文體對詞的頻率計數。
?? 行數較多的Python 程式應該使用文字編輯器來輸入,儲存為.py 尾碼的檔案,並使用import 語句來訪問。
?? Python 函數允許你將一段特定的代碼塊與一個名字聯絡起來,然後重用這些代碼想用多少次就用多少次。
?? 一些被稱為“方法”的函數與一個對象聯絡在起來,我們使用對象名稱跟一個點然後跟方法名稱來調用它,就像:x.funct(y)或者word.isalpha()。
?? 要想找到一些關於變數v 的資訊,可以在Pyhon 互動式解譯器中輸入help(v)來閱讀這一類對象的協助條目。
?? WordNet 是一個面向語義的英語詞典,由同義字的集合—或稱為同義字集(synsets)—組成,並且組織成一個網路。
?? 預設情況下有些函數是不能使用的,必須使用Python 的import 語句來訪問。
《用Python進行自然語言處理》歸納一