韩语翻译,水晶-ope体育平台_ope体育电竞app_ope体育专业版

写笔者最近在整理自己的文本发掘常识结构,凭借gensim、sklearn、keras等库的文档做了些扩大,会陆陆续续介绍文本向量化、tfidf、主题模型、word2vec,既会触及理论,也会有具体的代码和事例进行解说,期望在整理本身常识系统的一起也能对想学习文本发掘的朋友有一点协助,这是笔者写该系列的初衷。

写笔者最近在整理自己的文本发掘常识结构,凭借gensim、sklearn、keras等库的文档做了些扩大,会陆陆续续介绍文本向量化、tfidf、主题模型、word2vec,既会触及理论,也会有具体的代码和事例进行解说,期望在整理本身常识系统的一起也能对想学习文本发掘的朋友有一点协助,这是笔者写该系列的初衷。

在本文中,笔者将会紧接着上文提及的3个概念,拓宽到文本发掘中一个重要的概念 —(文本)向量空间,它是将自然言语转化为机器可辨认符号的要害一步,文本类似度、文本聚类、文本分类等实践运用皆以此为根底。

培育码代码的好习惯,设置日志,打印程序运转中的细节,以便调试代码。

import logging logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)

import logging logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)

import os import tempfile TEMP_FOLDER = tempfile.gettempdir print(‘文件夹”{}” 将被用来存储语料和临时性的字典’.format(TEMP_FOLDER))

import os import tempfile TEMP_FOLDER = tempfile.gettempdir print(‘文件夹”{}” 将被用来存储语料和临时性的字典’.format(TEMP_FOLDER))

文件夹”C:UsershpAppDataLocalTemp” 将被用来存储语料和临时性的字典

文件夹”C:UsershpAppDataLocalTemp” 将被用来存储语料和临时性的字典

这次,笔者仍是运用之前关于“常识图谱”报导的标题语料库作为示例:

from gensim import corpora

import jieba

from gensim import corpora

import jieba

2019-05-06 09:59:43,964 : INFO : ‘pattern’ package not found; tag filters are not available for English

依据打印出的日志可知,’pattern’没正确安装上,这个库是自然言语处理里一个很棒的库,不过现在没怎么更新了,且对中文的支撑不给力,所以不影响接下来的剖析。

jieba.add_word(‘常识图谱’) #避免“常识图谱”被切错词

docs = [‘商业新知:常识图谱为内核,构建商业立异服务完好生态。’,

‘怎么更好运用常识图谱技能做反诈骗? 360金融首席数据科学家沈赟开讲。’,

‘常识办理 | 根据常识图谱的世界常识办理范畴可视化剖析。’,

‘一扩张系文详解豁达数据常识图谱技能与运用。’,

‘常识图谱技能落地金融职业的要害四步。’,

‘一文读懂常识图谱的商业运用进程及技能布景。’,

‘海云数据CPO王斌:打造大数据可视剖析与AI运用的高科技企业。’,

‘智能工业|《人工智能规范化白皮书2018》带来立异创业新技能规范。’,

‘国家语委严重科研项目“中华经典诗词常识图谱韩语翻译,水晶-ope体育渠道_ope体育电竞app_ope体育专业版构建技能研讨”开题。’,

‘最全常识图谱介绍:要害技能、敞开数据集、运用事例汇总。’,

‘中译语通Jove Mind常识图谱渠道 引领企业智能化开展。’,

‘常识图谱:常识图谱赋能企业数字化转型,为企业晋级转型注入新能量。’]

jieba.add_word(‘常识图谱’) #避免“常识图谱”被切错词

docs = [‘商业新知:常识图谱为内核,构建商业立异服务完好生态。’,

‘怎么更好运用常识图谱技能做反诈骗? 360金融首席数据科学家沈赟开讲。’,

‘常识办理 | 根据常识图谱的世界常识办理范畴可视化剖析。’,

‘一文详解豁达数据常识图谱技能与运用。’,

‘常识图谱技能落地金融职业的要害四步。’,

‘一文读懂常识图谱的商业运用进程及技能布景。’,

‘海云数据CPO王斌:打造大数据可视剖析与AI运用的高科技企业。’,

‘智能工业|《人工智能规范化白皮书2018》带来立异创业新技能规范。’,

‘国家语委严重科研项目“中华经典诗词常识图谱构建技能研讨”开题。’,

‘最全常识图谱介绍:要害技能、敞开数据集、运用事例汇总。’,

‘中译语通Jove Mind常识图谱渠道 引领企业智能化开展。’,

‘常识图谱:常识图谱赋能企业数字化转型,为企业晋级转型注入新能量。’]

