• C#计算两个字符串的相似度


    我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能。

    现在提供一个比较两个字符串相似度的方法。

    通过计算出两个字符串的相似度,就可以通过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);
    }

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

    如果是近义词,需要综合替换近义词前和近义词后的计算结果,得出两个字符串的实际相似度。

     

    推荐阅读: 权财

    This entry was posted in Uncategorized and tagged WebForm技术. Bookmark the permalink.
  • 相关阅读:
    5804: 最大子序和(单调队列)
    5801: 七夕祭(贪心)
    5920: 喷水装置(贪心)
    5924: 加工生产调度(贪心)
    5929: 家庭作业(贪心+并查集)
    H1N1's Problem(费马小定理+快速幂)
    欧拉筛法求素数
    Cube Stacking(并查集加递归)
    写2个线程,一个打印1-52,一个打印A-Z,打印顺序是12A34B。。。(采用同步代码块和同步方法两种同步方法)
    java创建多线程的三种方式
  • 原文地址:https://www.cnblogs.com/kuibono/p/Calculate_Degree_of_similarity.html
Copyright © 2020-2023  润新知