gensim源码:Dictionary与HashDictionary

    gensim中有Dictionary和HashDictionary两类。Dictionary是一个词Map一个id,继承自Mapping类。HashDictionary是是通过Hash词来得到id,多个词可能拥有同一个id,继承自dict类。

1.Dictionary

    继承自Mapping类,拥有keys,values,items, get方法

Attributes:

    token2id:(str, int)字典

    id2token:(int, str)字典,只有在使用的时候才会生成(lazy)

    dfs:(token_id,count)统计多少文档出现该词

    num_docs:文档数

    num_pos:词数(有重复)

    num_nnz:BOW矩阵中的非0总数,所有文档单词数(文档内无重复,文档之间有可能重复)

__init__(documents=None,prune_at=20000000):

    调用add_documnets方法

add_documnets(documents,prune_at)

    将文档加入字典中,调用doc2bow方法

    documents参数:iterable of iterable of str,如[[“中”,“美” ],["我", “他”]]

    prune_at参数:字典包含的最大词数,文档超出则不包含超出词,默认200万

doc2bow(document, allow_update=False, return_missing=False)

    转换为词袋模型bag of word格式为(token_id, token_count)

    allow_update:词典是否可以扩展

    return_missing:是否返回字典中没有的新增词

doc2idx(document, unknown_word_index=-1)

    将文档中的词转换为字典对应token_id, 字典中没有的返回unknown_word_index

filter_extremes(no_below=5, no_above=0.5, keep_n=100000, keep_tokens=None):

    依照上下界和关键词缩减词典,词典变成一个原始词典的子集

    no_below最小出现次数,no_above最大dfs频率,keep_n最多个数,keep_token必须包含的词

filter_n_most_frequent(remove_n)

    删除dfs文档频率最高的n个字,词典变成缩减后的词典。调用filter_tokens实现

filter_tokens( bad_ids=None, good_ids=None)

    删除bad_ids的词或者留下good_ids中的词。

    函数生成token_ids和dfs,因为删减后的字典索引是间断的,所以完成后调用compactify方法    

compactify

    将不连续索引的词典转换为连续索引的词典

save_as_text( fname, sort_by_word=True)

    保存字典到文件,第一行是num_docs

load_from_text(fname)

    从文件加载字典    

merge_with(other):

    将另外一个词典加到现有词典上,以前的词典存在使用原有id,没有的词添加到旧词典最后

from_corpus(corpus, id2word=None)

    将一个BOW变成一个字典,如果id2word=None,word默认为str(id)


2.HashDictionary

    继承自dict类,有values,items,fromKeys,update,pop,get等方法

__init__(documents=None, id_range=32000, myhash=zlib.adler32, debug=True)

    id_range为hash表长度,myhash为hash方法,id = myhash(key)%id_range,debug表示是否存储dfs(token_id,count)和dfs_debug(token,count)。

restricted_hash(self, token)

    计算token的id,id = myhash(key)%id_range

add_documents(self, documents)

    包装类,同Dictionary。调用doc2bow方法

doc2bow(self, document, allow_update=False, return_missing=False)

    同Dictionary,增加了dfs(token_id,count)和dfs_debug(token,count)

 filter_extremes(no_below=5, no_above=0.5, keep_n=100000)

    缩减词典,同Dictionary

save_as_text(fname)

    保存字典,格式为(token_id ,token_id count, [[token,count][..]])


3.总结

    两类基本结构相同,区别主要有以下几点:

    1.继承类不同,Dictionary继承Mapping,HashDictionary继承dict,因此两者继承的方法不同

    2.token_id生成方法不同,Dictionary中使用整数序列,不同字典中可能不同;HashDictionary使用hash方法,token_id不会发生变化,具有自己的优势,但多个词对应一个id使其略显混乱。

    3.Dictionary方法较完整,HashDictionary实现方法较少,如HashDictionary没有merge等方法。

    4.Dictionary使用较为广泛,而HashDictionary添加新词响应较快。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容