文本相似性计算

文本相似性计算三个阶段:
1. 字面的匹配相似
2. 词汇的匹配相似
3. 语义的匹配相似

一、JaccardSimilarity方法
对文本进行分词,然后对每一个单词分配一个唯一的ID(token),为了计算文本之间的相似性。JaccardSimilarity方法的计算方法是:
两个集合的交集/两个集合的并集
二、文本的向量化
文本->向量化为向量->向量空间中的某一个点->求两个点(即两个文本)之间的距离->得到文档的相似性
2.1 简单的向量化
为每一个词语分配一个唯一的ID,假设所有的词语个数为N,用数组表示就是大小为N数组的下表。然后,如果文档中对应位置的词出现就将该位置置为1
2.2 TF-IDF向量化
通过TF-IDF向量化的方法,可以将每个词向量化成一个表示权重的小数,而不是0或1,它已经带有了文本的信息了。向量化后每一个词都带上了TF-IDF信息了,而TF-IDF的作用就是保留词在文档中的权重信息,这就相当于保留了文本的信息。于是,我们通过token的概念和TF-IDF方法,就把一个本文向量化了,并且向量化完了以后还保留了文本本身的信息,每一个向量就是一个前面提到的词袋。
     实践:利用gensim的库corpora、models、similarities实现文档相似性的计算: 

 1 训练语料:LDA_text.txt
 2 Human machine interface for lab abc computer applications Human Human
 3 A survey of user opinion of computer system response time
 4 The EPS user interface management with system
 5 System and human system engineering testing of EPS
 6 Relation of user perceived response time to error measurement
 7 The generation of random binary unordered trees
 8 The intersection graph of paths in trees
 9 Graph minors IV Widths of trees and well quasi ordering
10 Graph minors A survey

 1 from gensim import corpora, models, similarities
 2
 3 if __name__==‘__main__‘:
 4     f = open(‘./LDA_test.txt‘, ‘r‘)
 5     stop_list = ‘for a of the and to in‘.split()
 6     texts = [[word for word in line.strip().lower().split() if word not in stop_list] for line in f.readlines()]
 7
 8     # build dictionary
 9     dictionary = corpora.Dictionary(texts) # construct dictionary for all documents and the length of dic is the number of uniq words
10     corpus = [dictionary.doc2bow(text) for text in texts] # transform document to bag of words representaion according to dictionray
11
12     # calculates the idf for each word in document
13     tfidf_model = models.TfidfModel(corpus)
14     tfidf = tfidf_model[corpus] # [] method transform the bow representation to tfidf
15
16     query = ‘human system with System engineering testing‘
17     query_bow = dictionary.doc2bow(query.split())
18     query_tfidf = tfidf_model[query_bow] # calculate the query itfidf reprensentation using the bow  reprensentation
19     # print query_tfidf
20     similarity = similarities.Similarity(‘Similarity-index‘,tfidf, num_features=600)
21     similarity.num_best = 3
22     print ‘query =‘, query
23     for item in similarity[query_tfidf]:
24         print ‘ ‘.join(texts[item[0]]), item[1] # 打印top3相似的文档和文档相似性

1 输出结果
2                         document                                       score
3 system human system engineering testing eps     0.775833368301
4 eps user interface management with system       0.349639117718
5 human machine interface lab abc computer applications human human       0.240938946605
6                 

三、向量空间模型(VSM)
对本文进行向量化完了之后,就是将文本映射为向量空间中的一个点。然后,通过计算向量空间中的两个点之间距离的方法计算文本之间的相似性:
3.1 欧式距离
3.2 余弦相似度距离
四、LDA主题模型
前述的方法构建文本向量的方法:只是机械的计算了词的向量,并没有任何上下文的关系,所有思想还停留在机器层面,还没有到更高层次上来
4.2 LDA
P(W(词)|D(文章))=P(W(词)|T(主题))*P(T(主题)|D(文章))
(1)P(W(词)|D(文章)) 这个其实是可以直接统计出来的
(2)P(W(词)|T(主题)) 这个是模型的一部分,是要求出来的
(3)P(T(主题)|D(文章)) 这个是最后分类的结果
因此,模型的关键是求出来每一个词所属的主题分布情况。当来了一片新的文档后,统计出该文档属于每一个主题的概率分布。

时间: 2024-10-12 07:36:38

文本相似性计算的相关文章

利用sklearn计算文本相似性

