Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 近似字符串匹配_C#_String_Matching_Approximate - Fatal编程技术网

C# 近似字符串匹配

C# 近似字符串匹配,c#,string,matching,approximate,C#,String,Matching,Approximate,我知道这个问题已经被问了很多次了。 我想建议哪种算法适合近似字符串匹配 该应用程序仅适用于公司名称匹配,其他不适用 最大的挑战可能是公司的结束名称部分和简短名称部分 例子: 1.companyA私人有限公司对companyA私人有限公司。有限公司对公司 2.WES工程与W.E.S工程(极为罕见) 你认为Levenshtein编辑距离足够吗 我用的是C# 问候,, Max是的,Levenshtein距离适用于此。它至少适用于您列出的所有人 您也可以使用,但我认为您不需要它。您可以使用各种字符串距离

我知道这个问题已经被问了很多次了。 我想建议哪种算法适合近似字符串匹配

该应用程序仅适用于公司名称匹配,其他不适用

最大的挑战可能是公司的结束名称部分和简短名称部分 例子: 1.companyA私人有限公司对companyA私人有限公司。有限公司对公司 2.WES工程与W.E.S工程(极为罕见)

你认为Levenshtein编辑距离足够吗

我用的是C#

问候,,
Max

是的,Levenshtein距离适用于此。它至少适用于您列出的所有人


您也可以使用,但我认为您不需要它。

您可以使用各种字符串距离度量

我推荐你。与编辑距离不同,在编辑距离中,比较的结果以离散的编辑单位表示,JW为0-1分。它特别适用于专有名称。也看看和

我没有使用过C#,但以下是我在网上找到的一些JW实现:

(如果你看一下文件列表,它们也有点网络版)


如果您想进行更复杂的匹配,可以尝试对公司名称中常见的单词形式进行自定义规范化,例如
ltd/limited,inc/incorporated,corp/corporate
,以说明大小写不敏感、缩写等。如果您计算

距离(标准化(“foo公司”),
规范化(“FOO公司”)


结果应该是0,而不是14(如果计算levenshtein编辑距离,则会得到14)

在这些简单的示例中,只需删除所有非字母数字字符就可以进行匹配,这是最简单的方法,因为您可以预先计算每边的数据,然后直接进行等于匹配,这将比交叉相乘和计算编辑距离快得多。

我已经在另一个问题中提供了我的答案

我曾经在一个非常大的系统上工作过,这个系统具有类似的名称匹配要求,正如你们所说的。 姓名匹配不是很简单,名字和姓氏的顺序可能不同。 在这种情况下,简单的模糊名称匹配算法非常失败

如果我们只想讨论近似字符串匹配算法,那么有很多。其中很少有:Jaro Winkler、编辑距离(Levenshtein)、Jaccard相似性、基于Soundex/语音的算法等。一个简单的谷歌搜索将为我们提供所有细节。 所有这些都可以用C语言实现#

具有讽刺意味的是,当您尝试匹配两个给定的输入字符串时,它们会起作用。好的,从理论上证明模糊或近似字符串匹配的工作方式

然而,严重低估的一点是,我们如何在生产环境中使用相同的。我所知道的寻找近似字符串匹配算法的人并不都知道如何在生产环境中解决相同的问题

我可能刚刚谈到了Lucene,它是Java特有的,但是还有Lucene for.Net


这是一个非常有趣的建议!感谢这些链接,它们非常有用。我想我要删除所有的点字符,然后使用levenshtein距离。只需注意,我发现了另一个算法,它与levenshtein相似,但比levenshtein更快,levenshtein就是那个叫算法sift3的家伙。非常有趣。