C#比较类似字符串

C#比较类似字符串,c#,string,compare,similarity,C#,String,Compare,Similarity,我有一个带有一些文件名的泛型(列表1)和另一个带有完整名称列表的biggeneric(列表2)。 我需要将列表1中的名称与列表2中类似的名称进行匹配。比如说 LIST1 - **MAIZE_SLIP_QUANTITY_3_9.1.aif** LIST 2 1- TUTORIAL_FAILURE_CLINCH_4.1.aif 2- **MAIZE_SLIP_QUANTITY_3_5.1.aif** 3- **MAIZE_SLIP_QUANTITY_3_9.2.aif** 4- TUTORIAL_

我有一个带有一些文件名的泛型(列表1)和另一个带有完整名称列表的biggeneric(列表2)。 我需要将列表1中的名称与列表2中类似的名称进行匹配。比如说

LIST1
- **MAIZE_SLIP_QUANTITY_3_9.1.aif**

LIST 2
1- TUTORIAL_FAILURE_CLINCH_4.1.aif
2- **MAIZE_SLIP_QUANTITY_3_5.1.aif**
3- **MAIZE_SLIP_QUANTITY_3_9.2.aif**
4- TUTORIAL_FAILURE_CLINCH_5.1.aif
5- TUTORIAL_FAILURE_CLINCH_6.1.aif
6- TUTORIAL_FAILURE_CLINCH_7.1.aif
7- TUTORIAL_FAILURE_CLINCH_8.1.aif
8- TUTORIAL_FAILURE_CLINCH_9.1.aif
9- TUTORIAL_FAILURE_PUSH_4.1.aif
我已经阅读并在框架()中使用了它的一个实现。 它在第2行和第3行中返回距离=1。但就我而言,第3行比第2行更适合。


有没有其他更好的方法来比较类似的字符串?更灵活的东西?

当作为字符串进行比较时,“9.2”与“9.1”的“5.1”并不匹配。如果希望版本号以数字形式计算,则必须解析字符串,以便可以分别比较字符串部分和数字部分。

作为字符串进行比较时,“9.2”与“9.1”的“5.1”并不匹配。如果希望以数字形式计算版本号,则必须解析字符串,以便分别比较字符串部分和数字部分。

您的相似性标准可以是其他几个标准的组合。一个可能是Levenshtein距离,另一个可能是最长的公共子字符串或前缀/后缀

最长的常见替换问题实际上是编辑距离的一个特例,当禁止替换并且仅允许精确的字符匹配、插入和删除编辑操作时(请参阅)


字符串相似性的进一步度量将被描述。

您的相似性标准可以是几个其他标准的组合。一个可能是Levenshtein距离,另一个可能是最长的公共子字符串或前缀/后缀

最长的常见替换问题实际上是编辑距离的一个特例,当禁止替换并且仅允许精确的字符匹配、插入和删除编辑操作时(请参阅)


描述了字符串相似性的进一步度量。

可以使用正则表达式来获取与名称匹配的项。版本号可以在匹配中的正则表达式组中收集,并解析为.net对象(例如decimal),您可以使用该对象来比较哪一个最接近。

可以使用正则表达式来获取与名称匹配的项。版本号可以在匹配中的正则表达式组中收集,并解析为.net对象(例如decimal),您可以使用它来比较哪一个最接近。

有一组相当详尽的答案。底部是我为soundex、double metaphone、PHP相似度和levenstein提供的C#实现的链接。

有一组相当详尽的答案。底部是我为soundex、double metaphone、PHP相似度和levenstein提供的C#实现链接。

我想这取决于您如何定义相似度。如果你仅仅基于Levenshtein相似性,这是正确的。但是,定义共享最长公共子字符串的两个字符串最相似(续)或具有最多公共n-gram的度量又如何呢?有很多方法可以比较字符串,但是,可能没有一种方法适合所有的度量。我想说,这取决于如何定义相似性。如果你仅仅基于Levenshtein相似性,这是正确的。但是,定义共享最长公共子字符串的两个字符串最相似(续)或具有最多公共n-gram的度量又如何呢?有很多方法可以比较字符串,但是,可能没有一种方法适合所有度量。