利用sklearn计算文本相似性,并将文本之间的相似度矩阵保存到文件当中.这里提取文本TF-IDF特征值进行文本的相似性计算. #!/usr/bin/python # -*- coding: utf-8 -*- import numpy import os import sys from sklearn import feature_extraction from sklearn.feature_extraction.text import TfidfTransformer from sklea

Solr In Action 笔记(2) 之 评分机制(相似性计算)

Solr In Action 笔记(2) 之评分机制(相似性计算) 1 简述 <这就是搜索引擎>里面对相似性计算进行了简单的介绍. 内容的相似性计算由搜索引擎的检索模型建模,它是搜索引擎的理论基础,为量化相关性提供了一种数学模型,否则没法计算.当然检索模型理论研究存在理想化的隐含假设,即假设用户需求已经通过查询非常清晰明确地表达出来了,所以检索模型的任务不牵扯到对用户需求建模,但实际上这个和实际相差较远,即使相同的查询词,不同用户的需求目的可能差异很大,而检索模型对此无能为力.几种常见的检索模

iOS文本高度计算

文本高度计算:此方法适用于根据不同的文字长短,设置与文字相同的size //****************************************************************************************************************// //***********************************************************************************************

MachingLearning中的距离和相似性计算以及python实现

在机器学习中,经常要用到距离和相似性的计算公式,我么要常计算个体之间的差异大小,继而评价个人之间的差异性和相似性,最常见的就是数据分析中的相关分析,数据挖掘中的分类和聚类算法.如利用k-means进行聚类时,判断个体所属的类别,要利用距离计算公式计算个体到簇心的距离,如利用KNN进行分类时,计算个体与已知类别之间的相似性,从而判断个体所属的类别等. 文章编辑的过程中或许存在一个错误或者不合理的地方,欢迎指正. 参考:http://www.cnblogs.com/heaad/archive/201

集算器如何处理类文本数据计算

json Java有足够多的类库用于解析和生成json,但缺乏后续计算能力.集算器支持多层结构数据,可以不丧失信息地将json解析成可计算的内存数据表进一步处理. 设有如下格式的json数据: { “order”:[ { “client”:”北京润乾软件”, “date”:”2015-6-23”, “item” : [ { “product”:”HP笔记本”, “number”:4, “price”:3200 }, { “product”:”DELL服务器”, “number”:1, “pric

windows C++如何根据文本字符串计算其绘制需占用宽度

分析 计算某串文本在绘制UI上需要占用的宽度,需要以下几个要素: 字符串本身 所使用的字体 字体会影响所绘制的文字的宽度--那是理所当然的 所使用的GDI或GDI+对象 方法 GDI ::SelectObject(hDC, hFont); //第四个参数:指向SIZE结构的指针,该结构中字符串的尺寸将被返回. ::GetTextExtentPoint32(hDC, str, StrLen(str), &sizeText); GDI+ 比GDI复杂,需要使用到GDI+对象的APIMeasureSt

余弦相似性计算及python代码实现

A:西米喜欢健身 B:超超不爱健身,喜欢打游戏 step1:分词 A:西米/喜欢/健身 B:超超/不/喜欢/健身,喜欢/打/游戏 step2:列出两个句子的并集 西米/喜欢/健身/超超/不/打/游戏 step3:计算词频向量 A:[1,1,1,0,0,0,0] B:[0,1,1,1,1,1,1] step4:计算余弦值 余弦值越大,证明夹角越小,两个向量越相似. step5:python代码实现 from functools import reduce python3中reduce函数集成在fu

python文本联系--计算字符串中各个字符的数量

1 #!/usr/bin/python3 2 #-*- coding:utf-8 -*- 3 #计算字符串中,各个字符串的含量 4 str='adfadfafdfaafasdfasdcadf' 5 from collections import Counter 6 str1=Counter(str) 7 keys=sorted(str1) #可以返回str中的唯一值,且按照字母排序 8 #keys ['a', 'c', 'd', 'f', 's'] 9 values=str1.values()

python文本处理---计算fasta文件中不同氨基酸的数目

#::!/usr/bin/python3 #-*- coding:utf-8 -*- #计算fasta文件中各个氨基酸的含量 import sys args=sys.argv f=open(args[1], 'r') fw=open('out.txt', 'w') line=f.read() txt=''.join(line.split('\n')[1:]) #可以得到氨基酸序列 #构建了各个氨基酸和含量的字典 ##注意collections模块中Counter的用法 from collecti