在matlab中将字符串与字符串的单元格数组进行比较,找到最相似的字符串

时间:2011-12-02 20:54:34

标签: string search matlab

我有一个存储在目录中的图像列表。他们都被命名了。我的GUI读取所有图像并将其名称保存在单元格数组中。现在我添加了一个可编辑的框,用户可以在其中键入名称,程序将显示该图像。问题是我希望程序考虑用户的拼写错误和拼写错误,并找到与用户输入的单词最相似的文件名。你能帮我吗?

非常感谢,

哈密

3 个答案:

答案 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)对于那些没有的元素。两个输入的顺序   争论并不重要。