Python自然語言處理 3 處理原始文字
本章的目的是要回答下列問題:
(1) 怎樣才能編寫程式訪問本地和網路上的檔案,從而獲得無限的語言材料?
(2)如何把文件分割成單獨的單詞和標點符號,並進行文字語料上分析?
(3)怎樣編寫程式產生格式化的輸出,並把結果儲存在檔案中?
為了解決這些問題,本章將介紹NLP的重要概念,包括分詞和詞幹提取.在過程中,鞏固Python知識並且學習關於字串,檔案和正規表示式的知識.網路上的文字都是HTML格式的,我們將學習如何使用HTML
一,從網路和硬碟訪問文字
#處理電子書 txt
古騰堡專案http://www.gutenberg.org/catalog/有25000本免費線上書籍的目錄
編號2554的文字是<罪與罰>
from urllib import urlopen
url = "http://www.gutenberg.org/files/2554/2554-0.txt"
raw = urlopen(url).read()
type(raw)
str
len(raw)
1201733
raw = raw.replace('\xef\xbb\xbf','')raw[:75]
'The Project Gutenberg EBook of Crime and Punishment, by Fyodor Dostoevsky\r\n\'分詞
import nltk
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
tokens = nltk.word_tokenize(raw)
type(tokens)
listlen(tokens)
244761tokens[:15]
['\xef', '\xbb', '\xbfThe', 'Project', 'Gutenberg'
在連結串列中建立NLTK文字
text = nltk.Text(tokens)
type(text)
text[1020:1060]
text.collocations()
raw.find("PART I")
5381raw.rfind("End of Project Gutenberg’s Crime")
1182515raw = raw[5381:1182515]
raw.find("PART I")
0
#處理HTML
url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"
html = urlopen(url).read()
html[:60]
'<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN'#raw = nltk.clean_html(html)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
raw = soup.get_text()
tokens = nltk.word_tokenize(raw)
tokens
[u'BBC', u'NEWS', u'|', u'Health', u'|',
#處理搜尋引擎的結果
網路可以被看做未經標註的巨大語料庫
#處理RSS訂閱
http://feedparser.org
#讀取本地檔案
import sys
#從PDF,MS word及其他二進位制格式中提取文字
使用pypdf和pywin32
#捕獲使用者輸入
s = raw_input("Enter some text: ")
#NLP的流程
二, 字串: 最底層的文字處理
#連結串列與字串的差異
字串和連結串列都是一種序列.可以通過索引抽取它們中的一部分,可以給它們切片,也可以使用連線將它們合併在一起,但是,字串和連結串列之間不能連線
query = 'Who knows?'
beatles = ['John', 'Paul', 'George', 'Ringo']
query[0] = 'F' #不可變
beatles[0] = 'F' #可變的
三, 使用Unicode進行文書處理
#從檔案中提取已編碼文字
import codecs
f = codecs.open(path, encoding='utf8')
四 使用正規表示式檢測片語搭配
五 正規表示式的有益應用
#提取字元塊
找出文字中兩個或兩個以上的母音序列,並確定它們的相對頻率
import re
wsj = sorted(set(nltk.corpus.treebank.words()))
fd = nltk.FreqDist(vs for word in wsj for vs in re.findall(r'[aeiou]{2,}', word))
fd.items()
#在字元塊上做更多事情
#查詢詞幹
查詢"laptops"會找到含有"laptop"的文件
def stem(word):
for suffix in ['ing','ly','ed','ious','ies','ive','es','s','ment']:
if word.endswith(suffix):
return word[:-len(suffix)]
return word
使用正規表示式
#搜尋已分詞文字
這種自動和人工處理相結合的方式是最常見的建造新語料庫的方式
六 規範化文字
raw = """DENNIS:Listen, strange women lying in ponds distributing swords is no basis for a system of government. Supreme executive power derives from a mandate from the masses, not from some farcical aquatic ceremony."""
tokens = nltk.word_tokenize(raw)
#詞幹提取器
porter = nltk.PorterStemmer()
lancaster = nltk.LancasterStemmer()
[porter.stem(t) for t in tokens]
[u'denni',
':',
'listen',
',',
u'strang',
#詞形歸併
wnl = nltk.WordNetLemmatizer()
[wnl.lemmatize(t) for t in tokens]
['DENNIS',
':',
'Listen',
',',
'strange',
u'woman',
'lying',
七 用正規表示式為文字分詞
#分詞的簡單方法
re.split(r" ', raw) #在空格符處分割原始文字
re.split(r'[ \t\n]+', raw) #同時需要匹配任何數量的空格符\製表符或換行符
八 分割
#斷句
sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
text = nltk.corpus.gutenberg.raw('chesterton-thursday.txt')
sents = sent_tokenizer.tokenize(text)
pprint.pprint(sents[171:181])
#分詞
九 格式化:從連結串列到字串
#從連結串列到字串
silly = ['We','called','him','Tortoise','because','he','taught','us','.']
' '.join(silly)
'We called him Tortoise because he taught us .'
';'.join(silly)
'We;called;him;Tortoise;because;he;taught;us;.'
''.join(silly)
'WecalledhimTortoisebecausehetaughtus.'
十 深入閱讀
相關文章
- Python自然語言處理 1 語言處理與PythonPython自然語言處理
- Python自然語言處理Python自然語言處理
- Python自然語言處理 6 學習分類文字Python自然語言處理
- 自然語言處理(NLP)自然語言處理
- 精通Python自然語言處理 3 :形態學Python自然語言處理
- 自然語言處理(NLP)概述自然語言處理
- 自然語言處理NLP(四)自然語言處理
- 精通Python自然語言處理 1 :字串操作Python自然語言處理字串
- Python自然語言處理 2 獲得文字語料和詞彙資源Python自然語言處理
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- [譯] 自然語言處理真是有趣!自然語言處理
- 自然語言處理:分詞方法自然語言處理分詞
- 自然語言處理與分析(one)自然語言處理
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- 精通Python自然語言處理 2 :統計語言建模Python自然語言處理
- Python自然語言處理實戰(3):中文分詞技術Python自然語言處理中文分詞
- hanlp自然語言處理包的基本使用--pythonHanLP自然語言處理Python
- 《Python自然語言處理實戰》連結表Python自然語言處理
- Python 自然語言處理(NLP)工具庫彙總Python自然語言處理
- 中國語文(自然語言處理)作業自然語言處理
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- 人工智慧 (06) 自然語言處理人工智慧自然語言處理
- 自然語言處理的最佳實踐自然語言處理
- 機器學習工作坊 - 自然語言處理機器學習自然語言處理
- 配置Hanlp自然語言處理進階HanLP自然語言處理
- 自然語言處理NLP快速入門自然語言處理
- 自然語言處理(NLP)入門指南自然語言處理
- 使用Mahout實現自然語言處理自然語言處理
- 自然語言處理與情緒智慧自然語言處理
- 牛津大學xDeepMind自然語言處理 第13講 語言模型(3)自然語言處理模型
- Python自然語言處理實戰(1):NLP基礎Python自然語言處理
- NLP1 —— Python自然語言處理環境搭建Python自然語言處理
- 自然語言處理NLP(6)——詞法分析自然語言處理詞法分析
- Pytorch系列:(六)自然語言處理NLPPyTorch自然語言處理
- 自然語言處理怎麼最快入門?自然語言處理
- 深度解析自然語言處理之篇章分析自然語言處理
- 自然語言處理(NLP)的主要範疇自然語言處理
- 人工智慧--自然語言處理簡介人工智慧自然語言處理