再对文本进行分词,用空格离隔变成字符串,便利进行下一步的处理:

documents = [‘ ‘.join(jieba.lcut(i)) for i in docs]

print(documents)

documents = [‘ ‘.join(jieba.lcut(i)) for i in docs]

print(documents)

[‘商业 新知 : 常识图谱 为 内核 , 构建 商业 立异 服务 完好 生态 。’, ‘怎么 更好 运用 常识图谱 技能 做 反 诈骗 ? 360 金融 首席 数据 科学家 沈赟 开讲 。’, ‘常识 办理 | 根据 常识图谱 的 世界 常识 办理 范畴 可视化 剖析 。’, ‘一文 详解 豁达 数据 常识图谱 技能 与 运用 。’, ‘常识图谱 技能 落地 金融 职业 的 要害 四步 。’, ‘一文 读懂 常识图谱 的 商业 运用 进程 及 技能 布景 。’, ‘海云 数据 CPO 王斌 : 打造 大 数据 可视 剖析 与 AI 运用 的 高科技 企业 。’, ‘智能 工业 | 《 人工智能 规范化 白皮书 2018 》 带来 立异 创业 新 技能规范 。’, ‘国家语委 严重 科研项目 “ 中华 经典 诗词 常识图谱 构建 技能 研讨 ” 开题 。’, ‘最全 常识图谱 介绍 : 要害技能 、 敞开 数据 集 、 运用 事例 汇总 。’, ‘中译 语通 Jove Mind 常识图谱 渠道 引领 企业 智能化 开展 。’, ‘常识图谱 : 常识图谱 赋能 企业 数字化 转型 , 为 企业 晋级 转型 注入 新 能量 。’]

这是一个包括12个文档的小型语料,每个文档仅包括1个语句。

首要,对这些文档进行分词处理,移除停用词,并去掉那些仅在本语猜中出现一次的词汇:

from pprint import pprint

from collections import defaultdict

from pprint import pprint

from collections import defaultdict

# 移除常用词以及分词

stoplist = [i.strip for i in open(‘datasets/stopwords_zh.txt’,encoding=’utf-8′).readlines]

texts = [[word for word in d爱品选ocument.lower.split if word not in stoplist] for document in documents]# 移除仅出现一次的词汇

stoplist = [i.strip for i in open(‘datasets/stopwords_zh.txt’,encoding=’utf-8′).readlines]

texts = [[word for word in document.lower.split if word not in stoplist] for document in documents]# 移除仅出现一次的词汇

frequency = defaultdict(int)

for text in texts:for token in text:

frequency[token] += 1

texts = [[token for token in text if frequency[token] > 1] for text in texts]

#使打印的格局更整齐

pprint(texts)

frequency = defaultdict(int)

for text in texts:for token in text:

frequency[token] += 1

texts = [[token for token in text if frequency[token] > 1] for text in texts]

#使打印的格局更整齐

pprint(texts)

[[‘商业’, ‘常识图谱’, ‘商业’, ‘立异’], [‘常识图谱’, ‘技能’, ‘金融’, ‘数据’], [‘常识’, ‘办理’, ‘常识图谱’, ‘常识’, ‘办理’, ‘剖析’], [‘一文’, ‘数据’, ‘常识图谱’, ‘技能’], [‘常识图谱’, ‘技能’, ‘金融’], [‘一文’, ‘常识图谱’, ‘商业’, ‘技能’], [‘数据’, ‘数据’, ‘剖析’, ‘企业’], [‘立异’], [‘常识图谱’, ‘技能’], [‘常识图谱’, ‘数据’], [‘常识图谱’, ‘企业’], [‘常识图谱’, ‘常识图谱’, ‘企业’, ‘转型’, ‘企业’, ‘转型’]]

