zoukankan      html  css  js  c++  java
  • python结巴分词余弦相似度算法实现

          过余弦相似度算法计算两个字符串之间的相关度,来对关键词进行归类、重写标题、文章伪原创等功能, 让你目瞪口呆。以下案例使用的母词文件均为txt文件,两种格式:一种内容是纯关键词的txt,每行一个关键词就好;另一种是关键词加指数的txt,关键词和指数之前用tab键分隔,一行一对关键词。

      代码附上:

      

    # -*- coding: utf-8 -*-
    from jieba import posseg
    import math
    import time
    def simicos(str1, str2):
        # 对两个要计算的字符串进行分词, 使用隐马尔科夫模型(也可不用)
        # 由于不同的分词算法, 所以分出来的结果可能不一样
        # 也会导致相似度会有所误差, 但是一般影响不大
        cut_str1 = [w for w, t in posseg.lcut(str1) if 'n' in t or 'v' in t]
        cut_str2 = [w for w, t in posseg.lcut(str2) if 'n' in t or 'v' in t]
        # 列出所有词
        all_words = set(cut_str1 + cut_str2)
        # 计算词频
        freq_str1 = [cut_str1.count(x) for x in all_words]
        freq_str2 = [cut_str2.count(x) for x in all_words]
        # 计算相似度
        sum_all = sum(map(lambda z, y: z * y, freq_str1, freq_str2))
        sqrt_str1 = math.sqrt(sum(x ** 2 for x in freq_str1))
        sqrt_str2 = math.sqrt(sum(x ** 2 for x in freq_str2))
        return sum_all / (sqrt_str1 * sqrt_str2)
    if __name__ == '__main__':
        case1 = "SEO"
        case2 = "SEO培训网"
        start = time.time()
        similarity = simicos(case1, case2)
        end = time.time()
        print()
        print("耗时: %.3fs" % (end - start))
        print("相似度: %.3f" % similarity)
    

      

  • 相关阅读:
    DELPHI开发LINUX包
    DELPHI开发LINUX的动态库
    中间件测试工具
    CENTOS7安装OPENSSL
    咏南跨平台中间件简介
    IdHTTPServer开发https服务器
    ServiceStack.Redis常用操作
    ServiceStack.Redis 之 IRedisTypedClient<第四篇>
    Redis常用命令速查 <第二篇>
    ServiceStack.Redis之IRedisClient<第三篇>
  • 原文地址:https://www.cnblogs.com/68xi/p/11676161.html
Copyright © 2011-2022 走看看