基于Gensim的文本相似度计算

Gensim是Python的自然语言处理库。使用的算法,如TF-IDF ($ TERM频率-逆文档频率),潜在狄利克雷分配(LDA),?潜在语义分析(LSA)或随机投影等。它是通过在训练语料库中检查同一文档中的词的统计* * *模式来找到文档的语义结构,最后将其转化为向量模式进行进一步处理。此外,Gensim还实现了word2vec功能,可以将单词转化为单词向量。

语料库是一组原始文本,用于无监督地训练文本主题的隐藏结构。不需要手动标记语料库中的附加信息。在Gensim中,语料库通常是一个迭代对象(比如一个列表)。每次迭代返回一个稀疏向量,可用于表达文本对象。

向量是一组文本特征的列表。它是一个文本在Gensim中的内部表达。

词典是所有文档中所有单词的集合,记录了每个单词出现的次数等信息。?

模型是一个抽象的术语。定义了两个向量空间的变换(即从文本的一个向量表示到另一个向量表示)。

用一个实验来了解:

# -*-编码:UTF-8 -*-?

从gensim导入语料库,相似性,模型

进口洁霸

classGensimExp(对象):

def__init__(self,documents,test_document,Type,feature_num,best_num):

self.raw_documents =文档

自我测试文档=测试文档

自我。SimCalType =类型

self.num_features = feature_num

self.num_best =最佳数量

defCalSim(self):

corpora_documents = []

#分词

for item _ textin self . raw _ documents:

item _ seg = list(jieba . cut(item _ text))

corpora_documents.append

#生成词典和语料库

字典=语料库。词典(语料库_文档)

#计算每条新闻对应的弓矢。

corpus =[dictionary . doc 2 bow(text)for text incorporation _ documents]#迭代器

如果自己。simcal type = = ' Similarity-tfi df-index ':

#统计语料库中每个特征的IDF值?

tfidf_model =模型。TfidfModel(语料库)

语料库_ tfi df = tfi df _ model[语料库]

自我。_相似性=相似性。相似性(自我。SimCalType,corpus_tfidf,\

num_features=self.num_features,num_best=self.num_best)

test _ cut _ raw = list(jieba . cut(self . test _ document))

test _ corpus = dictionary . doc 2 bow(test _ cut _ raw)

#根据训练好的模型,生成IF-IDF值,然后计算相似度。

自我。_ test _ corpus = tfi df _ model[test _ corpus]

elifself。SimCalType = = ' Similarity-LSI-index ':

lsi_model =模型。LsiModel(语料库)

语料库_ LSI = LSI _ model[语料库]

自我。_相似性=相似性。相似性(自我。SimCalType,corpus_lsi,\

num_features=self.num_features,num_best=self.num_best)

test _ cut _ raw = list(jieba . cut(self . test _ document))

test _ corpus = dictionary . doc 2 bow(test _ cut _ raw)

自我。_ test _ corpus = LSI _ model[test _ corpus]

自我。打印输出()

defPrint_Out(self):

string = '最相似的材料是'

fortplinrange(len(self。_相似性[自我。_test_corpus])):

iftpl!= len(自我。_相似性[自我。_test_corpus]) -1:

string =字符串+ str(self。_相似性[自我。_test_corpus][tpl][0]) \

+'('+ str(self。_相似性[自我。_test_corpus][tpl][1]) +'),'

否则:

string =字符串+ str(self。_相似性[自我。_test_corpus][tpl][0]) \

+'('+ str(self。_相似性[自我。_test_corpus][tpl][1]) +')'

打印(字符串)

if__name__=='__main__ ':

