计算两个字符串之间是否包含的简单方法
2013-11-23 16:02
399 查看
在前面介绍了两个字符串之间的匹配度 的算法
计算字符串相似度算法—Levenshtein
它解决了字符串A和B之间的相识度的问题,但是我现在遇到了一个新的问题,就是有字符串A是固定值,字符串C包括了字符串B,希望求出字符串C包括A的比率.但是我并没有找到很好的解决方案.于是自己写了一个可用的简单算法 .
算法原理
1.对固定的字符串A进行二元分词.得到一个字符数组.
2.循环得到的数组,如果数组中的某个字符串在C中存在,计数加1
3.计算下一个数组与上一个数组之间的距离做0.7(可根据实际需求调整)的指数距离并加到计数器
4.将计数/数组的长度,得到一个比例.
代码
2014.6.27日补
在实际的使用过程中发现上面的效果并不是很好,于是用了一个更加简单暴力的方法。
循环短的那个字符串,长度为n,循环n次
每次取两个字符,一直到最后
如果在长的字符串里面能够找到,将变量m加1
最后返回m/n的比率
发现这种简单粗暴的方法可以解决80%的问题。
计算字符串相似度算法—Levenshtein
它解决了字符串A和B之间的相识度的问题,但是我现在遇到了一个新的问题,就是有字符串A是固定值,字符串C包括了字符串B,希望求出字符串C包括A的比率.但是我并没有找到很好的解决方案.于是自己写了一个可用的简单算法 .
算法原理
1.对固定的字符串A进行二元分词.得到一个字符数组.
2.循环得到的数组,如果数组中的某个字符串在C中存在,计数加1
3.计算下一个数组与上一个数组之间的距离做0.7(可根据实际需求调整)的指数距离并加到计数器
4.将计数/数组的长度,得到一个比例.
代码
public static float IncludeStr(string val, string str) { //1.将val二远分词 List<string> words = new List<string>(); int i = 0; while (i < val.Length) { int m = 2; if (i + m >= val.Length) m = 1; words.Add(val.Substring(i, m)); i = i + 2; } float num = 0; int wordIndex = -1; foreach (string s in words) { int index = str.IndexOf(s); if (index >= 0) { num = num + 1; if (wordIndex > 0) { num += (float)Math.Pow(0.7, (index - wordIndex - s.Length + 1)); } wordIndex = index; } } return num / words.Count; }
2014.6.27日补
在实际的使用过程中发现上面的效果并不是很好,于是用了一个更加简单暴力的方法。
循环短的那个字符串,长度为n,循环n次
每次取两个字符,一直到最后
如果在长的字符串里面能够找到,将变量m加1
最后返回m/n的比率
发现这种简单粗暴的方法可以解决80%的问题。
public static float includeStr1(string fname, string name) { int m = 0; for (int i = 0; i < name.Length; i++) { string s; if (i + 1 < name.Length) { s = name.Substring(i, 2); } else { s = name.Substring(i); } if (fname.IndexOf(s) >= 0) { m++; } } return (float)m / (float)name.Length; }
相关文章推荐
- php简单判断两个字符串是否相等的方法
- JS给Array添加是否包含字符串的简单方法
- php简单判断两个字符串是否相等的方法
- PHP简单判断字符串是否包含另一个字符串的方法
- Asp.Net判断一个字符串是否包含某个字符的最简单方法!(示例)
- PHP简单判断字符串是否包含另一个字符串的方法
- 紫书章七例五 Krypton Factor UVA - 129(dfs)判断一个字符串中是否包含两个相邻子串
- Java比较两个数组中的元素是否相同的最简单方法
- javaScript 判断字符串是否为数字的简单方法
- C#判断一个字符串是否包含另一个字符串的方法
- js 判断计算字符串长度/判断空的简单方法
- 几个简单的字符串和数组计算方法
- 输入一个只包含个位数字的简单四则表达式字符串,计算该表达式的值
- 享受LINQ:判断一组文字是否在字符串中同时出现的最简单方法
- 两个字符串是否包含的问题
- JavaScript判断一个字符串是否包含指定子字符串的方法
- asp.net中计算两个日期之间的相差的天数的方法(vb)
- 紫书章七例五 Krypton Factor UVA - 129(dfs)判断一个字符串中是否包含两个相邻子串
- 计算两个矩形重叠面积的简单方法
- Mysql字符串字段判断是否包含某个拼接字符串的2种方法