NLTK-004:加工原料文本
從網絡和硬盤訪問文本

編號 2554 的文本是《罪與罰》的英文翻譯,我們可以用如下方式訪問它。
from urllib import request url = "http://www.gutenberg.org/files/2554/2554.txt" response = request.urlopen(url) raw = response.read().decode('utf8')
1
2
3
4
(如果是404之類的,得找個代理外網IP,下面訪問的都一樣… )
所以假設獲取到了內容。變量raw是這本書原始的內容,包括很多我們不感興趣的細節,如空格、換行符和空 行。請注意,文件中行尾的\r 和\n,是 Python 用來顯示特殊的回車和換行字符的方式
我們要對其進行分詞操作,產生一個詞匯和標點符號的鏈表。
tokens = nltk.word_tokenize(raw)
1
我們現在采取進一步的步驟從這個鏈表創建一個 NLTK 文本
text = nltk.Text(tokens)
1
我們可以進行我們在之前看到的所有的其他語言的處理,也包括常規的鏈表操作,例如切片:
text[1024:1062]
1
處理HTML
網絡上的文本大部分是 HTML 文件的形式。 HTML 的全部內容包括: meta 元標簽、圖像標簽、map 標
簽、JavaScript、表單和表格。
我們可以使用BeautifulSoup或者其他庫來從HTML中提取文本,然后我們可以對原始文本進行分詞:
from bs4 import BeautifulSoup raw = BeautifulSoup(html).get_text() tokens = nltk.word_tokenize(raw)
1
2
3
你可以選擇你感興趣的標識符,按照前面講的那樣初始化一個文本。
tokens = tokens[110:390] text = nltk.Text(tokens) text.concordance('gene')
1
2
3
訪問單個字符
我們可以計數單個字符。通過將所有字符小寫來忽略大小寫的區分,并過濾掉非字母字符。
from nltk.corpus import gutenberg raw = gutenberg.raw('melville-moby_dick.txt') fdist = nltk.FreqDist(ch.lower() for ch in raw if ch.isalpha()) fdist.most_common(5) fdist.plot()
1
2
3
4
5
使用 Unicode 進行文字處理
Unicode支持超過一百萬種字符。每個字符分配一個編號,稱為 編碼點。在 Python 中 ,編碼點寫作\uXXXX 的形式,其中 XXXX是四位十六進制形式數。
解碼:將文本翻譯成Unicode;
編碼:將Unicode 轉化為其它編碼的過程;
從文件中提取已編碼文本 :
假設我們有一個小的文本文件,我們知道它是如何編碼的。例如:polish-lat2.txt 顧名思義是波蘭語的文本片段(來源波蘭語 Wikipedia;可以在 http://pl.wikipedia.org/wiki/Biblioteka_Pruska中看到)。此文件是 Latin-2 編碼的,也稱為 ISO-8859-2。nltk.data.find()函數為我們定位文件。
path = nltk.data.find('corpora/unicode_samples/polish-lat2.txt')
1
codecs模塊:提供了將編碼數據讀入為Unicode 字符串和將Unicode 字符串以編碼形式寫出的函數。
codecs.open()函數:encoding 參數來指定被讀取或寫入的文件的編碼。
f = open(path, encoding='latin2') for line in f: line = line.strip() print(line)
1
2
3
4
HTML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。