怎么构造衡量字符串相似程度的标准
1个回答
展开全部
很有意思的课题。不过既然是相似,就是模糊匹配,就没有标准,如果定义了严格的标准,那就是伪命题,只能说达到某种程度的相似要求,而不能称标准,只要实现你的需求就是合理的。
相似度匹配问题涉及几个方面
1、长度相似
2、大小写相似(这个简单)
3、字符或词组并集数量。
我相信根据以上三点你应该有想法了。
我的判断方式是,定义一个统计匹配次数的变量(完全相等不在下面处理流程考虑范围之内),每个测试项目都记做一分,即计数变量加一。
预处理:取长度较长的串定义为原串,将较短的定义为测试串。将原串和测试串全部转为大写或小写。
1、如果两串长度在70%以上则看做相似(这个值根据需要可调),+1
2、将被测试串与原串做包含测试(str.indexof(test)),如果命中+1
3、将原串和被测试串分别分割为三个子串,将它们各自的左中右子串做包含测试,每命中一个 +2。
4、将被测试串循环位移若干字符(可调),重复3#操作,重复次数根据移动字符数计算。
你可以选择选取以上几个条件进行判断,你也可以加入其它测试条件,组成10分制,达到6分看做相似。你也可以简单地单独采用一种方式判断,比如长度接近的情况下,选取第3个测试方法,将串分三部分,分别做包含测试,出现2次匹配就看做相似。
相似度匹配问题涉及几个方面
1、长度相似
2、大小写相似(这个简单)
3、字符或词组并集数量。
我相信根据以上三点你应该有想法了。
我的判断方式是,定义一个统计匹配次数的变量(完全相等不在下面处理流程考虑范围之内),每个测试项目都记做一分,即计数变量加一。
预处理:取长度较长的串定义为原串,将较短的定义为测试串。将原串和测试串全部转为大写或小写。
1、如果两串长度在70%以上则看做相似(这个值根据需要可调),+1
2、将被测试串与原串做包含测试(str.indexof(test)),如果命中+1
3、将原串和被测试串分别分割为三个子串,将它们各自的左中右子串做包含测试,每命中一个 +2。
4、将被测试串循环位移若干字符(可调),重复3#操作,重复次数根据移动字符数计算。
你可以选择选取以上几个条件进行判断,你也可以加入其它测试条件,组成10分制,达到6分看做相似。你也可以简单地单独采用一种方式判断,比如长度接近的情况下,选取第3个测试方法,将串分三部分,分别做包含测试,出现2次匹配就看做相似。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询