raw_documents = [

0 1 19,中信集团与腾讯在深市签署战略框架协议,宣布将推进云与大数据、区块链、人工智能等技术领域的业务合作,积极探索实体产业数字化转型升级之路。,

1浦发银行公告称,公司成都分行因违规信贷业务等违法违规行为被银监会罚款4.62亿元,罚款金额全额计入公司2017年度损益,对公司业务发展和持续经营无重大不利影响。,

2浦发银行被罚4.62亿元回应浦发银行成都分行违规:从浦发银行总行获悉,浦发银行对成都分行违规发放贷款案深感尴尬;我们坚决支持和接受监管部门的调查,同时将以此为鞭策,加强自身管理,坚持从严治理,始终把合法合规经营作为未来业务发展的根本。(蔡邑)’,

3.苏测公告:公司首次公开发行前发行的65,438+0,332,000股将于6月24日解禁,占公司总股本的65,438+0%;解禁日实际流通股65,438+0,226,5438+0.5万股,占总股本的9.73%。本次申请解除股份限售的股东为苏州测试仪器总厂及钟琼华、、吴、陈颖等四名自然人股东。" ,

据报道,波士顿科学和国药控股的一家子公司参与了对XIO子公司Lumenis的竞购。,

5苏宁尚云回复深交所问询函:2065438+2007年7月,苏宁金融研究院正式成立区块链实验室,开展区块链技术及其在金融行业的应用研究,旨在利用区块链技术为苏宁金夫业务和苏宁银行业务提供技术支持。苏宁银行区块链国内信用证信息传输系统采用联盟链模式,仅在联盟银行之间免费使用,不对外提供直接服务。这个系统没有直接收入。,

马龙环卫公告称,公司654.38+600亿首次公开发行限售股将于654.38年6月26日上市流通,涉及654.38+07名股东,包括现任董事、监事、高管张桂凤。,

航天工程7日发布公告,公司首次公开发行的3.24亿股限售股将于6月29日上市流通。涉及的股东有中国运载火箭技术研究院、航天投资控股有限公司、北京航天动力研究所、北京航天产业投资基金(有限合伙)和全国社保基金理事会划转的两户。,

大千生态公告,公司与江苏大千设计院有限公司组成的联合体已中标高淳区东坝镇EPC总承包项目,预计投资约654.38+0.4亿元。该项目的顺利实施将对公司今年的经营业绩产生积极影响。,

9 1954 2月19日,苏联最高苏维埃主席团在“兄弟般的乌克兰与俄罗斯结盟300周年”之际通过决议,俄罗斯联邦克里米亚州划给乌克兰加入共和国。

10姬友股份公告,公司预计2017年度净利润较去年同期增加约4250万元至5300万元,增幅约80.49%-100.37%,上年同期盈利5280.38万元。本期收入比上期增加较多,营业利润比上期增加较多;收到的政府补助、理财收益等非经常性损益对公司净利润的影响约为3200万元。,

11千山药机:大股东质押股份跌破平仓线。千山药机公告称,第一大股东、实际控制人之一刘向华合计持有公司14.83%的股份。目前,刘向华* * *质押公司13.78%股权。刘向华质押给国泰君安证券的2980.8万股已跌破平仓线。该公司目前正在接受证券及期货事务监察委员会的调查。根据有关规定,公司大股东在调查期间不得减持(包括股权质押和清算)。因此,本次刘向华质押的股票将跌破平仓线,不会导致公司实际控制权发生变化。,

12天马精化:子公司拟逾亿元控股中科电子,加大供应链管理发展战略。,

' 13超华科技'公告,近日接到持股子公司贝尔信员工通知,报告贝尔信公司近期无法与其董事长郑长春取得联系。截至目前,该公司未能与贝尔信董事长郑长春取得联系。经与贝尔信主要股东讨论并经贝尔信董事会批准,将由贝尔信现有管理层组成临时工作组,维护贝尔信正常的生产经营秩序。公司对贝尔信进行了全面核查,维护上市公司和股东利益。" ,

根据' 14洪升科技公告,公司预计2017年度实现利润2.8亿元至2.9亿元,同比增长20.65%至24.96%,去年同期实现利润2.32亿元。‘报告期内,公司预计非经常性损益对净利润的影响约为65,438+00万元-65,438+03万元。’,

15徐东光电公告称,控股股东徐东集团员工成长计划已完成购买公司股份,合计购买1119010,000股,占总股本的0.2%,合计成交约102万元。

]

obj 1 = gensim exp(raw _ documents,'数字化转型升级路径',' similarity-tfidf-index ',600,5)。卡尔西姆()

Obj2 = GensimExp(raw_documents,'信贷业务非法处理',' similarity-tfidf-index ',600,3)。卡尔西姆()

Obj3 = GensimExp(raw_documents,'本期收入比上期增加了','相似性-LSI-index ',400,2)。卡尔西姆()

实验结果:

因为语料库不多,返回的相似文本数量少,但可以看出判断是正确的。(PS:分词过程中未处理停用词)

参考:

/gensim/tutorial.html