Python自然語言處理 2 獲得文字語料和詞彙資源

CopperDong發表於2017-11-17


#古騰堡語料庫----文學作品

   Project Gutenberg

import nltk

nltk.corpus.gutenberg.fileids()

emma = nltk.corpus.gutenberg.words('austen-emma.txt')    #<簡愛>

len(emma)

192427
文字的3個統計量:平均詞長,平均句子長度和每個詞出現的平均次數

sents()函式把文字劃分成句子,其中每一個句子是一個詞連結串列

macheth_sentences = nltk.corpus.gutenberg.sents("shakespeare-macbeth.txt")

macheth_sentences

[[u'[', u'The', u'Tragedie', u'of', u'Macbeth', u'by', u'William', u'Shakespeare', u'1603', u']'], [u'Actus', u'Primus', u'.'], ...]

#網路和聊天文字---論壇,電影劇本

from nltk.corpus import webtext

for fileid in webtext.fileids():
    print fileid, webtext.raw(fileid)[:65], '...'

from nltk.corpus import nps_chat

chatroom = nps_chat.posts('10-19-20s_706posts.xml')

chatroom[123]

#布朗語料庫----英語電子語料庫,1961年建立,有新聞,社論等

from nltk.corpus  import brown

brown.categories()

布朗語料庫是一個研究文體之間的系統性差異,讓我們來比較不同文體中的情態動詞的用法

news_text = brown.words(categories='news')

fdist = nltk.FreqDist([w.lower() for w in news_text])

modals = ['can', 'could', 'may', 'might', 'must', 'will']

for m in modals:
    print m + ':', fdist[m],

can: 94 could: 87 may: 93 might: 38 must: 53 will: 389
條件頻率分佈函式

cfd = nltk.ConditionalFreqDist( (genre, word) for genre in brown.categories() for word in brown.words(categories=genre))

genres = ['news', 'religion', 'hobbies', 'science_fiction', 'romance', 'humor']

modals = ['can', 'could', 'may', 'might', 'must', 'will']

cfd.tabulate(conditions=genres, samples=modals)

                  can could   may might  must  will 
           news    93    86    66    38    50   389 
       religion    82    59    78    12    54    71 
        hobbies   268    58   131    22    83   264 
science_fiction    16    49     4    12     8    16 
        romance    74   193    11    51    45    43 
          humor    16    30     8     8     9    13 
發現新聞文體中最常見的情態動詞是will,而言情文體中最常見的情態動詞是could

#路透社語料庫----包含10788個新聞文件,90個主題

按照"訓練"和"測試"分為兩組,編號為"test/14826"的文件屬於測試組
from nltk.corpus import reuters

reuters.fileids()

reuters.categories()

與布朗語料庫不同,路透社語料庫的類別是互相重疊的,因為新聞報導往往涉及多個主題

reuters.categories('training/9865')

[u'barley', u'corn', u'grain', u'wheat']

reuters.words('training/9865')[:14]    #標題

#就職演說語料庫

from nltk.corpus import inaugural

inaugural.fileids()

[u'1789-Washington.txt',
 u'1793-Washington.txt',
 u'1797-Adams.txt',
 u'1801-Jefferson.txt',
 u'1805-Jefferson.txt',
 u'1809-Madison.txt',
 u'1813-Madison.txt',
 u'1817-Monroe.txt',
 u'1821-Monroe.txt',
 u'1825-Adams.txt',

#標註文字語料庫

許多文字語料庫都包含語言學標註,有詞性標註,命名實體,句法結構,語義角色

http://www.nltk.org/data

http://www.nltk.org/howto

#其他語言的語料庫


#文字語料庫的結構



#載入自己的語料庫


二,條件頻率分佈



四  詞典資源

詞典或者詞典資源是一個詞和/或短語及其相關資訊的集合.

#詞彙列表語料庫

過濾不常見的或拼寫錯誤的詞彙

def unusual_words(text):


停用詞語料庫

from nltk.corpus import stopwords

stopwords.words('english')

名字語料庫

names = nltk.corpus.names

names.fileids()    #男名和女名

[u'female.txt', u'male.txt']

#發音的詞典

entries = nltk.corpus.cmudict.entries()

len(entries)

entries[1]

(u'a.', [u'EY1'])

對每個詞都有語音的程式碼,CMU發音詞典中的符號是從Arpabet來的,參考http://en.wikipedia.org/wiki/Arpabet

#比較詞表

幾種語言的約200個常用詞的列表

#詞彙工具:Toolbox 和 Sheobox

http://www.sil.org/computing/toolbox下載


五 WordNet

面向語義的英語詞典,共有155287個單詞和117659個同義詞

#意義與同義詞

from nltk.corpus import wordnet as wn

wn.synsets('motorcar')     #同義詞

[Synset('car.n.01')]
wn.synset('car.n.01').lemma_names()   #同義詞集

[u'car', u'auto', u'automobile', u'machine', u'motorcar']

wn.synset('car.n.01').definition()   #意義

u'a motor vehicle with four wheels; usually propelled by an internal combustion engine'

#WordNet的層次結構

獨一無二的根同義詞集


上位詞和下位詞

反義詞

語義相似度

七, 深入閱讀

Ethnologue有著世界上完整的語言的清單http://www.ethnologue.com


































相關文章