自然語言處理NLTK(一):NLTK和語料庫

對于文本的研究,對于語言主要是中文,英文的研究反而會少了很多,主要還是因為應用的問題,而現在對于海外的產品來說,英文的語言處理,會越來越顯得重要,其實對英文語言處理資料會比中文的來得多,來得全,很多中文研究的方法是借鑒了英文處理的思想。

NLTK是python中研究自然語言的非常優秀的第三方庫,里面集中了非常多的自然語言處理方式的算法,不需要自己去編寫算法,可以讓我們更多的去關系應用本身。

NLTK的安裝

NLTK的安裝,跟python安裝第三方包并沒有太多的區別。

pip install nltk

對于語料庫的下載,在有較好的網絡環境下可以直接使用python代碼

import nltk
nltk.download()

選擇所有的語料庫下載:

語料庫比較大,壓縮文件差不多有500M,如果網絡環境一般,可以單獨下載,放在相應的目錄下,查找目錄的方法如下:

import nltk
print ntlk.data.find('*')

可以顯示出來,應該把包放在哪個目錄下:

 Searched in:
    - 'C:\\Users、\nltk_data'
    - 'C:\\nltk_data'
    - 'D:\\nltk_data'
    - 'E:\\nltk_data'
    - 'C:\\Python27\\nltk_data'
    - 'C:\\Python27\\lib\\nltk_data'
    - 'C:\\Users\nltk_data'

語料庫

所有的語料庫都存放在nltk_data\corpora下,corpora為資料庫的意思,這里包含了大量的語料庫,主要的如下:

古騰堡語料庫

NLTK包含古騰堡項目( Project Gutenberg)電子文本檔案的經過挑選的一小部分文 本。該項目大約有 25,000(現在是 36,000了) 本免費電子圖書,放在 http://www.gutenberg. org/上。資料庫在:nltk_data\corpora\gutenberg下。

網絡和聊天文本

雖然古騰堡項目包含成千上萬的書籍,它代表既定的文學。考慮較不正式的語言也是 很重要的。 NLTK的網絡文本小集合的內容包括 Firefox交流論壇, 在紐約無意聽到的對話, 《加勒比海盜》的電影劇本,個人廣告和葡萄酒的評論。資料庫在:nltk_data\corpora\webtext下。

布朗語料庫

布朗語料庫是第一個百萬詞級的英語電子語料庫的,由布朗大學于 1961年創建。這個 語料庫包含500個不同來源的文本, 按照文體分類, 如: 新聞、 社論等。 表 2-1給出了各個 文體的例子(完整列表,請參閱http://icame.uib.no/brown/bcm-los.html)。資料庫在:nltk_data\corpora\brown下。

路透社語料庫

路透社語料庫包含 10,788個新聞文檔, 共計130萬字。 這些文檔分成90個主題, 按照 “ 訓練” 和“ 測試” 分為兩組。因此, fileid為“ test/14826” 的文檔屬于測試組。這樣分割 是為了訓練和測試算法的,這種算法自動檢測文檔的主題,資料庫在:nltk_data\corpora\webtext下。

就職演說語料庫

我們看到了就職演說語料庫,但是把它當作一個單獨的文本對待。在圖 1-2 中使用的“ 詞偏移”就像是一個坐標軸, 它是語料庫中詞的索引數, 從第一個演講的第一個 詞開始算起。然而,語料庫實際上是 55個文本的集合,每個文本都是一個總統的演說。

標注文本語料庫

許多文本語料庫都包含語言學標注,有詞性標注、命名實體、句法結構、語義角色等。 NLTK中提供了很方便的方式來訪問這些語料庫中的幾個,還有一個包含語料庫和語料樣本 的數據包, 用于教學和科研的話可以免費下載。 表 2-2列出了其中一些語料庫。 有關下載信 息請參閱 http://www.nltk.org/data。關于如何訪問 NLTK語料庫的其它例子, 請在http://www. nltk.org/howto查閱語料庫的 HOWTO。

其他語言的語料庫

這里可以發現,nltk.download中存在著非常多的資料庫,英文的居多,中文的語料庫相對來說會少很多,這一點在進行機器對話的編程過程,就發現了這個問題,好的優質的中文資料庫相當的少,而從nltk來看,語料庫是基礎,巧婦難為無米之炊。

文本語料庫的結構

目前為止, 我們已經看到了大量的語料庫結構。 圖 2-3中總結了它們。 最簡單的一種 沒有任何結構,僅僅是一個文本集合。通常,文本會按照其可能對應的文體、來源、作者、 語言等分類。 有時, 這些類別會重疊, 尤其是在按主題分類的情況下, 因為一個文本可能與 多個主題相關。偶爾的,文本集有一個時間結構,新聞集合是最常見的例子。 NLTK語料庫閱讀器支持高效的訪問大量語料庫,并且能用于處理新的語料庫。如下列出了語料庫閱讀器提供的函數。

圖2-3. 文本語料庫的常見結構:最簡單的一種語料庫是一些孤立的沒有什么特別的組織的 文本集合; 一些語料庫按如文體( 布朗語料庫) 等分類組織結構; 一些分類會重疊, 如主題 類別(路透社語料庫);另外一些語料庫可以表示隨時間變化語言用法的改變(就職演說語 料庫)。 表2-3. NLTK中定義的基本語料庫函數:使用 help(nltk.corpus.reader)可以找到更多的文檔, 也可以閱讀http://www.nltk.org/howto上的在線語料庫的 HOWTO。

具體的用法如下:

獲取gutenberg項目目錄下,有哪些文件

import nltk
print nltk.corpus.gutenberg.fileids()

得到如下的文件:

[u'austen-emma.txt', u'austen-persuasion.txt', u'austen-sense.txt', u'bible-kjv.txt', u'blake-poems.txt', u'bryant-stories.txt', u'burgess-busterbrown.txt', u'carroll-alice.txt', u'chesterton-ball.txt', u'chesterton-brown.txt', u'chesterton-thursday.txt', u'edgeworth-parents.txt', u'melville-moby_dick.txt', u'milton-paradise.txt', u'shakespeare-caesar.txt', u'shakespeare-hamlet.txt', u'shakespeare-macbeth.txt', u'whitman-leaves.txt']

條件頻率分布

當語料文本分為幾類(文體、主題、作者)時,可以計算每個類別獨立的頻率分布,這樣就可以研究類別之間的系統性差異。——nltk.ConditionalFreqDist來實現、條件頻率分布是頻率分布的集合,每個頻率分布有一個不同的‘條件’(通常為文本的類別)——(條件,事件)的形式。

例子:繪制特定演講中出現['america','citizen']的次數隨時間變化情況

#! /usr/bin/python
# -*- coding:utf-8 -*-

import nltk
from nltk.corpus import inaugural

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()

顯示出在某一年度下,某一個詞出現的次數。

轉載請標明來之:http://www.peyycv.tw/

更多教程:阿貓學編程

自然語言處理NLTK 系類文章

所有評論

如果對文章有異議,請加qq:1752338621