处理文档的办法需求因时制宜,见机行事,尤其是在不同的运用场景中,比方电商谈论、博客长文以及微博内容都需求运用不同的预处理办法,笔者会在后边的文章中提及这些技巧。在这儿,根据上面的分词,笔者仅用空格分隔,然后对语句中的西文词汇进行“小写化(Lowercasing)”。

机器是看不懂人类的自然言语(自然言语一般是指一种自然地随文明演化的言语。例如:英语、汉语、日语为自然言语的比方,而世界语则为人工言语,便是一种为某些特定意图而发明的言语),若要机器“读懂”自然言语,则需求将其转化为机器可辨认的符号,比方”0″和”1″,且这种转化的进程中需求最大极限保存自然言语特有的语义特征,玫瑰痤疮这是一个很有难度的使命。

在这儿,笔者介绍一种常见的文本表明办法——称为词袋模型,即Bag-of-Words)。

在词袋模型模型下,像是语句或是文件这样的文字能够用一个袋子装着这些词的办法体现,这种体现办法不考虑文法以及词的次序。

在词袋模型模型下,像是语句或是文件这样的文字能够用一个袋子装着这些词的办法体现,这种体现办法不考虑文法以及词的次序。

后边还会有许多不同的文本表明办法,比方TF-IDF、LSA、LSI、LDA、HDP、NMF、Word2vec等。可是,请记住,不同的运用场景需求不同的文本特征,没有百试不爽的办法,而且,请自始自终的记住这句名言:

废物入,废物出(garbage in, garbage out)。

废物入,废物出(garbage in, garbage out)。

运用词袋模型将多个文档转化为向量,每个文档由一个向量表明,其间向量元素“i”表明第i个单词出现在文档中的次数。

仅经过它们的(整型)id来表征词汇是有利的, 问题和ID之间的映射称为字典(dictionary):

dictionary = corpora.Dictionary(texts)

dictionary.save(os.path.join(TEMP_FOLDER, ‘deerwester.dict’)) # 保存字典,以备后续查找之用print(dictionary)

dictionary = corpora.Dictionary(texts)

dictionary.save(os.path.join(TEMP_FOLDER, ‘deerwester.dict’)) # 保存字典,以备后续查找之用print(dictionary)

2019-05-06 15:58:09,861 : INFO : adding document #0 to Dictionary(0 unique tokens: [])2019-05-06 15:58:09,867 : INFO : built Dictionary(12 unique tokens: [‘立异’, ‘商业’, ‘常识图谱’, ‘技能’, ‘数据’]…)

12 documents (total 42 corpus positions)

2019-05-06 15:58:09,873 : INFO : saving Dictionary object under C:Users/hp/AppDataLocal/Tempdeerwester.dict, separately None

2019-05-06 15:58:09,879 : INFO : saved C:UsershpAppDataLocalTempdeerwester.dict

2019-05-06 15:58:09,861 : INFO : adding document #0 to Dictionary(0 unique tokens: [])2019-05-06 15:58:09,867 : INFO : built Dictionary(12 unique tokens: [‘立异’, ‘商业’, ‘常识图谱’, ‘技能’, ‘数据’]…)

12 documents (total 42 corpus positions)

2019-05-06 15:58:09,873 : INFO 韩语翻译,水晶-ope体育渠道_ope体育电竞app_ope体育专业版: saving Dictionary object under C:Users/hp/AppDataLocal/Tempdeerwester.dict, separately None

2019-05-06 15:58:09,879 : INFO : saved C:UsershpAppDataLocalTempdeerwester.dict

Dictionary(12 unique tokens: [‘立异’, ‘商业’, ‘常识图谱’, ‘技能’, ‘数据’]…)

Dictionary(12 unique tokens: [‘立异’, ‘商业’, ‘常识图谱’, ‘技能’, ‘数据’]…)

在这儿,咱们经过gensim.corpora.dictionary.Dictionary这个类为处理过的语料库中出现的每个词汇分配一个绝无仅有的整数ID 。 这会扫描整个文本,核算一切的词汇计数和词汇相关数据。 最终,咱们看到在处理的语料库中有12个不同的词汇,这意味着每个文档将由12个数字表明(即12-D向量)。

