• 计算文本相似度的几种方法以及实现原理


    第一种基于TF-IDF向量法计算文本相似度

    import jieba
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.metrics.pairwise import cosine_similarity
    
    # 语料库
    corpus = [
        '你借的钱什么时候还呀',
        '你到底什么时候还钱',
        '你如果不还钱的话,你的征信将会收到影响',
        '欠钱不还会影响征信',
        '影响征信的原因可能是欠钱不还'
    ]
    
    # 分词
    corpus_cut = [' '.join(list(jieba.cut(text))) for text in corpus]
    
    # TF-IDF向量化
    vectorizer = TfidfVectorizer()
    corpus_tfidf = vectorizer.fit_transform(corpus_cut)
    
    # 计算相似度
    similarity_matrix = cosine_similarity(corpus_tfidf)
    
    print(similarity_matrix)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    运行结果如下:

    [[1.         0.75203953 0.         0.         0.        ]
     [0.75203953 1.         0.         0.         0.        ]
     [0.         0.         1.         0.32580811 0.21520437]
     [0.         0.         0.32580811 1.         0.66052491]
     [0.         0.         0.21520437 0.66052491 1.        ]]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第二种基于LSI模型向量法计算相似度模型

    import jieba
    from gensim import corpora, models, similarities
    
    # 语料库
    corpus = ['你借的钱什么时候还呀',
              '你到底什么时候还钱',
              '你如果不还钱的话,你的征信将会收到影响',
              '欠钱不还会影响征信',
              '影响征信的原因可能是欠钱不还']
    
    # 分词
    corpus_cut = [list(jieba.cut(text)) for text in corpus]
    
    # 构建词典
    dictionary = corpora.Dictionary(corpus_cut)
    
    # 构建语料库
    corpus_bow = [dictionary.doc2bow(text) for text in corpus_cut]
    
    # 训练LSI模型
    lsi_model = models.LsiModel(corpus_bow, id2word=dictionary, num_topics=2)
    
    # 计算文本相似度
    corpus_lsi = lsi_model[corpus_bow]
    index = similarities.MatrixSimilarity(corpus_lsi)
    
    # 计算相似度
    similarity_matrix = index[corpus_lsi]
    
    print(similarity_matrix)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    运行结果如下:

    [[1.         0.99816966 0.7902421  0.119727   0.13108377]
     [0.99816966 1.         0.75173587 0.05946621 0.07088902]
     [0.7902421  0.75173587 0.99999994 0.7030001  0.7110951 ]
     [0.119727   0.05946621 0.70300007 1.         0.9999345 ]
     [0.13108377 0.07088902 0.7110951  0.9999345  1.        ]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Seata原理浅析
    FFplay文档解读-33-视频过滤器八
    微信H5页面点击直接跳转app-微信开放标签
    springboot解决CORS跨域的三种方式
    点击一张图片,到最后渲染到屏幕,都经历了哪些流程?
    HTML5播放 M3U8的hls流地址
    数据结构绪论、顺序表课后练习题
    速览默默发展的Web3邮箱赛道
    Debian安装redis
    通过 HelpLook ChatBot AI自动问答机器人降低客户服务成本
  • 原文地址:https://blog.csdn.net/qq_42004289/article/details/133299881