【问题标题】:compare a string to a cell array of srings in matlab and find the most similar将字符串与matlab中的字符串元胞数组进行比较并找到最相似的
【发布时间】:2011-12-02 20:54:33
【问题描述】:

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

非常感谢,

哈米德

【问题讨论】:

    标签: string search matlab


    【解决方案1】:

    您应该阅读这篇 WP 文章:Approximate string matching 并查看 FEx 上的“Calculation of distance between strings”。

    【讨论】:

    • @hamidzolfaghari,如果这正是您想要的,请接受答案。
    【解决方案2】:

    我认为你应该使用最长公共子序列算法来近似比较字符串。

    这是一个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转为小写)

    【讨论】:

      【解决方案3】:

      不完全是您要查找的内容,但您可以比较字符串的前几个字符(忽略大小写)以找到匹配项。见命令strncmpi:

      strncmpi 比较字符串的前 N ​​个字符,忽略大小写。

      TF = strncmpi(S,C,N) 执行不区分大小写的比较 字符串 S 的前 N ​​个字符和每个元素中的前 N ​​个字符 元胞数组 C。输入 S 是字符向量(或 1×1 元胞数组),并且 输入 C 是一个字符串元胞数组。函数返回 TF,一个逻辑 与 C 大小相同且包含逻辑 1(真)的数组 C 中匹配的元素(字母大小写除外)和逻辑 0 (false) 对于那些不是的元素。两个输入的顺序 论据并不重要。

      【讨论】:

      • 感谢 Kavka,虽然很有帮助,但问题是代码会卡在“Thanks”和“Thursday”等实例上。此外,它不考虑前几个字母的拼写错误。还是谢谢
      猜你喜欢
      • 2011-03-14
      • 2019-07-03
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多