下面,检查每个词汇与其对应ID之间的映射联系:

print(dictionary.token2id)

print(dictionary.token2id)

{‘立异’: 0, ‘商业’: 1, ‘常识图谱’: 2, ‘技能’: 3, ‘数据’: 4, ‘金融’: 5, ‘剖析’: 6, ‘常识’: 7, ‘办理’: 8, ‘一文’: 9, ‘企业’: 10, ‘转型’: 11}

{‘立异’: 0, ‘商业’: 1, ‘常识图谱’: 2, ‘技能’: 3, ‘数据’: 4, ‘金融’: 5, ‘剖析’: 6, ‘常识’: 7, ‘办理’: 8, ‘一文’: 9, ‘企业’: 10, ‘转型’: 11}

将分词后的文档实践转化为向量:

new_doc = “常识图谱 为 企业 转型 助力”

new_vec = dictionary.doc2bow(new_doc.lower.split)

print(new_vec) # “为”、“助力”等词汇未出现在字典中,因而被疏忽

new_do韩语翻译,水晶-ope体育渠道_ope体育电竞app_ope体育专业版c = “常识图谱 为 企业 转型 助力”

new_vec = dictionary.doc2bow(new_doc.lower.split)

print(new_vec) # “为”、“助力”等词汇未出现在字典中,因而被疏忽

[(2, 1), (10, 1), (11, 1)]

[(2, 1), (10, 1), (11, 1)]

函数doc2bow仅仅核算每个不同词汇的出现次数,将词汇转化为整数词汇id,并将成果作为一个词袋(bag-of-words)——一个稀少向量回来,方法为( word_id1,word_count1),( word_id2,word_count2),( word_id3,word_count3)…

在token_id中,“立异”对应的为0,“商业”为1,…,’转型’为11。因而,新文档“常识图谱 为 企业 转型 助力(常识图谱为企业转型助力)”将被转化为[(2, 1), (10, 1), (11, 1)]。 “常识图谱”、“企业”、“转型” 出现在词典中并出现一次。

因而,它们在稀少向量中别离变为(2, 1), (10, 1), (11, 1)。 “为”、“转型”、“助力”等词汇在字典中不存在,因而不会出现在稀少向量中。词汇计数为0的词汇不会出现在稀少向量中,而且稀少向量中将永久私摄不会出现像(3,0)这样的元素。

