gensim 实现tfidf 之语料的流式加载

有37万个文本数据来生成tfidf模型,如果直接一次性放入内存,会出现MemoryError

gensim实现了流式加载语料的功能,故定义迭代器完成语料的载入。

生成字典过程中,遍历file文件,每个处理一个文本数据。

import warnings
warnings.filterwarnings(action='ignore',category=UserWarning,module='gensim')
from gensim import corpora,similarities,models
file = open('train.txt','r',encoding='utf-8')
class mycorpus(object):
    def __iter__(self):
        for doc in file:
            yield doc.split(' ')
corp = mycorpus()
dictionary = corpora.Dictionary(corp)

同理,在产生gensim可以接收的BOW数据过程中,重新打开train.txt遍历一遍文档。因为在上一次的for循环里,文件指针已经到了文件末尾。

class MyCorpus(object):
    def __init__(self):
        print('MyCorpus')
    def __iter__(self):
        for doc in open('dingding.txt','r',encoding='utf-8'):
           # print(doc)
            yield dictionary.doc2bow(doc.split(' '))
corpus = MyCorpus()
# corpus = [dictionary.doc2bow(text) for text in self.text]
tfidf_model = models.TfidfModel(corpus, id2word=dictionary)
corpus_tfidf = tfidf_model[corpus]

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值