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


    第一种基于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
  • 相关阅读:
    Windows cmd 命令及Linux 环境下导入导入mysql 数据库
    Rust 学习笔记(持续更新中…)
    elementUI textarea可自适应文本高度的文本域
    猿创征文 |【gin-vue-admin】后端结构设计和基本工作原理
    Last Week in Milvus
    高并发下秒杀商品,你必须知道的9个细节
    洛谷P6586 蒟蒻火锅的盛宴
    MySQL数据库——视图-介绍及基本语法(创建、查询、修改、删除、演示示例)
    一个与 WSL2 建立远程的简单方法
    Linux中的五种网络API的模型的解释
  • 原文地址:https://blog.csdn.net/qq_42004289/article/details/133299881