這一段時間在學習從以標註好的文字中生成詞典。
今天讀到的這段**,真的學習到了很多。
indexes=[1]表示要訓練的指標項,預設為1,也可以是其他,如[3,4,5]等等。
首先讀到的這段**(python):
f= file(filename,'r')
forline
in f.readlines():
sample = line.strip().split(tc_splittag)
#print indexes[len(indexes)-1]
iflen(sample)<=indexes[len(indexes)-1]:
#if len(sample)<=len(indexes):
continue
filename表示已經分好詞的文字所在的檔名
將分好詞的文字逐行讀出,然後,用line.strip()去除收尾的空格,包括\n\r\t,然後用line.strip().split(tc_splittag)分成列表,其中tc_splittag表示的是製表符\t
下面是文字的第一行:-4 昨天^晚上^吃^了^最^窩火^的^飯^
這樣,經過line.strip().split(tc_splittag)去除首尾空格,然後再用製表符進行分割之後,sample中存放的是[-4,」昨天^晚上^吃^了^最^窩火^的^飯^」]這樣乙個列表,存有兩項。
這個時候需要判斷一下sample是否符合標準:乙個標註項「-4」,還有就是訓練的文字項。
indexes中存放了要訓練的指標項,也就是要訓練的資料在這個樣本sample中位於哪個位置。如:現在是位於1位置。
len(indexes)表示了訓練指標項的個數,即一共要訓練多少資料項。indexes中的最後乙個資料表示了訓練項的最大位置資訊,所以樣本sample是否符合標準的評判條件就是 sample中有沒有那麼多訓練的資料項 白話一點:我現在要訓練3,4,5三個資料項,但是你給我的樣本中只有0,1,2,3,4項,沒有第五項,那麼就不是合格的樣本。
if len(sample)<=indexes[len(indexes)-1]:
這條語句中len(indexes)-1表示了最大訓練資料項的值所在的位置(在indexes中),如果len(sample)小於這個值,不行,等於也不行(因為有標註項,標註項是0,所以sample的長度要大於這最大訓練指標項的位置)。
所以下面那句語句
if len(sample)<=len(indexes):是錯誤的,因為(3,4,5),自己想想,不多解釋了。
樣本如果不符合,略過(continue)。
#統計不同賦值樣本的個數
label = int(float(sample[0]))
if cat_num_dic.has_key(label) is true:
cat_num_dic[label]+=1.0
else:
cat_num_dic[label]=1.0
其中sample[0]就是表示的標註項。
這段**的意思:統計不同樣本的個數
將標註項從string型別轉換為int型別的label,cat_num_dic是乙個字典,如果標註項有0,1,2,3,則分別統計型別為0的樣本有多少項,為1的多少……等等。最後存在字典裡。
最後給與我深刻學習的是最後這段**:!!!!!!
#組合所有的內容,這段**太好了!!
string =""
string = sample[indexes[0]]##高明,如果訓練的指標項是3,4,5,indexs是【3,4,5】,則indexs[0]=3!!!
iflen(indexes)>1:##訓練的指標項多於兩項
for i in range(1,len(indexes)):
string += str_splittag+sample[indexes[i]]
#計算包含term的樣本數
temp_dic = dict()
for term in
string.strip().split(str_splittag):
iflen(term.strip())==0:
continue
term = term.strip()
if stop_words_dic.has_key(term) is true:
continue
#print term
#print temp_dic####此處是字典,並不是列表
temp_dic[term]=1.0
#只要出現一次就代表著該樣本包含該詞。
for key in temp_dic.keys():
if dic.has_key(key) is true:
if dic[key].has_key(label):
dic[key][label]+=1.0
else:
dic[key][label]=1
else:
dic[key]={}
dic[key][label]=1
首先,最後的詞典的形式:} 每個term對應的是乙個詞典,其中詞典中儲存了每個類別中包含該term 的樣本數。label 為int型
之前說過indexes中存放的是訓練指標項的位置資訊,如果indexes中有很多需要訓練的指標項,那麼需要將其組合起來。string = sample[indexes[0]] 就是組合的第一項,然後進行判斷,如果需要訓練的專案不止乙個,那麼就需要把剩下的都連線起來。
temp_dic 字典作為乙個構建詞典的中間跳板,首先將樣本拆分成詞,然後過濾掉停用詞之後,將樣本中剩下的詞組成乙個很簡單的詞典。temp_dic[term]=1.0 #只要出現一次就代表著該樣本包含該詞。
temp_dic給最後要建造的字典dic提供了key值。
按照上述的詞典的形式開始構造字典dic.
for
keyin dic.keys():
for cat in cat_num_dic.keys():
if dic[key].has_key(cat) is
false:
dic[key][cat]=0.0
最後,需要補充上沒有出現的label,並給這個詞沒有出現的label複製為0.0
值得一提的是,cat_num_dic和dic都是全域性變數(相對的),只是在不斷地補充和完善,而temp_dic 是會在執行過程中不斷變為空,不斷給dic提供key值。
OA專案中學習到的SQL
1.將普通帖,精華帖和置頂帖當做常量,如下。普通帖 public static final int type normal 0 精華帖 public static final int type best 1 置頂帖 public static final int type top 2 在發帖的過程中...
BOM DOM學習到的小東西
我最近剛開始學習這兩樣東西,在接觸和一些小實踐中發現了很多。首先,介紹一下這兩樣東西 bom是瀏覽器物件模型,用來獲取或設定瀏覽器的屬性 行為,例如 新建視窗 獲取螢幕解析度 瀏覽器版本號等。dom是文件物件模型,用來獲取或設定文件中標籤的屬性,例如獲取或者設定input表單的value值。dom ...
特徵選擇和特徵學習中的過完備
scspm的 中提到了碼書的過完備 over complete 一開始沒有太在意過完備有什麼問題,今天想了想把這個概念弄明白了。特徵學習的過程中,假設學習的碼書d的大小為m。每個碼字的維數為n。每個原始特徵yi的維數也為n。假設原始特徵投影到碼書上以後的特徵向量是xi m維的向量 那麼用d和xi對y...