精华内容
下载资源
问答
  • python文本相似度分析

    2019-01-26 19:29:01
    python爬虫,以及相似度分析,可以分析两个文本字符串的相似度
  • Python 文本相似度分析

    2017-03-29 20:27:00
    环境 Anaconda3 Python 3.6, Window 64...利用gensim下面的corpora,models,similarities 进行语料库建立,模型tfidf算法,稀疏矩阵相似度分析 代码 # -*- coding: utf-8 -*- import jieba from...
    • 环境

    Anaconda3 Python 3.6, Window 64bit

    • 目的

    利用 jieba 进行分词,关键词提取

    利用gensim下面的corpora,models,similarities 进行语料库建立,模型tfidf算法,稀疏矩阵相似度分析

    • 代码
    # -*- coding: utf-8 -*-
    
    import jieba
    from gensim import corpora, models, similarities
    from collections import defaultdict
    
    # 定义文件目录
    work_dir = "D:/workspace/PythonSdy/data"
    f1 = work_dir + "/t1.txt"
    f2 = work_dir + "/t2.txt"
    # 读取文件内容
    c1 = open(f1, encoding='utf-8').read()
    c2 = open(f2, encoding='utf-8').read()
    # jieba 进行分词
    data1 = jieba.cut(c1)
    data2 = jieba.cut(c2)
    
    data11 = ""
    # 获取分词内容
    for i in data1:
        data11 += i + " "
    data21 = ""
    # 获取分词内容
    for i in data2:
        data21 += i + " "
    
    doc1 = [data11, data21]
    # print(doc1)
    
    t1 = [[word for word in doc.split()]
          for doc in doc1]
    # print(t1)
    
    # # frequence频率
    freq = defaultdict(int)
    for i in t1:
        for j in i:
            freq[j] += 1
    # print(freq)
    
    # 限制词频
    t2 = [[token for token in k if freq[j] >= 3]
          for k in t1]
    print(t2)
    
    # corpora语料库建立字典
    dic1 = corpora.Dictionary(t2)
    dic1.save(work_dir + "/yuliaoku.txt")
    
    # 对比文件
    f3 = work_dir + "/t3.txt"
    c3 = open(f3, encoding='utf-8').read()
    # jieba 进行分词
    data3 = jieba.cut(c3)
    data31 = ""
    for i in data3:
        data31 += i + " "
    new_doc = data31
    print(new_doc)
    
    # doc2bow把文件变成一个稀疏向量
    new_vec = dic1.doc2bow(new_doc.split())
    # 对字典进行doc2bow处理,得到新语料库
    new_corpor = [dic1.doc2bow(t3) for t3 in t2]
    tfidf = models.TfidfModel(new_corpor)
    
    # 特征数
    featurenum = len(dic1.token2id.keys())
    
    # similarities 相似之处
    # SparseMatrixSimilarity 稀疏矩阵相似度
    idx = similarities.SparseMatrixSimilarity(tfidf[new_corpor], num_features=featurenum)
    sims = idx[tfidf[new_vec]]
    print(sims)
    View Code
    • 结果展示

    从结果可以得出:被对比的文件3 和文件2内容更相近。

     

    转载于:https://www.cnblogs.com/kimbo/p/6641598.html

    展开全文
  • python文本相似度分析tf-idf

    千次阅读 2019-05-04 13:39:15
    首先我们了解几个概念名词 1.词频 ...计算相似度,得到两个值为,list3与list1和list2的相似度 最后大家可以看一下官网文档 https://radimrehurek.com/gensim/tutorial.html    

    首先我们了解几个概念名词

    1.词频

    2.逆文档频率

    3.TF-IDF算法

    4.语料库(corpus)

    5.余弦相似性

    大家参考下面文章查阅这三个名词的意义

    http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

    https://blog.csdn.net/wangxingfan316/article/details/79427260

    下面,步入正题,先看代码

    import jieba
    from gensim import corpora,models,similarities
    doc1 = '/Users/23263/Desktop/doc1.txt'
    doc2 = '/Users/23263/Desktop/doc2.txt'
    doc3 = '/Users/23263/Desktop/doc3.txt'
    list1 = jieba.lcut(open(doc1).read())
    list2 = jieba.lcut(open(doc2).read())
    list3=jieba.lcut(open(doc3).read())
    list1_2 = [list1,list2]
    #创建词典
    dictionary = corpora.Dictionary(list1_2)
    #获取语料库
    corpus = [dictionary.doc2bow(i) for i in list1_2]
    tfidf = models.TfidfModel(corpus)
    #特征数
    featureNUM = len(dictionary.token2id.keys())
    #通过TfIdf对整个语料库进行转换并将其编入索引,以准备相似性查询
    index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNUM)
    #稀疏向量.dictionary.doc2bow(doc)是把文档doc变成一个稀疏向量,[(0, 1), (1, 1)],表明id为0,1的词汇出现了1次,至于其他词汇,没有出现。
    new_vec = dictionary.doc2bow(list3)
    #计算向量相似度
    sim = index[tfidf[new_vec]]
    print(sim)

    导入jieba和下面三个库

    打开三个文件并分别分词,doc1和doc2写入list1_2,doc3写入list3(没有严格要求,这里的示例是三个文档的)

    以list1_2创建词典dictionary

    获取语料库corpus

    创建一个tidif算法框架为tfdif,即初始化一个转换

    计算特征数featureNUM(特征数为语料库所有id的个数)

    通过TfIdf对整个语料库进行转换并将其编入索引,以准备相似性查询

    待比较的稀疏向量new_vec为list3在list1_2中的体现,即在语料库中的体现,可以理解为是一种自然连接或者映射

    计算相似度,得到两个值为,list3与list1和list2的相似度

    最后大家可以看一下官网文档https://radimrehurek.com/gensim/tutorial.html

     

     

    展开全文
  • python 文本相似度分析doc2bow

    千次阅读 2018-11-03 16:39:38
    12、稀疏矩阵的相似度,从而建立索引,得到最终相似度结果   from gensim import corpora,similarities,models import jieba from collections import defaultdict ''' 1、读取文档 2、对要计算的多篇文档进行...

    步骤:
    1、读取文档
    2、对要计算的多篇文档进行分词
    3、对文档进行整理成指定的格式,方便后续进行计算
    4、计算出词语进行过滤
    5、可选,对频率低的词语进行过滤
    6、通过语料库建立词典
    7、加载要对比的文档
    8、将要对比的文档通过doc2bow转换为稀疏向量
    9、对稀疏向量进行进一步处理,得到新语料库
    10、通过T-IDFmodel将新语料库进行处理,得到TF-IDF值
    11、通过token2id得到特征数
    12、稀疏矩阵的相似度,从而建立索引,得到最终相似度结果
     

    from gensim import corpora,similarities,models
    import jieba
    from collections import defaultdict
    '''
    1、读取文档
    2、对要计算的多篇文档进行分词
    3、对文档进行整理成指定的格式,方便后续进行计算
    4、计算出词语进行过滤
    5、可选,对频率低的词语进行过滤
    6、通过语料库建立词典
    7、加载要对比的文档
    8、将要对比的文档通过doc2bow转换为稀疏向量
    9、对稀疏向量进行进一步处理,得到新语料库
    10、通过T-IDFmodel将新语料库进行处理,得到TF-IDF值
    11、通过token2id得到特征数
    12、稀疏矩阵的相似度,从而建立索引,得到最终相似度结果
    '''
    #读取文档
    dic1=open('/root/python_test/mining/text1.txt').read()
    #分词
    cut1=jieba.cut(dic1)
    #组合成相应的格式
    documents=''
    for cut_line in cut1:
        documents+=cut_line+' '
    cur1=[[line for line in document.split()] for document in documents]
    frequent=defaultdict(int)
    for index in cur1:
        for token in index:
            frequent[token]+=1
    #对频率低的分词过滤
    curp1=[[word for word in index if frequent[token]>0] for index in cur1]
    #建立语料库
    corpora1=corpora.Dictionary(curp1)
    corpora1.save('/root/python_test/mining/text3')
    #加载对比的文档
    dic2=open('/root/python_test/mining/sjk.txt').read()
    #分词
    cut2=jieba.cut(dic2)
    #组合格式
    document1=''
    for cut_line1 in cut2:
        document1+=cut_line1+' '
    document2=document1
    #获取对比文件的稀疏向量
    new_rec=corpora1.doc2bow(document2.split())
    rec2=[corpora1.doc2bow(index) for index in cur1]
    #获取语料库特征数,即个数
    feat2=len(corpora1.token2id.keys())
    #对语料库建立tf-idf模型
    tfidf=models.TfidfModel(rec2)
    #获取索引
    index1=similarities.SparseMatrixSimilarity(tfidf[rec2],num_features=feat2)
    #对比获取相似性
    sim=index1[tfidf[new_rec]]
    print(sim)
    
    展开全文
  • #n个文本之间的相似度 ''' tf-idf算法 ''' ''' 步骤 1.读取文档 2.对要计算的多篇文档进行分词 3.将文档整理为指定格式,方便后面进行计算 嵌套的列表 4.计算出词语的频率 5.[对频率低的词语进行过滤]——当词语量...
  • 本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下:学习目标:1.利用gensim包分析文档相似度2.使用jieba进行中文分词3.了解TF-IDF模型环境:Python 3.6.0 |Anaconda 4.3.1 (64-...

    本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下:

    学习目标:

    1.利用gensim包分析文档相似度

    2.使用jieba进行中文分词

    3.了解TF-IDF模型

    环境:

    Python 3.6.0 |Anaconda 4.3.1 (64-bit)

    工具:

    jupyter notebook

    注:为了简化问题,本文没有剔除停用词“stop-word”。实际应用中应该要剔除停用词。

    首先引入分词API库jieba、文本相似度库gensim

    import jieba

    from gensim import corpora,models,similarities

    以下doc0-doc7是几个最简单的文档,我们可以称之为目标文档,本文就是分析doc_test(测试文档)与以上8个文档的相似度。

    doc0 = "我不喜欢上海"

    doc1 = "上海是一个好地方"

    doc2 = "北京是一个好地方"

    doc3 = "上海好吃的在哪里"

    doc4 = "上海好玩的在哪里"

    doc5 = "上海是好地方"

    doc6 = "上海路和上海人"

    doc7 = "喜欢小吃"

    doc_test="我喜欢上海的小吃"

    分词

    首先,为了简化操作,把目标文档放到一个列表all_doc中。

    all_doc = []

    all_doc.append(doc0)

    all_doc.append(doc1)

    all_doc.append(doc2)

    all_doc.append(doc3)

    all_doc.append(doc4)

    all_doc.append(doc5)

    all_doc.append(doc6)

    all_doc.append(doc7)

    以下对目标文档进行分词,并且保存在列表all_doc_list中

    all_doc_list = []

    for doc in all_doc:

    doc_list = [word for word in jieba.cut(doc)]

    all_doc_list.append(doc_list)

    把分词后形成的列表显示出来:

    print(all_doc_list)

    [['我', '不', '喜欢', '上海'],

    ['上海', '是', '一个', '好', '地方'],

    ['北京', '是', '一个', '好', '地方'],

    ['上海', '好吃', '的', '在', '哪里'],

    ['上海', '好玩', '的', '在', '哪里'],

    ['上海', '是', '好', '地方'],

    ['上海', '路', '和', '上海', '人'],

    ['喜欢', '小吃']]

    以下把测试文档也进行分词,并保存在列表doc_test_list中

    doc_test_list = [word for word in jieba.cut(doc_test)]

    doc_test_list

    ['我', '喜欢', '上海', '的', '小吃']

    制作语料库

    首先用dictionary方法获取词袋(bag-of-words)

    dictionary = corpora.Dictionary(all_doc_list)

    词袋中用数字对所有词进行了编号

    dictionary.keys()

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]

    编号与词之间的对应关系

    dictionary.token2id

    {'一个': 4,

    '上海': 0,

    '不': 1,

    '人': 14,

    '北京': 8,

    '和': 15,

    '哪里': 9,

    '喜欢': 2,

    '在': 10,

    '地方': 5,

    '好': 6,

    '好吃': 11,

    '好玩': 13,

    '小吃': 17,

    '我': 3,

    '是': 7,

    '的': 12,

    '路': 16}

    以下使用doc2bow制作语料库

    corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]

    语料库如下。语料库是一组向量,向量中的元素是一个二元组(编号、频次数),对应分词后的文档中的每一个词。

    [[(0, 1), (1, 1), (2, 1), (3, 1)],

    [(0, 1), (4, 1), (5, 1), (6, 1), (7, 1)],

    [(4, 1), (5, 1), (6, 1), (7, 1), (8, 1)],

    [(0, 1), (9, 1), (10, 1), (11, 1), (12, 1)],

    [(0, 1), (9, 1), (10, 1), (12, 1), (13, 1)],

    [(0, 1), (5, 1), (6, 1), (7, 1)],

    [(0, 2), (14, 1), (15, 1), (16, 1)],

    [(2, 1), (17, 1)]]

    以下用同样的方法,把测试文档也转换为二元组的向量

    doc_test_vec = dictionary.doc2bow(doc_test_list)

    doc_test_vec

    [(0, 1), (2, 1), (3, 1), (12, 1), (17, 1)]

    相似度分析

    使用TF-IDF模型对语料库建模

    tfidf = models.TfidfModel(corpus)

    获取测试文档中,每个词的TF-IDF值

    tfidf[doc_test_vec]

    [(0, 0.08112725037593049),

    (2, 0.3909393754390612),

    (3, 0.5864090631585919),

    (12, 0.3909393754390612),

    (17, 0.5864090631585919)]

    对每个目标文档,分析测试文档的相似度

    index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=len(dictionary.keys()))

    sim = index[tfidf[doc_test_vec]]

    sim

    array([ 0.54680777, 0.01055349, 0. , 0.17724207, 0.17724207,

    0.01354522, 0.01279765, 0.70477605], dtype=float32)

    根据相似度排序

    sorted(enumerate(sim), key=lambda item: -item[1])

    [(7, 0.70477605),

    (0, 0.54680777),

    (3, 0.17724207),

    (4, 0.17724207),

    (5, 0.013545224),

    (6, 0.01279765),

    (1, 0.010553493),

    (2, 0.0)]

    从分析结果来看,测试文档与doc7相似度最高,其次是doc0,与doc2的相似度为零。大家可以根据TF-IDF的原理,看看是否符合预期。

    最后总结一下文本相似度分析的步骤:

    1、读取文档

    2、对要计算的多篇文档进行分词

    3、对文档进行整理成指定格式,方便后续进行计算

    4、计算出词语的词频

    5、【可选】对词频低的词语进行过滤

    6、建立语料库词典

    7、加载要对比的文档

    8、将要对比的文档通过doc2bow转化为词袋模型

    9、对词袋模型进行进一步处理,得到新语料库

    10、将新语料库通过tfidfmodel进行处理,得到tfidf

    11、通过token2id得到特征数

    12、稀疏矩阵相似度,从而建立索引

    13、得到最终相似度结果

    更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

    希望本文所述对大家Python程序设计有所帮助。

    本文标题: Python实现简单的文本相似度分析操作详解

    本文地址: http://www.cppcns.com/jiaoben/python/230389.html

    展开全文
  • 1、文本相似度计算的需求始于搜索引擎。搜索引擎需要计算“用户查询”和爬下来的众多”网页“之间的相似度,从而把最相似的排在最前返回给用户。2、主要使用的算法是tf-idftf:term frequency 词频idf:inverse ...
  • 1.下载源代码http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tar.bz22. 安装$ tar –jxvf Python-2.5.2.tar.bz2$ cd Python-2.5.2$ apt-get install zlib1g-dev$ apt-get install libbz2-dev$ ./configure...
  • 原标题:python文本相似度计算 步骤分词、去停用词词袋模型向量化文本TF-IDF模型向量化文本LSI模型向量化文本计算相似度理论知识两篇中文文本,如何计算相似度?相似度是数学上的概念,自然语言肯定无法完成,所有要...
  • 本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下:学习目标:1.利用gensim包分析文档相似度2.使用jieba进行中文分词3.了解TF-IDF模型环境:Python 3.6.0 |Anaconda 4.3.1 (64-...
  • 分析步骤:(1)读取词典和文档;(2)计算tf idf 和 lsi;(3)生成相似度矩阵;(4)计算相似度。3.源码(公众号:海豹战队):# coding: utf-8# 亲,转载即同意帮推公众号:海豹战队,嘿嘿......# 数据源可关注...
  • Python计算文本相似度因为后期会需要用到这方面的知识,所以先提前准备准备;如何判断网页返回内容的相似度?找到了几个Python的方法和库:还有高大上的“TF-IDF方法”{之前在《数学之美》中看到过,但这里我就...
  • 只对汉字进行相似度分析,以单个字为向量,然后每个字在章节中出现的次数,便是以此字向量的值。现在我们假设:章节1中出现的字为:Z1c1,Z1c2,Z1c3,Z1c4……Z1cn;它们在章节中的个数为:Z1n1,Z1n2,Z1n3……Z1nm;...
  • 文本比较实例: 对文本进行去停用词和分词: 文本未分词前,如下图所示: 文本分词和去停用词后,如下图所示: 词频统计和文档向量化 对经过上一步处理过的文档,我们可以统计每个文档中的词项的词频,并且将其向量...
  • python文本相似度计算

    千次阅读 2018-12-07 21:49:31
    相似度计算步骤:: 读取要计算的多篇文档 对要计算的文档进行分词 对文档进行整理成指定格式,方便后续计算 计算出词语的频率 【可选】对频率低的词语进行过滤 通过语料库建立词典 加载要对比的文档 将要...
  • sentence-similarity对四种句子/文本相似度计算方法进行实验与比较;四种方法为:cosine,cosine+idf,bm25,jaccard;本实验仍然利用之前抓取的医疗语料库;1 环境python3gensimjiebascipynumpy2 算法原理 3 运行步骤...
  • Python文本相似度计算

    千次阅读 2017-12-29 17:08:11
    主要步骤文本相似度计算主要用到gensim和jieba两个Python库,重要的是思想,要理解如何利用线性代数的知识解决相似度计算问题。 其主要步骤如下: * 读取文档 * 对要计算的多篇文档进行分词 * 对文档进行整理成...
  • 利用余弦相似度文本分类: 在数学中余弦相似度的公式:cos(a,b)=a*b/(|a|+|b|),而在文本上,我们的余弦相似度通常是这样计算而成: (文本a,b共同出现的词条数目)/(文本a出现的词条数目+文本b出现的词条数目) ...
  • 主要介绍了Python实现简单的文本相似度分析操作,结合实例形式分析了Python基于分词API库jieba及文本相似度库gensim针对文本进行相似度分析操作的实现技巧与注意事项,需要的朋友可以参考下
  • 接上篇 :import jiebaall_list = jieba.cut(xl['工作内容'][0:6],cut_all=True)print(all_list)every_one = xl['工作内容'].apply(lambda x:jieba.cut(x))import tracebackdef filtered_punctuations(token_list):...
  • 环境Python3,gensim,jieba,numpy ,pandas原理:文章转成向量,然后在计算两个向量的余弦值。Gensimgensim是一个python的自然语言处理库,能够将文档根据TF-IDF, LDA, LSI 等模型转化成向量模式,gensim还实现了...
  • 12.稀疏矩阵相似度,建立索引 13.得到最终相似度结果 from gensim import corpora, models, similarities import jieba from collections import defaultdict dog = "C:/Users/xt/PycharmProjects/similar/dog....
  • 利用Python进行文本相似度分析

    千次阅读 2019-03-11 16:15:38
    一、文本分析流程: 1.读取文档 2.对要计算的多篇文档进行分词 3.对文档进行整理成指定格式,方便后续计算 4.计算出词语的频率 5.对可选、低频词进行过滤 6.通过语料库建立词典 7.加载要对比的文档 8.将要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,450
精华内容 4,180
关键字:

python文本相似度分析

python 订阅