1. 讀郵件資料集檔案,提取郵件本身與標簽,
串列
numpy陣列
import csv
file_path = r"SMSSpamCollection"
sms = open(file_path, 'r', encoding='utf-8')
data = https://www.cnblogs.com/lzhdonald/p/csv.reader(sms, delimiter="\t")
for r in data:
print(r)
sms.close()

2.郵件預處理
- 郵件分句
- 名子分詞
- 去掉過短的單詞
- 詞性還原
- 連接成字串
- 傳統方法來實作
- nltk庫的安裝與使用
pip install nltk import nltk
nltk.download() # sever地址改成 http://www.nltk.org/nltk_data/
或
https://github.com/nltk/nltk_data下載gh-pages分支,里面的Packages就是我們要的資源,
將Packages檔案夾改名為nltk_data,
或
網盤鏈接:https://pan.baidu.com/s/1iJGCrz4fW3uYpuquB5jbew 提取碼:o5ea
放在用戶目錄,
----------------------------------
安裝完成,通過下述命令可查看nltk版本:
import nltk print nltk.__doc__

2.1 nltk庫 分詞
nltk.sent_tokenize(text) #對文本按照句子進行分割
nltk.word_tokenize(sent) #對句子進行分詞
2.2 punkt 停用詞
from nltk.corpus import stopwords
stops=stopwords.words('english')
*如果提示需要下載punkt
nltk.download(‘punkt’)
或 下載punkt.zip
https://pan.baidu.com/s/1OwLB0O8fBWkdLx8VJ-9uNQ 密碼:mema
復制到對應的失敗的目錄C:\Users\Administrator\AppData\Roaming\nltk_data\tokenizers并解壓,
2.3 NLTK 詞性標注
nltk.pos_tag(tokens)
2.4 Lemmatisation(詞性還原)
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('leaves') #預設名詞
lemmatizer.lemmatize('best',pos='a')
lemmatizer.lemmatize('made',pos='v')
一般先要分詞、詞性標注,再按詞性做詞性還原,
2.5 撰寫預處理函式
1. def preprocessing(text):
2. sms_data.append(preprocessing(line[1])) #對每封郵件做預處理
3. 訓練集與測驗集
4. 詞向量
5. 模型
# 匯入庫
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import csv
def preprocessing(text):
tokens = []
# 對錄入的文本按照句子進行分割;
for sent in nltk.sent_tokenize(text):
# 對句子進行分詞;
for word in nltk.word_tokenize(sent):
tokens.append(word)
# 去除停用詞
stops = stopwords.words("english")
tokens = [token for token in tokens if token not in stops]
# 詞性標注
nltk.pos_tag(tokens)
# 詞性還原
lemmatizer = WordNetLemmatizer() # 定義還原物件
tokens = [lemmatizer.lemmatize(token, pos='n') for token in tokens] # 名詞
tokens = [lemmatizer.lemmatize(token, pos='v') for token in tokens] # 動詞
tokens = [lemmatizer.lemmatize(token, pos='a') for token in tokens] # 形容詞
return tokens
# 加載資料
sms = open("SMSSpamCollection", 'r', encoding='utf-8')
sms_data = https://www.cnblogs.com/lzhdonald/p/[]
sms_label = []
csv_reader = csv.reader(sms, delimiter='\t')
# 預處理
for line in csv_reader:
sms_label.append(line[0])
sms_data.append(preprocessing(line[1]))
sms.close()
print("郵件標題:", sms_label)
print("郵件處理后內容:")
for line in sms_data:
print(line)


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/145721.html
標籤:Python
