NLP自然語言處理

2022-06-03 18:54:15 字數 2649 閱讀 3035

老實來講這課我一頭霧水滿腦袋問號

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 的部分無法讓測試者確認出是人還是機器的回答,則此時這台機器通過測...