关于了解scikit-learn的人来说,doc2bow与在CountVectorizer上调用transform有类似的效果(http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html)。doc2bow也能够像fit_transform那样运作,相关具体信息,请参阅gensim API Doc(https://radimrehurek.com/gensim/corpora/dictionary.html#gensim.corpora.dictionary.Dictionary.doc2bow)。

corpus = [dictionary.doc2bow(text) for text in texts]

corpus = [dictionary.doc2bow(text) for text in texts]

corpora.MmCorpus.serialize(os.path.join(TEMP_FOLDER, ‘deerwester.mm’), corpus) #保存到本地,以作后用

for c in corpus:

print(c)

corpora.MmCorpus.serialize(os.path.join(TEMP_FOLDER, ‘deerwester.mm’), corpus) #保存到本地,以作后用

for c in corpus:

print(c)

2019-05-06 16:00:28,683 : INFO : storing corpus in Matrix Market format to C:Users/hp/AppData/Local/Tempdeerwester.mm

2019-05-06 16:00:28,688 : INFO : saving sparse matrix to C:Users/hp/AppData/Local/Temp/deerwester.mm

2019-05-06 16:00:28,690 : INFO : PROGRESS: saving document

2019-05-06 16:00:28,693 : INFO : saved 1212 matrix, density=24.306% (35/144)

2019-05-06 16:00:28,695 : INFO : saving MmCorpus index to C:UsershpAppDataLocalTempdeerwester.mm.index

2019-05-0李海娜6 16:00:28,683 : INFO : storing corpus in Matrix Market format to C:Users/hp/AppData/Local/Tempdeerwester.mm

2019-05-06 16:00:28,688 : INFO : saving sparse matrix to C:Users/hp/AppData/Local/Temp/deerwester.mm

2019-05-06 16:00:28,690 : INFO : PROGRESS: saving document

2019-05-06 16:00:28,693 : INFO : saved 1212 matrix, density=24.306% (35/144)

2019-05-06 16:00:28,695 : INFO : s韩语翻译,水晶-ope体育渠道_ope体育电竞app_ope体育专业版aving MmCorpus index to C:UsershpAppDataLocalTempdeerwester.mm.index

[(0, 1), (1, 2), (2, 1)][(2, 1), (3, 1), (4, 1), (5, 1)][(2, 1), (6, 1), (7, 2), (8, 2)][(2, 1), (3, 1), (4, 1), (9, 1)][(2, 1), (3, 1), (5, 1)][(1, 1), (2, 1), (3, 1), (9, 1)][(4, 2), (6, 1), (10, 1)][(0, 1)][(2, 1), (3, 1)][(2, 1), (4, 1)][(2, 1), (10, 1)][(2, 2), (10, 2), (11, 2)]

到现在为止,应该清楚的是,带有id = 10的向量特征表明文档中出现“企业”韩语翻译,水晶-ope体育渠道_ope体育电竞app_ope体育专业版一词的次数——在这12个文档中, 只要倒数前2个和和倒数第6个的值为1,其他皆为0。

二、语料库流(Corpus Streaming)——每次仅调用一个文档

请注意,上面的语料(corpus)彻底驻留在内存中,作为一般的Python列表而存在。 在这个简略的比方中,它并不重要,仅仅为了论述便利。让咱们设想,手头的语料库中有数千万个文档,要将一切这些文档都存储在RAM中是行不通的,这会耗费很多的核算资源,速度奇慢!

相反,咱们假定文档存储在本地的单个文件中,每行一个文档。 Gensim只要求语料库在需求运用时,能够一次回来一个文档向量:

from smart_open import smart_open

class MyCorpus(object):

def __iter__(self):

for line in smart_open(‘datasets/mycorpus.txt’, ‘r’,encoding=’utf-8′):# 假定每一行一个文档,用jieba进行分词

yield dictionary.doc2bow(‘ ‘.join(jieba.lcut(line)).lower.split)

from smart_open import smart_open

class MyCorpus(object):

def __iter__(self):

for line in smart_open(‘datasets/mycorpus.txt’, ‘r’,encoding=’utf-8′):# 假定每一行一个文档,用jieba进行分词

yield dictionary.doc2bow(‘ ‘.join(jieba.lcut(line)).lower.split)

每个文档占用单个文件中一行的假定并不重要,你能够规划__iter__函数以合适你的特定输入格局,比方文档目录、待解析的XML、可拜访的网络节点……只需解析你的输入以检索每个文档中的所用词汇,然后经过字典将这些词汇转化为它们对应的整数ID,并在__iter__中发生具有生成器特点的稀少向量。

corpus_memory_friendly = MyCorpus #不需求将语料载入到内存中!

print(corpus_memory_friendly)

corpus_memory_friendly = MyCorpus #不需求将语料载入到内存中!

print(corpus_mem韩语翻译,水晶-ope体育渠道_ope体育电竞app_ope体育专业版ory_friendly)

<__main__.MyCorpus object at 0x00000160C6575320>

<__main__.MyCorpus object at 0x00000160C6575320>

现在,荷兹hezcorpus_memory_friendly是一个目标。 咱们没有界说任何打印(print)办法,因而print只输出目标在内存中的地址, 这看起来没啥用。 要检查其间的向量构成,需求遍历语料库,并打印每个文档向量(一次一个):

for vector in corpus_memory_friendly: #每次载入一个文档向量

print(vector)

for vector in corpus_memory_friendly: #每次载入一个文档向量

print(vector)

[(0, 1), (1, 2), (2, 1), (3, 1)][(2, 1), (3, 1), (4, 1), (5, 1), (6, 1)][(2, 1), (3, 3), (7, 1), (8, 2)][(2, 1), (3, 1), (4, 1), (5, 1), (9, 1)][(2, 1), (3, 1), (4, 1), (6, 1)][(1, 1), (2, 1), (3, 1), (4, 1), (9, 1)][(5, 2), (7, 1), (10, 1)][(0, 1)][(2, 1), (3, 1), (4, 1)][(2, 1), (3, 1), (5, 1)][(2, 1), (3, 1), (10, 1)][(2, 2), (3, 2), (10, 1)developpesex]

[(0, 1), (1, 2), (2, 1), (3, 1)][(2, 1), (3, 1), (4, 1), (5, 1), (6, 1)][(2, 1), (3, 3), (7, 1), (8, 2)][(2, 1), (3, 1), (4, 1), (5, 1), (9, 1)][(2, 1), (3, 1), (4, 1), (6, 1)][(1, 1), (2, 1), (3, 1), (4, 1), (9, 1)][(5, 2), (7, 1), (10, 1)][(0, 1)][(2, 1), (3, 1), (4, 1)][(2, 1), (3, 1), (5, 1)][(2, 1), (3, 1), (10, 1)][(2, 2), (3, 2), (10, 1)]

虽然输出与一般的Python列表的输咱们裸熊出相同,但此刻的语料库对内存更友爱——一次最多只要一个向量驻留在RAM中, 现在,你的语料库想用多大就用多大,哪怕是不计其数个文档,仅仅速度稍慢算了。

咱们将运用mycorpus.txt这个文件来创立字典(Dictionary),但不是将整个文件加载到本地内存中。 然后,咱们将过滤掉语猜中的停用词以及词频为1的词汇,然后得到“净化”后的语料。

请记住,dictionary.filter_tokens(或许dictionary.add_document)将调用dictionary.compactify来删去词汇id序列中的空隙,空置的占位符(””)将会被除掉。

from six import iteritems

from smart_open import smart_open #搜集一切词汇的核算信息dictionary = corpora.Dictionary(”.join(jieba.lcut(line)).lower.split for line in

smart_open(‘datasets/mycorpus.txt’,’r’,encoding=’utf-8′)) #停用词和低频词(这儿指仅出现1次的词汇)的ID调集

