NLTK学习笔记(二):文本、语料资源和WordNet汇总
目錄
- 語(yǔ)料庫(kù)基本函數(shù)表
- 文本語(yǔ)料庫(kù)分類(lèi)
- 常見(jiàn)語(yǔ)料庫(kù)及其用法
- 載入自定義語(yǔ)料庫(kù)
- 詞典資源
- 停用詞語(yǔ)料庫(kù)
- WordNet面向語(yǔ)義的英語(yǔ)字典
- 語(yǔ)義相似度
語(yǔ)料庫(kù)基本函數(shù)表
| fileids() | 語(yǔ)料庫(kù)中的文件 |
| fileids([categories]) | 對(duì)應(yīng)分類(lèi)中的語(yǔ)料庫(kù)文件 |
| categories() | 語(yǔ)料庫(kù)的分類(lèi) |
| categories([fileids]) | 文件對(duì)應(yīng)的語(yǔ)料庫(kù)分類(lèi) |
| raw(fileids=[f1,f2..],categories=[c1,c2...]) | 對(duì)應(yīng)文件和分類(lèi)中原始內(nèi)容。參數(shù)可以式空 |
| words(fileids=[f1,f2..],categories=[c1,c2...]) | 對(duì)應(yīng)文件和分類(lèi)的詞匯。參數(shù)可以空 |
| sents() | sents(fileids=[f1,f2..],categories=[c1,c2...]) |
| abspath(fileid) | 文件在磁盤(pán)的位置 |
| encoding(fileid) | 文件的編碼 |
| open(fileid) | 打開(kāi)文件流 |
| root() | 本地語(yǔ)料庫(kù)corpus的位置 |
| readme() | README文件的內(nèi)容 |
文本語(yǔ)料庫(kù)分類(lèi)
常見(jiàn)語(yǔ)料庫(kù)及其用法
注意nltk.Text(string) 返回類(lèi)似text1的Text對(duì)象
古藤堡語(yǔ)料庫(kù)
包含36000本電子書(shū),可以在這里下載
from nltk.corpus import gutenberg print(gutenberg.fileids())emma= gutenberg.words('austen-emma.txt') print(gutenberg.raw('austen-emma.txt')) emma = nltk.Text(emma)# print(emma[:10])網(wǎng)絡(luò)&&聊天體
網(wǎng)絡(luò)text主要是非正式文學(xué),論壇交流,劇本,評(píng)論等。聊天文本是根據(jù)聊天室劃分的(文件名包括 日期、聊天室、帖子數(shù)量),被劃分為15個(gè)大文件。
#網(wǎng)絡(luò)體:webtext from nltk.corpus import webtext for fileid in webtext.fileids():print(fileid,webtext.raw(fileid)[:50]) [out] firefox.txt Cookie Manager: "Don't allow sites that set remove grail.txt SCENE 1: [wind] [clop clop clop] KING ARTHUR: Who overheard.txt White guy: So, do you have any plans for this even pirates.txt PIRATES OF THE CARRIBEAN: DEAD MAN'S CHEST, by Ted singles.txt 25 SEXY MALE, seeks attrac older single lady, for wine.txt Lovely delicate, fragrant Rhone wine. Polished lea #聊天體:nps_chat from nltk.corpus import nps_chat chatroom = nps_chat.posts('10-19-20s_706posts.xml') chatroom[123:125] [out] [['i','do',"n't",'want','hot','pics','of','a','female',',','I','can','look','in','a','mirror','.'],['hi', 'U64']]布朗語(yǔ)料庫(kù)
百萬(wàn)詞級(jí)語(yǔ)料庫(kù),沒(méi)啥好說(shuō)的。按照文本分類(lèi),如新聞、社論等。
from nltk.corpus import brown print(brown.categories()) print(brown.fileids())因?yàn)檫@個(gè)語(yǔ)料庫(kù)是研究文本間系統(tǒng)性差異的資源,所以可以來(lái)比較一下不同文本中情態(tài)動(dòng)詞的用法。
import nltk from nltk.corpus import brown news = brown.words(categories='news') fdist = nltk.FreqDist([w.lower() for w in news]) modals= ['can','could','may','might','must','will'] for m in modals:print(m,':',fdist[m])路透社語(yǔ)料庫(kù)
新聞文檔,分為“訓(xùn)練”和“測(cè)試”兩組。便于及其進(jìn)行訓(xùn)練和測(cè)試。命名就是'test/number'和'training/number'
from nltk.corpus import reuters print(reuters.fileids()) print(reuters.categories())就職演說(shuō)語(yǔ)料庫(kù)
感覺(jué)這算是美國(guó)特色吧。因?yàn)槊捎?#39;year-name.txt'的格式,我們可以提取出來(lái)時(shí)間維度,并且做個(gè)折線圖來(lái)統(tǒng)計(jì)特定詞匯的出現(xiàn)頻率(不同年代中)
from nltk.corpus import inaugural print(list(f[:4]for f in inaugural.fileids())) #下面體現(xiàn)American和citizen隨時(shí)間推移使用情況 cfd = nltk.ConditionalFreqDist(\(target,fileid[:4])\for fileid in inaugural.fileids()\for w in inaugural.words(fileid)\for target in ['america','citizen']\if w.lower().startswith(target)) cfd.plot()感受一下效果圖(附截圖)
載入自定義語(yǔ)料庫(kù)
如果想操作自己的語(yǔ)料庫(kù),并且使用之前的方法,那么,需要PlaintextCorpusReader 函數(shù)來(lái)載入他們,這個(gè)函數(shù)參數(shù)有兩個(gè),第一個(gè)是根目錄,第二個(gè)是子文件(可以使用正則表達(dá)式進(jìn)行匹配)
from nltk.corpus import PlaintextCorpusReader root = r'C:\Users\Asura-Dong\Desktop\tem\dict' wordlist = PlaintextCorpusReader(root,'.*')#匹配所有文件 print(wordlist.fileids()) print(wordlist.words('tem1.txt')) 輸出結(jié)果: ['README', 'tem1.txt'] ['hello', 'world']詞典資源
詞典:包括詞性和注釋信息。
停用詞語(yǔ)料庫(kù)
stopwords即是,遺憾的是沒(méi)有中文停用詞
from nltk.corpus import stopwords #定義一個(gè)計(jì)算func計(jì)算不在停用詞列表中的比例的函數(shù) def content(text):stopwords_eng = stopwords.words('english')content = [w for w in text if w.lower() and w not in stopwords_eng]return len(content)/len(text) print(content(nltk.corpus.reuters.words()))名字詞典
就兩部分組成,男性和女性的英文名字。這里我們研究一下最后一個(gè)名字最后一個(gè)字母和性別的關(guān)系
names = nltk.corpus.names print(names.fileids()) male = names.words('male.txt') female = names.words('female.txt') cfd = nltk.ConditionalFreqDist((fileid,name[-1]) for fileid in names.fileids() for name in names.words(fileid)) cfd.plot()(附截圖)
發(fā)音詞典
這個(gè)更神奇,竟然是為了發(fā)音合成準(zhǔn)備的。以后通讀這本書(shū)后,也想想怎么遷移到中文上。
引入 nltk.corpus.cmudict 后,我們可以得到它音素的長(zhǎng)度,由此可以找到押韻的詞語(yǔ)。
s = ['N','IHO','K','S'] entries = nltk.corpus.cmudict.entries() print('Example:',entries[0]) word_list = [word for word,pron in entries if pron[-4:]==s] print(word_list)在因素表中,我們會(huì)發(fā)現(xiàn)數(shù)字:1,2,0。分別代表著:主重音、次重音、無(wú)重音。
這里我們可以定義一個(gè)function,找到具有特定重音模式的詞匯。
WordNet面向語(yǔ)義的英語(yǔ)字典
最后必須說(shuō)一下這個(gè)字典。WordNet是由Princeton 大學(xué)的心理學(xué)家,語(yǔ)言學(xué)家和計(jì)算機(jī)工程師聯(lián)合設(shè)計(jì)的一種基于認(rèn)知語(yǔ)言學(xué)的英語(yǔ)詞典。它不是光把單詞以字母順序排列,而且按照單詞的意義組成一個(gè)“單詞的網(wǎng)絡(luò)”。
引入和同義詞
motorcar和automobile是同義詞,可以借助wordnet來(lái)研究。
from nltk.corpus import wordnet as wn wn.synsets('motorcar')結(jié)果是:[Synset('car.n.01')]。說(shuō)明motorcar 只有一個(gè) 可能的含義。car.n.01被稱(chēng)為“同義 詞集 ”。我們可以通過(guò)wn.synset('car.n.01').lemma_names 來(lái)查看當(dāng)前同義詞集的其他詞 (car這個(gè)單詞就有很多個(gè)同義詞集了) 。wn.synset('car.n.01').examples 和wn.synset('car.n.01').definition 可以分別查看定義和例子(但是Python3里面不可以。)
而類(lèi)似car.n.01.car這樣的處于下一級(jí)的稱(chēng)之為詞條。
對(duì)于詞條級(jí)別的obj,可以看下面的操作。
上位詞、下位詞、反義詞
上位詞(hypernym),指概念上外延更廣的主題詞。 例如:”花”是”鮮花”的上位詞,”植物”是”花”的上位詞,”音樂(lè)”是”mp3”的上位詞。反過(guò)來(lái)就是下位詞了。
上位詞和下位詞通過(guò)hyponyms() 和 root_hypernyms() 來(lái)訪問(wèn)。
motorcar = wn.synset('car.n.01').hyponyms()#下位詞 car = wn.synset('car.n.01').root_hypernyms()反義詞就通過(guò)antonyms() 來(lái)訪問(wèn)
其他詞集關(guān)系
之前是從上->到下,或者反過(guò)來(lái)。更重要的是從整體->局部,或者反過(guò)來(lái)。如大樹(shù)和樹(shù)冠、樹(shù)干的關(guān)系,這些是part_meronyms() 。而大樹(shù)集合就成了森林,member_holonyms() 。而樹(shù)的實(shí)質(zhì)是心材和邊材組成,即substance_meronyms()。
語(yǔ)義相似度
當(dāng)兩個(gè)單詞有相同的上位詞(在詞樹(shù)中尋找),而若上位詞恰好屬于較低層,那么它們會(huì)有一定密切聯(lián)系。
right = wn.synset('right_whale.n.01') orca = wn.synset('orca.n.01') print(right.lowest_common_hypernyms(orca))當(dāng)然,類(lèi)似于樹(shù)的結(jié)構(gòu)中總是有神的,可以通過(guò)min_depth() 來(lái)查看一個(gè)synset的最小深度。基于這些,我們可以在0-1的范圍內(nèi)返回相似度。對(duì)于上面的代碼,查看相似度:right.path_similarity(orca)。
這些數(shù)字大小意義不大。但是當(dāng)鯨魚(yú)和鯨魚(yú)、鯨魚(yú)和小說(shuō)來(lái)比較時(shí),數(shù)字是減小的。對(duì)比著看大小,還是有意義的。
轉(zhuǎn)載于:https://www.cnblogs.com/AsuraDong/p/6958046.html
總結(jié)
以上是生活随笔為你收集整理的NLTK学习笔记(二):文本、语料资源和WordNet汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python学习之--安装IDE(ecl
- 下一篇: 一张表按分类查询:只显示前2行