zoukankan      html  css  js  c++  java
  • 比较2个字符串相似度

    我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能。
    现在提供一个比较两个字符串相似度的方法。
    通过计算出两个字符串的相似度,就可以通过Linq在内存中对数据进行排序和筛选,选出和目标字符串最相似的一个结果。
     
    本次所用到的相似度计算公式是 相似度=Kq*q/(Kq*q+Kr*r+Ks*s) (Kq > 0 , Kr>=0,Ka>=0)
    其中,q是字符串1和字符串2中都存在的单词的总数,s是字符串1中存在,字符串2中不存在的单词总数,r是字符串2中存在,字符串1中不存在的单词总数. Kq,Kr和ka分别是q,r,s的权重,根据实际的计算情况,我们设Kq=2,Kr=Ks=1.
    根据这个相似度计算公式,得出以下程序代码:
    /// <summary>
    /// 获取两个字符串的相似度
    /// </summary>
    /// <param name=”sourceString”>第一个字符串</param>
    /// <param name=”str”>第二个字符串</param>
    /// <returns></returns>
    public static decimal GetSimilarityWith(this string sourceString, string str)
    {

    decimal Kq = 2;
    decimal Kr = 1;
    decimal Ks = 1;

    char[] ss = sourceString.ToCharArray();
    char[] st = str.ToCharArray();

    //获取交集数量
    int q = ss.Intersect(st).Count();
    int s = ss.Length – q;
    int r = st.Length – q;

    return Kq * q / (Kq * q + Kr * r + Ks * s);
    }

     
    这就是计算字符串相似度的方法,但是实际应用时,还需要考虑到同义词或近义词的情况发生, 如“爱造人小说阅读的更新最快”和“爱造人小说阅读地更新最快” 。两个字符串在一定意义上说其实是相同的,如果使用上述方法计算就会出现不准确的情况。所以在实际应用的时候,我们需要替换同义词或近义词,计算替换后的相似度。
    如果是近义词,需要综合替换近义词前和近义词后的计算结果,得出两个字符串的实际相似度。

     原文:http://www.2cto.com/kf/201202/121170.html

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/walleyekneel/p/4189485.html
Copyright © 2011-2022 走看看