from 女受刑six import iteritems

from smart_open import smart_open #搜集一切词汇的核算信息dictionary = corpora.Dictionary(”.join(jieba.lcut(line)).lower.split for line in

smart_open(‘datasets/mycorpus.txt’,’r’,encoding=’utf-8′)) #停用词和低频词(这儿指仅出现1次的词汇)的ID调集

stop_ids = [dictionary.token2id[stopword] for stopword in stoplist if stopword in dictionary.韩语翻译,水晶-ope体育渠道_ope体育电竞app_ope体育专业版token2id]

once_ids = [tokenid for tokenid, docfreq in iteritems(dictionary.dfs) if docfreq == 1] #真施行行去停用词和低频次的操作

dictionary.filter_tokens(stop_ids + once_ids)

print(dictionary)

stop_ids = [dictionary.token2id[stopword] for stopword in stoplist if stopword in dictionary.token2id]

once_ids = [tokenid for tokenid, docfreq in iteritems(dictionary.dfs) if docfreq == 1] #真施行行去停用词和低频次的操作

dictionary.filter_tokens(stop_ids + once_ids)

print(dictionary)

2019-05-06 15:44:52,297 : INFO : adding document #0 to Dictionary(0 unique tokens: []) 2019-05-06 15:44:52,303 : INFO : built Dictionary(100 unique tokens: [‘,’, ‘:’, ‘。’, ‘为’, ‘内核’]…) from 12 documents (total 164 corpus positions)

2019-05-06 15:44:52,297 : INFO : adding document #0 to Dictionary(0 unique tokens: []) 2019-05-06 15:44:52,303 : INFO : built Dictionary(100 unique tokens: [‘,’, ‘:’, ‘。’, ‘为’, ‘内核’]…) from 12 documents (total 164 corpus positions)

Dictionary(10 unique tokens: [‘立异’, ‘商业’, ‘图谱’, ‘常识’, ‘技能’]…)

到这儿,词袋表明(Bag-of-words Representation)的原理和操作就说完了。 当然,咱们用这种语料库能够做什么是另一个问题; 核算不同单词的出现频率可能是有用的,但在实践场景中,这还不行。

