在文字的特徵選擇中學習到的東西 構建詞典

2021-07-10 20:47:55 字數 3234 閱讀 5065

這一段時間在學習從以標註好的文字中生成詞典。

今天讀到的這段**,真的學習到了很多。

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...