【问题标题】:"Did you mean" in gitgit中的“你的意思是”
【发布时间】:2012-03-17 14:15:36
【问题描述】:

我想写一个“你的意思是”算法。
我有一组词(就像 git 命令,如 pullpushclone)。
每当用户从一组词中输入一个词时,我都需要给出建议。
以上所有细节都是我问题的背景:)

我想复制 ;) git 中使用的代码来实现“你是说”算法来完成我的任务。
你知道包含“你的意思是”算法的 git-source-file 的位置吗?

【问题讨论】:

  • 我猜在没有 git 源代码的情况下做到这一点并不难。 1) 获取第二个参数,2) 查看它是否匹配命令,3) 如果不匹配,则显示以相同首字母开头的所有命令的列表。
  • 你确定不会侵犯 git 的GPL2 许可证吗?您的代码将在哪里以及如何使用?你会分发它吗?
  • @dtryon 与 Levenshtein 等体面的编辑距离算法相比,这是一个糟糕的算法(产生许多无用或看似无关的结果,但很少达到你的真正意思)。
  • @dtryon 感谢 yaar 给我们这样的想法。
  • @delnan dtryon 的方法可能只给出不到 50% 的准确率。我们不应忽视这样一个事实,即没有 100% 准确度的算法。

标签: algorithm git artificial-intelligence copy-paste


【解决方案1】:

相关代码在levenshtein.c(编辑距离计算)和help.c(截断)中。

【讨论】:

  • 太棒了!你是怎么找到位置的?除了我的 grep-tool 你还有什么工具吗?
  • @habeebperwad 当我不久前寻找这个时,我可能只是做了git grep 'Did you mean one of these' 并从那里追踪代码。
  • 我怀疑它与多个有关,因为如果只有一个命令匹配它,它会说“你的意思是这个吗?”
【解决方案2】:

Iarsmans 已经为您提供了在 git 中实现该算法的链接,但如果您想阅读有关该理论的内容,您可能需要阅读维基百科上的 edit distanceLevenshtein distance 页面。

简单地说,对于编辑距离算法,其目的是计算 - 给定一组对您正在处理的数据类型(在您的情况下为字符串)的基本编辑操作 - 最小编辑次数使一个值(字符串)与另一个值相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2012-03-03
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多