【发布时间】:2011-12-02 20:54:33
【问题描述】:
我有一个存储在目录中的图像列表。他们都被命名。我的 GUI 读取所有图像并将它们的名称保存在一个单元格数组中。现在我添加了一个用户可以输入名称的可编辑框,程序将显示该图像。问题是我希望程序考虑用户的拼写错误和拼写错误,并找到与用户键入的单词最相似的文件名。你能帮帮我吗?
非常感谢,
哈米德
【问题讨论】:
我有一个存储在目录中的图像列表。他们都被命名。我的 GUI 读取所有图像并将它们的名称保存在一个单元格数组中。现在我添加了一个用户可以输入名称的可编辑框,程序将显示该图像。问题是我希望程序考虑用户的拼写错误和拼写错误,并找到与用户键入的单词最相似的文件名。你能帮帮我吗?
非常感谢,
哈米德
【问题讨论】:
您应该阅读这篇 WP 文章:Approximate string matching 并查看 FEx 上的“Calculation of distance between strings”。
【讨论】:
我认为你应该使用最长公共子序列算法来近似比较字符串。
这是一个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转为小写)
【讨论】:
不完全是您要查找的内容,但您可以比较字符串的前几个字符(忽略大小写)以找到匹配项。见命令strncmpi:
strncmpi 比较字符串的前 N 个字符,忽略大小写。
TF = strncmpi(S,C,N) 执行不区分大小写的比较 字符串 S 的前 N 个字符和每个元素中的前 N 个字符 元胞数组 C。输入 S 是字符向量(或 1×1 元胞数组),并且 输入 C 是一个字符串元胞数组。函数返回 TF,一个逻辑 与 C 大小相同且包含逻辑 1(真)的数组 C 中匹配的元素(字母大小写除外)和逻辑 0 (false) 对于那些不是的元素。两个输入的顺序 论据并不重要。
【讨论】: