Mysql 可以查找阿拉伯语拼写错误的SQL查询
我想做一本字典,我需要一个查询,可以找到拼写错误的单词(我是指拼写错误),如果查询找不到确切的单词,那么尝试使用其他拼写 那么什么是阿拉伯语:在阿拉伯语中,有些字母发音(几乎)相同,但字母不同,人们有时不知道应该使用哪个字母。例如,阿拉伯语中有4种Z,发音有点不同,但人们会忘记哪一种是正确的拼写。一个单词的“z”字母用法不同的示例: میز/می/می/م 正确的答案是 以下是具有多个后者的其他世界:Mysql 可以查找阿拉伯语拼写错误的SQL查询,mysql,sql,performance,word,letter,Mysql,Sql,Performance,Word,Letter,我想做一本字典,我需要一个查询,可以找到拼写错误的单词(我是指拼写错误),如果查询找不到确切的单词,那么尝试使用其他拼写 那么什么是阿拉伯语:在阿拉伯语中,有些字母发音(几乎)相同,但字母不同,人们有时不知道应该使用哪个字母。例如,阿拉伯语中有4种Z,发音有点不同,但人们会忘记哪一种是正确的拼写。一个单词的“z”字母用法不同的示例: میز/می/می/م 正确的答案是 以下是具有多个后者的其他世界: z: ض / ز / ذ / ظ T: ت / ط / S: ث / س / ص /
z: ض / ز / ذ / ظ
T: ت / ط /
S: ث / س / ص /
Gh: ق / غ
那么你的想法是什么?
查询应该如何进行?
我希望如果用户搜索“میز”而不是显示404错误(未找到),则使用其他字母(全部为Z)搜索数据库,如果我找到任何内容,则返回结果。在德语中,我们对t和tt或dt有相同的问题,尤其是在名称方面 实现这一点的一种方法是使用固定转换存储包含名称/单词的额外规范化列
tt -> t
dt -> t
ß -> s
ss -> s
所以表将包含
WORD | NORMALIZED
schmitt | schmit
schmidt | schmit
在查询时,将这些相同的转换应用于查询,然后与标准化列进行比较。有一个算法称为(还有其他算法),它告诉两个字符串之间的编辑距离 你可以从中得出结论,试着在你的字典中找到与你输入内容最相似的单词 稍后,您可以根据您提到的字母元组为替换指定权重,以优化搜索 事实上,MySQL有一个实现,您一定要查看:
这里的大多数levenshtein+mysql问题都指向本页。一个更简单的解决方案是在like语句中使用正则表达式。 对于可能拼写错误的字母,可以在正则表达式通配符中保留变体。 对于与z通配符对应的字母,通配符为“[زذظض]” 您可以将所有ز،،،ؾ字母替换为通配符,然后使用类似语句进行查询:
select * from searched_table where word like "%[مرى[زذظض%"
找到搜索词的所有版本后,可以向用户显示所有版本,也可以计算levenshtein距离(koshinae的答案)并显示最近的单词
编辑:仅针对字母Z,查询如下
set @word = 'مرىض'; -- take this text from user
set @word = replace(@word, 'ذ', 'Z');
set @word = replace(@word, 'ظ', 'Z');
set @word = replace(@word, 'ض', 'Z');
set @word = replace(@word, 'ز', 'Z');
set @word = replace(@word, 'Z', '[زظضذ]');
set @word = Concat('%', @word, '%');
select @word;
select * from mydb.searchTable where word like @word;
我懂阿拉伯语,但我不知道你有没有试过。你看,有人会给你否定的答案,因为你甚至没有把任何问题发到你尝试过的地方。@Amel我不想要确切的问题,我想要想法(我不懂阿拉伯语)谢谢你的评论谢谢,我不知道德语也有同样的问题(我的母语不是阿拉伯语!),你知道这是一本很棒的字典,我正在寻找一个好的算法(和查询),因为有大约50万字的搜索!警方应该在汽车牌照上使用类似的算法——是O还是0;I或1;Z或2。即使是E对F也可能是一个问题,如果有一个“板块环绕”。谢谢亲爱的朋友。但是我想要动态查询,不客气,您可以使用prepare-execute语句用上面的查询构建一个动态查询