C# F23.StringSimilarity库 字符串重复度、文本相似度、防抄袭

您所在的位置:网站首页 模糊相似度匹配算法 C# F23.StringSimilarity库 字符串重复度、文本相似度、防抄袭

C# F23.StringSimilarity库 字符串重复度、文本相似度、防抄袭

2024-02-05 10:52| 来源: 网络整理| 查看: 265

        最近在我们的铺侦探(买铺租铺就上铺侦探)项目中,为了防止经纪人发布铺源的时候抄袭其他经纪人的铺源介绍,所以我们准备根据内容的相似度进行初步的防抄袭判断。

话不多说,懒得打字,下面直接上干货:

直接在VS的Nuget管理器中搜索:F23.StringSimilarity安装。GitHub传送门,里面有详细的介绍,并且也在不断更新。

该库目前实现了十多种算法,根据自己的需求选取合适自己业务的算法,每一种算法都有自己的优缺点,建议把每一种算法大致弄明白,方便自己选择使用哪种,可以根据该插件中每个算法的命名去搜索了解。

下图是通过谷歌自动翻译的十多种算法截图,上面的GitHub传送门可以自己进去看,每一种的算法都有介绍:

 每种算法的使用都很简单,下面是各种算法的使用示例:

public static void Main(string[] args) { var str1 = Html2Text(@"

1:物业面积:二楼 1221㎡,三楼:518㎡。2:整层卖,独立过道,可以自己打通使用啊。3:旅游度假区,人流量非常大。

"); var str2 = Html2Text(@"

1:; ; ; ; ; ; ; ; ; ; ; ; ; ;三楼:518.76平方米;2:整层,独立过道,可以自己打通使用3:旅游度假区,大型商业街中心,人流量超大。

"); var jaroWinkler = new JaroWinkler(); var a= jaroWinkler.Similarity(str1, str2); var normalizedLevenshtein = new NormalizedLevenshtein(); var b= normalizedLevenshtein.Similarity(str1, str2); var cosine = new Cosine(); var c= cosine.Similarity(str1, str2); var jaccard = new Jaccard(); var d = jaccard.Similarity(str1, str2); var sorensenDice = new SorensenDice(); var e = sorensenDice.Similarity(str1, str2); var ratcliffObershelp = new RatcliffObershelp(); var f = ratcliffObershelp.Similarity(str1, str2); var longestCommonSubsequence = new LongestCommonSubsequence(); var g= longestCommonSubsequence.Distance(str1, str2); } public static string Html2Text(string htmlStr) { if (String.IsNullOrEmpty(htmlStr)) { return ""; } string regEx_style = "]*?>[\\s\\S]*?"; //定义style的正则表达式 string regEx_script = "]*?>[\\s\\S]*?"; //定义script的正则表达式 string regEx_html = "]+>"; //定义HTML标签的正则表达式 htmlStr = Regex.Replace(htmlStr, regEx_style, "");//删除css htmlStr = Regex.Replace(htmlStr, regEx_script, "");//删除js htmlStr = Regex.Replace(htmlStr, regEx_html, "");//删除html标记 htmlStr = Regex.Replace(htmlStr, "\\s*|\t|\r|\n", "");//去除tab、空格、空行 htmlStr = htmlStr.Replace(" ", ""); htmlStr = htmlStr.Replace("\"", ""); htmlStr = htmlStr.Replace("\"", ""); htmlStr = htmlStr.Replace(";", ""); return htmlStr.Trim(); }

顺便赠送一个过滤html代码的函数,上图中的Html2Text(string htmlStr) 哈哈😄。

然后说说我自己使用的思路吧,我用的是这个:NormalizedLevenshtein,相似度值在0~1之间

因为在网上查询了一下,这个算法比较适合论文的抄袭判断,比较符合我的需求,当然还需要加入一些自己的逻辑,比如把两个字符串的html代码去掉再比较,数字字母是否需要比较等等,然后设置一个阀值,我设置的是0.65,大于这个值就认为是抄袭的。当然抄袭只是说的是本系统直接的抄袭,因为我只与本系统之间的数据进行了比较。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3