Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
Mysql 可以查找阿拉伯语拼写错误的SQL查询_Mysql_Sql_Performance_Word_Letter - Fatal编程技术网

Mysql 可以查找阿拉伯语拼写错误的SQL查询

Mysql 可以查找阿拉伯语拼写错误的SQL查询,mysql,sql,performance,word,letter,Mysql,Sql,Performance,Word,Letter,我想做一本字典,我需要一个查询,可以找到拼写错误的单词(我是指拼写错误),如果查询找不到确切的单词,那么尝试使用其他拼写 那么什么是阿拉伯语:在阿拉伯语中,有些字母发音(几乎)相同,但字母不同,人们有时不知道应该使用哪个字母。例如,阿拉伯语中有4种Z,发音有点不同,但人们会忘记哪一种是正确的拼写。一个单词的“z”字母用法不同的示例: میز/می/می/م 正确的答案是 以下是具有多个后者的其他世界: z: ض / ز / ذ / ظ T: ت / ط / S: ث / س / ص /

我想做一本字典,我需要一个查询,可以找到拼写错误的单词(我是指拼写错误),如果查询找不到确切的单词,那么尝试使用其他拼写

那么什么是阿拉伯语:在阿拉伯语中,有些字母发音(几乎)相同,但字母不同,人们有时不知道应该使用哪个字母。例如,阿拉伯语中有4种Z,发音有点不同,但人们会忘记哪一种是正确的拼写。一个单词的“z”字母用法不同的示例:

میز/می/می/م

正确的答案是

以下是具有多个后者的其他世界:

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语句用上面的查询构建一个动态查询