事实证明,咱们常常需求对这个简略的表明进行转化(Transformation),之后才干进行文档类似度、文本聚类或许文本分类这样的使命。 转化后边会说到,但在此之前,让咱们将注意力会集在语料库持久性(Corpus Persistency)上。

三、语料格局(Corpus Formats)

存在几种用于将向量空间(Vector Space)语料库(向量序列)序列化到本地的文件格局。Gensim经过前面说到的流式语料库接口(Streaming Corpus Interface)完成:以慵懒办法(A Lazy Fashion)从本地读取很多语料,一次一个文档,而不是一次性将整个语料库读入本地内存中,这在语料库cbox极为巨大时是很折腾电脑的。

其间,一种比较值得注意的文件格局是Matrix Market格局(http://math.nist.gov/MatrixMarket/formats.html)。

下面,将文档以Matrix Market格局保存:

#创立一个包括2个文档的细小语料,以一个python列表出现

corpus = [[(1, 0.5)], []] # 其间一个文档成心搞成空的

corpora.MmCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.mm’), corpus)

#创立一个包括2个文档的细小语料,以一个python列表出现

corpus = [[(1, 0.5)], []] # 其间一个文档成心搞成空的

corpora.MmCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.mm’), corpus)

2019-05-06 16:36:54,265 : INFO : storing corpus in Matrix Market format to C:Users/hp/AppData/Local/Temp/corpus.mm

2019-05-06 16:36:54,281 : INFO : saving sparse matrix to C:Users/hp/AppData/Local/Temp/corpus.mm

2019-05-06 16:36:54,285 : INFO : PROGRESS: saving document #

2019-05-06 16:36:54,290 : INFO : saved 22 matrix, density=25.000% (1/4)

2019-05-06 16:36:54,293 : INFO : saving MmCorpus index to C:Users/hp/AppData/Local/Temp/corpus.mm.index

2019-05-06 16:36:54,2女生相片65 : INFO : storing corpus in Matrix Market format to C:Users/hp/AppData/Local/Temp/corpus.mm

2019-05-06 16:36:54,281 : INFO : saving sparse matrix to C:Users/hp/AppData/Local/Temp/corpus.mm

2019-05-06 16:36:54,285 : INFO : PROGRESS: saving document #

2019-05-06 16:36:54,290 : INFO : saved 22 matrix, density=25.000% (1/4)

2019-05-06 16:36:54,293 : INFO : saving MmCorpus index to C:Users/hp/AppData/Local/Tem盘龙小说p/corpus.mm.index

其他的存储格局还有Joachim’s SVMlight format(http://svmlight.joachims.org/)、Blei’s LDA-C format(http://www.cs.columbia.edu/~blei/lda-c/) 和GibbsLDA++ format(http://gibbslda.sourceforge.net/)。

corpora.SvmLightCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.svmlight’), corpus)

corpora.BleiCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.lda-c’), corpus)

corpora.LowCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.low’), corpus)

corpora.SvmLightCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.svmlight’), corpus)

corpora.BleiCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.lda-c’), corpus)

corpora.LowCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.low’), corpus)

反向操作,从Matrix Market文件加载语料库迭代器(Corpus Iterator):

corpus = corpora.MmCorpus(os.path.join(TEMP_FOLDER, ‘corpus.mm’))

开眼角

corpus = corpora.MmCorpus(os.path.join(TEMP_FOLDER, ‘corpus.mm’))

语料库目标是流式的(Streams),因而,咱们一般无法直接打印它们,只要经过遍历才干看到其间的元素:

print(corpus)

print(corpus)

MmCorpus(2 documents, 2 features, 1 non-zero entries)

经过迭代器列表化来检查语料库中的元素:

# 一种打印语料库的办法是 — 将其整个载入内存中print(list(corpus)) # 调用 list 能将任何序列转化为一般的Python list

# 一种打印语料库的办法是 — 将其整个载入内存中print(list(corpus)) # 调用 list 能将任何序列转化为一般的Python 房价跌落list

[[(1,0.5)],[]]

或许这样:

# 另一种办法:一次打印一个文档for doc in corpus:print(doc)

# 另一种办法:一次打印一个文档for doc in corpus:print(doc)

[(1, 0.5)][]

