gensim-語料庫和向量空間

字符串到向量

string = ["Human machine interface for lab abc computer applications", 
 "A survey of user opinion of computer system response time", 
 "The EPS user interface management system", 
 "System and human system engineering testing of EPS", 
 "Relation of user perceived response time to error measurement", 
 "The generation of random binary unordered trees", 
 "The intersection graph of paths in trees", 
 "Graph minors IV Widths of trees and well quasi ordering", 
 "Graph minors A survey"]

cut_string = [item.split() for item in string]

#創(chuàng)建詞頻字典
from collections import defaultdict
dic = defaultdict(int)
for item in cut_string:
    for cut in item:
        dic[cut]+=1

#將原文本中頻數(shù)大于2的詞匯保存下來
result_string = [[cut for cut in item if dic[cut]>=2] for item in cut_string]

總結(jié):--基于python的總結(jié)

  1. 善于生成器的使用蛤奢,只要是對列表進(jìn)行操作,并且生成列表让腹,那么可以使用生成式远剩,可以替代其他語言中比較復(fù)雜的for循環(huán)的語法
  2. 對于dafualtdict的使用,只要結(jié)果是希望生成一個字典骇窍,則可以使用該方法瓜晤,dic = defaultdict(int)中的參數(shù)用來指定字典值的類型。

詞袋模型

詞袋模型->就是對于一篇文檔腹纳,將其整理成 “該詞在文檔中的出現(xiàn)次數(shù)痢掠?1 次〕盎校”的形式.
我們將詞用一個整型 ID 來表示足画,詞的 ID 和其詞頻之間的映射表即被稱作詞典

基礎(chǔ)模型:

接下來展示建立詞袋模型,并且建立詞向量的過程:

#步驟一:建立詞典
from gensim import corpora
dictionary = corpora.Dictionary(result_string)
…… 
Dictionary(12 unique tokens)

最后可以看到整個語料庫中只有 12 個單詞佃牛,這也就意味著淹辞,每篇文檔可以用一個 12 維的向量來表示。

#步驟二:查看詞典信息
#1.可以使用token2id來查看token-id
print(dictionary.token2id)


#2.可以使用dfs查看id-詞頻(frequency)
#步驟三:建立詞向量
new_vec = dictionary.doc2bow(“Hunman computer interaction”.split())
…… 
[(0, 1), (1, 1)] 
返回結(jié)果[(0,1),(1,1)]表示:在文檔
“Hunman computer interaction”中俘侠,單詞“computer”(ID 為 0)出現(xiàn)了 1 次象缀,
單詞“human”(ID 為 1)出現(xiàn)了 1 次蔬将,詞典中的其余 10 個單詞出現(xiàn)次數(shù)均為
0。 

改進(jìn)模型-建立向量:

以上建立模型存在的問題央星,每次處理的結(jié)果都保存在內(nèi)存里霞怀,當(dāng)數(shù)據(jù)量較大時難以應(yīng)對壓力,所以需要對其進(jìn)行改進(jìn)莉给,一個主要的方法就是對其使用生成器,生成器是python大數(shù)據(jù)處理的一個利器毙石。
生成器使用示例:

class mycorpora(object):
    def __iter__(self):
        with open(文件地址) as f:
            for line in f:
                yield corpora.doc2bow(line.split())

在__iter__函數(shù)中,對語料庫數(shù)據(jù)進(jìn)行解析颓遏,將每一篇文檔變成一個只包含單詞的list徐矩,然后通過建好的詞典將這個 list 轉(zhuǎn)換成一個能表示該文檔的稀疏向量。

corpus_memory_friendly = mycorpora() 

for vector in corpus_memory_friendly: 
  print(vector) 
…… 
[(0, 1), (1, 1), (2, 1)] 
[(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)] 
[(2, 1), (5, 1), (7, 1), (8, 1)] 
[(1, 1), (5, 2), (8, 1)] 
[(3, 1), (6, 1), (7, 1)] 
[(9, 1)] 
[(9, 1), (10, 1)] 
[(9, 1), (10, 1), (11, 1)] 

盡管輸出和此前 list 的輸出是一樣的州泊,但是這種方法卻是非常節(jié)省內(nèi)存的丧蘸,因為每次只有一個向量留在內(nèi)存中,如此一來遥皂,你可以處理任意大的語料庫力喷。

改進(jìn)模型--建立字典

from six import iteritems 

#此處接收生成器
dictionary = corpora.Dictionary(line.lower().split() for line in open('mycorpus.txt 

')) 

#使用iteritems迭代字典效率較高
once_ids = [tokenid for tokenid, docfreq in iteritems(dictionary.dfs) if docfreq == 1] 

#字典過濾掉id
dictionary.filter_tokens(stop_ids + once_ids) 

#由于字典過濾掉id,所以使用以下的方法可以使其變得緊湊
dictionary.compactify() 
print(dictionary) 
…… 
Dictionary(12 unique tokens) 

總結(jié):--基于gensim

  1. corpora.Dictionary(參數(shù))--->接收迭代器
  2. dictionary.dfs,dictionary.token2bow---->用來查看 詞語-id,和id->頻數(shù)
  3. dictionary.doc2bow(參數(shù))---->用來將文檔轉(zhuǎn)換為向量
  4. dictionary.filter_tokens(參數(shù))---->需要過濾掉的id的列表
  5. dictionary.compactify()----->使詞典變得緊湊

總結(jié):--基于生成器
生成器可以用來處理大數(shù)據(jù):

  1. 當(dāng)一個處理的方法是處理一條數(shù)據(jù)時,則可以通過for循環(huán)結(jié)合yield將每條數(shù)據(jù)傳遞給處理的方法演训,然后用for循環(huán)得到處理后的結(jié)果
  2. 也可以將生成器當(dāng)成一個整體傳遞給處理方法弟孟,前提是處理方法里有關(guān)于該整體的for循環(huán),這樣可以將生成器當(dāng)做和列表沒有區(qū)別样悟,對其進(jìn)行循環(huán)正常處理即可拂募。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窟她,隨后出現(xiàn)的幾起案子陈症,更是在濱河造成了極大的恐慌,老刑警劉巖震糖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件录肯,死亡現(xiàn)場離奇詭異,居然都是意外死亡吊说,警方通過查閱死者的電腦和手機论咏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颁井,“玉大人厅贪,你說我怎么就攤上這事⊙疟觯” “怎么了养涮?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我单寂,道長贬芥,這世上最難降的妖魔是什么吐辙? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任宣决,我火速辦了婚禮,結(jié)果婚禮上昏苏,老公的妹妹穿的比我還像新娘尊沸。我一直安慰自己,他們只是感情好贤惯,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布洼专。 她就那樣靜靜地躺著,像睡著了一般孵构。 火紅的嫁衣襯著肌膚如雪屁商。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天颈墅,我揣著相機與錄音蜡镶,去河邊找鬼。 笑死恤筛,一個胖子當(dāng)著我的面吹牛官还,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毒坛,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼望伦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了煎殷?” 一聲冷哼從身側(cè)響起屯伞,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎豪直,沒想到半個月后劣摇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡顶伞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年饵撑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唆貌。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡滑潘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锨咙,到底是詐尸還是另有隱情语卤,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站粹舵,受9級特大地震影響钮孵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜眼滤,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一巴席、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诅需,春花似錦漾唉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至场刑,卻和暖如春般此,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牵现。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工铐懊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人施籍。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓居扒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親丑慎。 傳聞我的和親對象是個殘疾皇子喜喂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容