老實來講這課我一頭霧水滿腦袋問號
import numpy as np
from collections import counter
counttime = 0
def seperate(filename):
totalnum = 0 # 郵件的總數
global counttime #!!!
i = 0
file = open(filename, encoding='gb18030', errors='ignore')
for line in file: #逐行處理
i = i + 1
new = line.split() # 一行郵件,以 ham/spam 標記分開 #預設為所有的空字元,包括空格、換行(\n)、製表符(\t)等。分割次數。預設為 -1, 即分隔所有。
totalnum = totalnum + 1
hamnum = hamnum + 1
for word in new[1:]:
hamcnt[word] += 1 #ham 中詞頻計數
spamnum = spamnum + 1
for word in new[1:]:
spamcnt[word] += 1 #spam 詞頻計數
if counttime == 0 :
print('訓練樣本的總行數:%s' % i)
print('ham 樣本:%s' % hamnum)
print('spam 樣本:%s' % spamnum)
counttime += 1
return hamcnt, spamcnt, totalnum, hamnum, spamnum
def train(filename, predata):
hamcnt, spamcnt, totalnum, hamnum, spamnum = seperate(filename) #統計 spam/ham 詞典
# 計算 spam/ham 各自總詞數
wordnumerofham = 0
for key in hamcnt:
wordnumerofham += hamcnt[key]
wordnumerofspam = 0
for key in spamcnt:
wordnumerofspam += spamcnt[key]
# 計算概率 p(spam|total),p(ham|total)
p1_spam = spamnum / totalnum #ham 先驗概率
p1_ham = hamnum / totalnum #spam 先驗概率
hamprobablity = 1
spamprobability = 1
# 針對測試文字文字計算條件概率
newpredata = predata.split()
for word in newpredata: #計算測試語料中每個詞的條件概率
try: #加 1 平滑
hamprobablity = hamprobablity * (hamcnt[word] + 1) / (wordnumerofham + len(hamcnt))
except: # 文字中沒有該單詞
hamprobablity = hamprobablity * 1 / (wordnumerofham + len(hamcnt))
res1 = hamprobablity * p1_ham #為 ham 類的概率:先驗*條件
for word in newpredata:
try:
spamprobability = spamprobability * (spamcnt[word] + 1) / (wordnumerofspam + len(spamcnt))
except:
spamprobability = spamprobability * (1) / (wordnumerofspam + len(spamcnt))
res2 = spamprobability * p1_spam #為 spam 類的概率:先驗*條件
if res1 == res2:
print('res1', res1, 'res2', res2)
if res1 > res2:
return 0
else:
return 1
filename = 'kaggle_training.txt' #訓練語料
for line in open("kaggle_test.txt", encoding='gb18030', errors='ignore'):
#print(line)
#line = line.encode()
res = train(filename, line)
#print("res: "+str(res))
不管別的
如何讓部分**只執行一次 counttime在函式外宣告一次 在函式內用global表示一下
byte string: split:這個地方跟給的區別
(忘記我改的啥了 最後看到上面有對應的操作:encoding='gb18030', errors='ignore')
想讓列印輸出的那堆有固定的格式,於是: 但是都不可以 因為都四捨五入全成0了
NLP自然語言處理
第1部分自然語言處理入門 1.1自然語言處理入門.mp4 第2部分hmm和crf 1.1crf模型簡介.mp4 1.1hmm模型介紹.mp4 1.2文字處理的基本方法 part1.mp4 2.1新聞主題分類任務 第4步 part2.mp4 第43部分rnn 1.1rnn模型小結.mp4 1.1rnn...
NLP自然語言處理相關
近期需要學習一些命名實體識別的知識,記錄一下,以便以後複習 個人理解 目前的理解是,命名實體識別 ner 是自然語言處理 nlp 的乙個階段,可應用於機器翻譯 摘要形成 資訊檢索等等,個人認為,自然語言處理是一門很複雜的跨學科技術,其難點在於人類是富有思維的,人的語言寄託人的思想,因此很難準確處理。...
自然語言處理 NLP(4)
文法用途 遞迴下降和左角落解析都存在一定的缺陷,因此可以才用動態規劃的方法進行解析 阿蘭 圖靈與1950年提出,測試在測試者和被測試者相互隔開的情況下,通過一些簡單的裝置向被測試者隨意提問。通過一些問題之後,若被測試者的答覆有超過30 的部分無法讓測試者確認出是人還是機器的回答,則此時這台機器通過測...