python 個人廣告獲取區域傾向

2021-09-08 20:23:31 字數 3328 閱讀 2446

第四章總結起來就是,首先找到資料,利用textparse來切分文字,然後用createvocablist建立乙個不重複的詞的列表,然後使用函式setofwords2vec來把每個文件變為乙個文件向量,每乙個元素都是0或者1(元素若在詞列表**現,那相應的位置為1),這個向量的長度和詞列表的長度是一樣的。然後利用trainnb0函式計算pab(即侮辱性文件在總文件占得比例),p1v(每個侮辱詞出現的個數除以總的侮辱詞的數量,即每個侮辱詞在總的侮辱詞中佔得比例),p0v(每個非侮辱詞出現的個數除以總的非侮辱詞的數量,即每個非侮辱詞在總的非侮辱詞中佔得比例),隨機從訓練集中選擇一些測試集,利用setofwords2vec把測試集轉化為文件向量,然後利用classifynb來計算每個測試集是侮辱性和非侮辱性的大小,判斷出型別,然後和測試集的classlist進行比較,看**的和實際的是否一致,如果不一致則統計錯誤率。

def calcmostfreq(vocablist, fulltext):

"""function: 計算出現頻率

args: vocablist:詞彙表

fulltext:全部詞彙

returns: sortedfreq[:30]:出現頻率最高的30個詞

"""import operator

freqdict = {}

for token in vocablist:#遍歷詞彙表中的每個詞,統計它在文字**現的次數

freqdict[token] = fulltext.count(token)#返回token在列表**現的次數

# 此時,可以用下列固定的**進行排序。

#>> > import operator

# >> > sortedfreq = sorted(freqdict.iteritems(), key=operator.itemgetter(1), reverse=true) # freqdict: 字典結構,

#此時返回的降序排列後的元組的列表。即列表每個元素為乙個元組,元組由鍵及其鍵值所組成

sortedfreq = sorted(freqdict.items(), key=operator.itemgetter(1), reverse=true)#鍵值為該字串在文字**現的頻率。reverse = true: 按降序排列

return sortedfreq[:30]

def localwords(feed1, feed0):

"""function: rss源分類器

args: feed1:rss源

feed0:rss源

returns: vocablist:詞彙表

p0v:類別概率向量

p1v:類別概率向量

"""import feedparser

#初始化資料列表

doclist = ; classlist = ; fulltext =

minlen = min(len(feed1['entries']), len(feed0['entries']))

#匯入文字檔案

for i in range(minlen):

#切分文字

wordlist = textparse(feed1['entries'][i]['summary'])#切分每條文本(用前面定義的函式)

#切分後的文字以原始列表形式加入文件列表

#切分後的文字直接合併到詞彙列表,# 每次只擴充套件乙個位置,wordlist以陣列的形式放在裡面,請參考:

fulltext.extend(wordlist)

#標籤列表更新

#切分文字

wordlist = textparse(feed0['entries'][i]['summary'])

#切分後的文字以原始列表形式加入文件列表

#切分後的文字直接合併到詞彙列表

fulltext.extend(wordlist)

#標籤列表更新

#獲得詞彙表

vocablist = createvocablist(doclist)# 給doclist裡面的單詞去重

#獲得30個頻率最高的詞彙

top30words = calcmostfreq(vocablist, fulltext)

#去掉出現次數最高的那些詞

for pairw in top30words:

if pairw[0] in vocablist: vocablist.remove(pairw[0])

trainingset = list(range(2*minlen))#訓練資料集中文件的個數

testset = #測試集為空

#隨機構建測試集,隨機選取二十個樣本作為測試樣本,並從訓練樣本中剔除

for i in range(20):

#隨機得到index

randindex = int(random.uniform(0, len(trainingset)))#隨機生成0到訓練集長度的數並取整(不包含數len(trainingset))

#將該樣本加入測試集中

#同時將該樣本從訓練集中剔除

del(trainingset[randindex])

#初始化訓練集資料列表和標籤列表

trainmat = ; trainclasses =

#遍歷訓練集

for docindex in trainingset:

#詞表轉換到向量,並加入到訓練資料列表中

#相應的標籤也加入訓練標籤列表中

#樸素貝葉斯分類器訓練函式

p0v, p1v, pspam = trainnb0(array(trainmat), array(trainclasses))

#初始化錯誤計數

errorcount = 0

#遍歷測試集進行測試

for docindex in testset:

#測試集詞表轉換到向量

wordvector = setofwords2vec(vocablist, doclist[docindex])

#判斷分類結果與原標籤是否一致

if classfifynb(array(wordvector), p0v, p1v, pspam) != classlist[docindex]:

#如果不一致則錯誤計數加1

errorcount += 1

#並且輸出出錯的文件

print("classification error", doclist[docindex])

#列印輸出資訊

print('the erroe rate is: ', float(errorcount)/len(testset))

#返回詞彙表和兩個類別概率向量

return vocablist, p0v, p1v

個人站長如何選擇廣告聯盟?

現在國內外的廣告聯盟多的是,就算在國內,至少也有100家以上,對於沒有經驗的 新手而言,選擇聯盟是乙個非常頭疼的事情。加入聯盟之前一定要充分調查,以免浪費資源和精力,最後落個白辛苦。基本上,選擇廣告聯盟的可以按照以下幾個原則 1 公司實力,你在做乙個聯盟之前,一定要先看一下這家公司的實力,一些大公司...

緩衝區的個人理解

緩衝區的個人理解 這裡所說的緩衝區指的是為標準輸入與標準輸出設定的緩衝區,為什麼要設定乙個標準輸入緩衝區主要是從效率上來考慮的,如果不設緩衝區會降低cpu 的效率,因為它總是會等待使用者輸入完之後才會去執行某些指令!同樣設定乙個標準輸出緩衝區是為了解決列印的問題!總之這樣做的目的就是為了效率!接下來...

基於arm的廣告機的個人總結

二.設計目標 三.相關技術 四.個人總結 基本功能 1.切換 背景 也同步 拓展功能 3.使用者互動 4.密碼驗證,登入 5.可對資料進行增刪改查 為了更多使用者了解我們的技術和文化,推廣公司產品 1.採用了核心鍊錶對資料進行儲存 2.採用了系統i o對檔案進行開啟,讀取以及寫入 3.採用了字元庫將...