我在SQL Server中使用c#和数据库。 我有一个自动完成字段,可以正常使用普通字符。我想添加自动完成特殊字符的功能,如ö,Ä,é,è,... 我还想增加识别某些语言中可能听起来相似的字符的可能性,如'b'和'v',所以如果我输入'boor'会发现'voor'作为可能的建议。
有什么想法吗?
由于
编辑:自动填充文本框用于名称和姓氏(每个用于一个)。它们是使用AutoCompleteStringCollection创建的。他们在数据库中搜索已经存在的姓名或姓氏。 应用程序的这一部分基本上为用户提供了在应用程序中添加新人(姓名,姓氏等)的可能性。 目标是当用户在应用程序中创建新人时,他/她将获得一个列表,其中包含与他/她正在键入的姓名或姓氏相似的人。 因此,如果我们已经在数据库中拥有“James Smith”,当用户输入Smyth时,他/她应该有可能更改为Smith(可能是自动完成),说“嘿,你的意思是'史密斯'? “因此,我们避免用户使用错误的名称创建同一个人。
因为我们正在处理来自世界各地的人的姓名和姓氏,所以创建新人的错误可以来自任何语言。
PD:
创建自己的自动完成功能是个好主意吗?隐藏/显示文本框右下方的列表框
对于我正在尝试的内容,SOUNDEX功能对于ö,Ä,é,è等字符非常有用。但我无法为每个姓名或姓氏调用数据库。所以我不知道如何使用它。
答案 0 :(得分:1)
我不确定自动完成是什么意思。关于问题的第二部分,您可能需要SQL Server功能SOUNDEX
。它返回四个字符(SOUNDEX)代码来评估两个字符串的相似性。
使用它像:
SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe');
上面的单词拼写几乎相同,所以它们具有相同的soundex'es S530
和S530
。
我认为soundex可以用于各种语言,但我并不完全确定。
答案 1 :(得分:0)
很遗憾,您只能使用AutoCompletionSource
作为{{1}}。
但逻辑是,将呈现给用户的内容(文本框下方具有匹配项的框)完全由TextBox控制,不会受到任何影响。
因此,即使你使用SoundEx()或Levenstein Distance之类的东西,你也无法告诉它TextBox,因为它总是在给定的集合上创建一个String.StartsWith(),并且在选择中它会替换整个内容来自源的选择值。
这已经让我发疯了。您根本无法真正影响列表中的哪些项目将呈现给用户,并且如果选中此框中的某些项目,则无法影响会发生什么。
答案 2 :(得分:0)
我会调查Levenshtein距离。
Soundex相当原始。它最初是为手工计算而开发的。它产生了一个关键,适用于西方名字和姓氏。
Levenshtein距离查看两个字符串值,并根据它们的相似性生成一个值。它正在寻找丢失或替换的字母(没有声音比较为SoundEx)。
维基百科参考:http://en.wikipedia.org/wiki/Levenstein_distance
使用Levenshtein距离测试两个字符串值的网站:http://gtools.org/levenshtein-calculate.php