(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, NLTK 3.3)python
文本分塊是將一大段文本分割成幾段小文本,其目的是好比想獲取一段文本中的一小部分,或分割獲得固定單詞數目的小部分等,常常用於很是大的文本。注意文本分塊和分詞不同,分詞的目的是把一段文本分割成單詞,而文本分塊的目的是把一大段文本分割成多個小段文本。git
在不用的應用中,可能須要按照不一樣的規則對大段文本進行分塊,此處咱們須要獲得單詞數相等的塊,故而能夠編寫函數來實現這種規則的分塊。代碼以下。github
from nltk.tokenize import word_tokenize def split(dataset,words_num): ''' 將dataset這一整段文本分割成N個小塊, 使得每一個小塊中含有單詞的數目等於words_num''' words=dataset.split(' ') # 此處用空格來區分單詞是否合適? # words=word_tokenize(dataset) # 用分詞器來分詞是否更合適一些? rows=int(np.ceil(len(words)/words_num)) # 即行數 result=[] # 預計裏面裝的元素是rows行words_num列,最後一行可能少於words_num,故不能用np.array # words是list,能夠用切片的方式獲取 for row in range(rows): result.append(words[row*words_num:(row+1)*words_num]) return result
而後用簡·奧斯丁的《愛瑪》中的文本做爲數據集,因爲這個數據集太大,長度有192427,故而咱們此處只獲取前面的1000個單詞作測試。app
# 測試一下 # 數據集暫時用簡·奧斯丁的《愛瑪》中的文本 dataset=nltk.corpus.gutenberg.words('austen-emma.txt') print(len(dataset)) # 192427 表明讀入正常 result=split(" ".join(dataset[:1000]), 30) # 只取前面的1000個單詞,每30個單詞分一個塊,一共有34個塊 print(len(result)) print(result[0]) print(len(result[0])) print(result[-1]) print(len(result[-1]))
-------------------------------------輸---------出--------------------------------機器學習
192427
34
['[', 'Emma', 'by', 'Jane', 'Austen', '1816', ']', 'VOLUME', 'I', 'CHAPTER', 'I', 'Emma', 'Woodhouse', ',', 'handsome', ',', 'clever', ',', 'and', 'rich', ',', 'with', 'a', 'comfortable', 'home', 'and', 'happy', 'disposition', ',', 'seemed']
30
['its', 'separate', 'lawn', ',', 'and', 'shrubberies', ',', 'and', 'name', ',']
10函數
--------------------------------------------完-------------------------------------學習
能夠看出split以後的分紅了34塊,第一個塊長度是30,而最後一塊的長度是10,而且split函數準確的將文本進行了分塊。測試
########################小**********結###############################code
1,本例中文本分塊貌似沒有用到NLTK模塊中的任何函數,只用python字符串處理函數就能夠。但在其餘應用場景中,可能會須要更復雜的函數來完成特定的分塊功能。token
2,本例中使用空格來區分一個單詞,這種分詞方式並不必定準確,可使用前面講到的word_tokenize函數來分詞,可能更準確一些。
3,若是是中文的分塊,能夠先用jieba對文本進行分詞,而後在獲取特定的單詞數來進行文本分塊,仿照上面的split函數很容易擴展到中文方面,此處省略。
#################################################################
注:本部分代碼已經所有上傳到(個人github)上,歡迎下載。
參考資料:
1, Python機器學習經典實例,Prateek Joshi著,陶俊傑,陳小莉譯