[(1, 0.5)][]

明显,第二种办法对内存更友爱,可是出于测验和开发的意图,没有什么比调用list(corpus)更简略、方便!。

接下来,以Blei的LDA-C格局保存相同的Matrix Market文档流:

corpora.BleiCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.lda-c’), corpus)

corpora.BleiCorpus.serialize(os.path.join(TEMP_FOLDER, ‘corpus.lda-c’), corpus)

经过这种办法,gensim也能够用作内存高效的I / O格局转化东西:只需运用一种格局加载文档流,然后当即以另一种格局进行保存。

四、与NumPy、SciPy的兼容性

Gensim还包括许多高效且有用的函数,能够在(http://radimrehurek.com/gensim/matutils.html)看到,经过这些函数,咱们能够轻松的进行numpy矩阵的转化:

import gensim

import numpy as np

numpy_matrix = np.random.randint(10, size=[5,2])

import gensim

import numpy as np

numpy_matrix = np.random.randint(10, size=[5,2])

numpy_matrix

numpy_matrix

array([[0, 4], [0, 7], [8, 2], [7, 0], [2, 1]])

array([[0, 4], [0, 7], [8, 2], [7, 0], [2, 1]])

corpus = gensim.matutils.Dense2Corpus(numpy_matrix)numpy_matrix_dense = gensim.matutils.corpus2dense(corpus, num_terms=10)

corpus = gensim.matutils.Dense2Corpus(numpy_matrix)numpy_matrix_dense = gensim.matutils.corpus2dense(corpus, num_terms=10)

numpy_matrix_dense

numpy_matrix_dense

array([[0., 4.], [0., 7.], [8., 2.], [7., 0.], [2., 1.], [0., 0.], [0., 0.], [0., 0.], [0., 0.], [0., 0.]], dtype=float32)

array([[0., 4.], [0., 7.], [8., 2.], [7., 0.], [2., 1.], [0., 0.], [0., 0.], [0., 0.], [0., 0.], [0., 0.]], dtype=float32)

与scipy.sparse矩阵彼此转化:

import scipy.sparsescipy_sparse_matrix = scipy.sparse.random(5,2)

import scipy.sparsescipy_sparse_matrix = scipy.sparse.random(5,2)

scipy_sparse_matrix

匕首

scipy_sparse_matrix

<52 sparse matrix of type ‘’ with 0 stored elements in COOrdinate format>航天通讯;

<52 sparse matrix of type ‘’ with 0 stored elements in COOrdinat高岗e format>

corpus = gensim.matutils.Sparse2Corpus(scipy_sparse_matrix)

corpus = gensim.matutils.Sparse2Corpus(scipy_sparse_matrix)

corpus

corpus

scipy_csc_matrix = gensim.matutils.corpus2csc(corpus)

scipy_csc_matrix = gensim.matutils.corpus2csc(corpus)

scipy_csc_matrix

scipy_csc_matrix

<0x2 sparse matrix of type ‘’ with 0 stor化装视频ed elements in Compressed Sparse Column format>

<0x2 sparse matrix of type ‘’ wit水希凉h 0 stored elements in Compressed Sparse Column format>

要取得完好的参阅(想要将字典的规划精简下以节省内存?优化语料库和NumPy / SciPy数组之间的转化?),请参阅gensim的API文档。

鄙人一篇文章中,笔者会接着本次的主题,说说关于主题模型和文本数据转化,即TF-IDF模型、潜在语义索引(LSI)、随机映射(Random Projections)、隐狄利克雷分配模型(Latent Dirichlet Allocation, LDA)、层次狄利克雷进程(Hierarchical Dirichlet Process,HDP)的教程。

#专栏作家

苏格兰折耳喵(微信大众号:Social Listening与文本发掘),人人都是产品司理专栏作家,数据PM一只,拿手数据剖析和可视化表达,热衷于用数据发现洞悉,辅导实践。

题图来自Unsplash,根据CC0协议

演示站
上一篇:jbl,好听的qq昵称-ope体育平台_ope体育电竞app_ope体育专业版
下一篇:爱情公寓4,窝沟封闭-ope体育平台_ope体育电竞app_ope体育专业版