1. 程式人生 > >(五)N-gram語言模型的資料處理

(五)N-gram語言模型的資料處理

一、步驟

資料集說明:一段英文
(1)分詞:把原始的英文分詞,只保留詞之間的順序不變,多個句子也是看出整體進行分詞。
(2)統計詞頻:按照n元進行詞頻統計,比如“I love NLP I enjoy it”當n=2時候,可以劃分為(【I love】,【love NLP】,【NLP I】…),分別統計【I love】,【love NLP】等出現的次數。(在樸素貝葉斯中只是統計一個詞,這裡是統計n個前後關聯的詞)
(3)對統計好的詞進行大到小的排序,取m和詞作為特徵向量
其他步驟同文字分類步驟

二、程式碼

# -*- coding:utf-8 -*-
import urllib2
import
re import string import operator def cleanText(input): input = re.sub('\n+', " ", input).lower() # 匹配換行,用空格替換換行符 input = re.sub('\[[0-9]*\]', "", input) # 剔除類似[1]這樣的引用標記 input = re.sub(' +', " ", input) # 把連續多個空格替換成一個空格 input = bytes(input) # .encode('utf-8') # 把內容轉換成utf-8格式以消除轉義字元
# input = input.decode("ascii", "ignore") return input def cleanInput(input): input = cleanText(input) cleanInput = [] input = input.split(' ') # 以空格為分隔符,返回列表 for item in input: item = item.strip(string.punctuation) # string.punctuation獲取所有標點符號 if len(item) > 1
or (item.lower() == 'a' or item.lower() == 'i'): cleanInput.append(item) return cleanInput def getNgrams(input, n): #把一段英文處理成一個個詞語,保留了分詞後每個詞在原短文中的順序 input = cleanInput(input) output = {} # 構造字典 for i in range(len(input) - n + 1): ngramTemp = " ".join(input[i:i + n]) if ngramTemp not in output: # 詞頻統計 output[ngramTemp] = 0 output[ngramTemp] += 1 return output # 獲取資料,content為一段英文 content = urllib2.urlopen(urllib2.Request("http://pythonscraping.com/files/inaugurationSpeech.txt")).read() #2-grams ngrams = getNgrams(content, 2) sortedNGrams = sorted(ngrams.items(), key=operator.itemgetter(1), reverse=True) # =True 降序排列 print(sortedNGrams)