我有一个存储在目录中的图像列表。他们都被命名了。我的GUI读取所有图像并将其名称保存在单元格数组中。现在我添加了一个可编辑的框,用户可以在其中键入名称,程序将显示该图像。问题是我希望程序考虑用户的拼写错误和拼写错误,并找到与用户输入的单词最相似的文件名。你能帮我吗?
非常感谢,
哈密
答案 0 :(得分:4)
您应该阅读此WP文章:Approximate string matching并查看Calculation of distance between strings上的“FEx”。
答案 1 :(得分:1)
我认为您应该使用最长的公共子序列算法来近似比较字符串。
这是一个matlab实现:
http://www.mathworks.com/matlabcentral/fileexchange/24559-longest-common-subsequence
之后,就这样做:
[~,ind]=min(cellarray( @(x) LCS(lower(userInput),lower(x)), allFileNames));
chosenFile=allFileName{ind};
(函数LCS
是最长的公共子序列算法,函数lower
转换为小写)
答案 2 :(得分:0)
不完全是您要找的内容,但您可以比较字符串的前几个字符,忽略大小写以找到紧密匹配。请参阅命令strncmpi:
strncmpi比较忽略大小写的字符串的前N个字符。
TF = strncmpi(S,C,N)执行不区分大小写的比较 字符串S的前N个字符和每个元素中的前N个字符 单元阵列C.输入S是字符向量(或1乘1单元阵列),和 输入C是字符串的单元格数组。该函数返回TF,一个逻辑 与C大小相同的数组,包含逻辑1(true) 除了字母大小写和逻辑0之外的C匹配元素 (false)对于那些没有的元素。两个输入的顺序 争论并不重要。