这是“字符串模式匹配”算法吗?或者是其他东西?

时间:2013-07-01 13:41:12

标签: string algorithm language-agnostic pattern-matching

我甚至不确定它是否称为模式匹配,但我想做类似于规则的事情:

我的“对象”具有“功能”属性,该属性是由空格分隔的名称序列。例如:

a.capability = "" // no pattern
b.capability = "foo"
c.capability = "bar"
d.capability = "foo bar"
e.capability = "bar lol truc bidule"

(假设每个对象必须具有与其他对象不同的模式)

然后我有一个全局上下文对象,它也有这样的属性:

context.capability = ""  // 1
// OR
context.capability = "foo"  // 2
// OR
context.capability = "bar"  // 3
// OR
context.capability = "bar foo"  // 4
// OR
context.capability = "lol"  // 5

现在,我们只想选择一个与上下文功能“最匹配”的唯一对象。 为此,我们遵循以下规则:

  1. 如果对象没有模式且上下文没有模式,则选择此对象;
  2. 如果对象没有模式且上下文有模式,则在没有其他对象匹配的情况下选择此对象;
  3. 如果一个对象具有与上下文完全相同的模式名称,则选择它;
  4. 选择上下文模式中包含的模式名称数最多的对象;
  5. 例如:

    • 在上下文案例1)中:a将被选中;
    • 在上下文案例2)中:b将被选中;
    • 在上下文案例3)中:c将被选中;
    • 在上下文案例4)中:d将被选中;
    • 在上下文案例5)中:将选择e;

    我写这篇文章时甚至没有测试这个规则是否有效,它只是我想要定义的草稿。

    我的问题:

    1. 你怎么称呼这种算法? (允许我用正确的名字做未来的研究)
    2. 是否已经定义了这样的规则?它看起来很通用,以前有人可能已经定义了类似的规则,但除了定义重载规则的语言标准部分(比如C ++标准)之外,我找不到类似的东西;
    3. 是否有研究探索此类算法/规则的属性?我不确定这是使用我的用例的正确方法,但它似乎是正确的解决方案。但是我没有实现这种语言功能的经验,所以我希望看到一些关于我可能会遇到什么问题的数据(但到目前为止我找不到任何东西)。
    4. 一位朋友建议查看一些关于AI,专家系统和语言设计者以及编译器实现的书籍。但是,如何找到关于这种特定方式的数据的一些指导将有很大帮助。

1 个答案:

答案 0 :(得分:0)

我对你的问题没有直接的答案,但在考虑之后,有几种方法可以解决问题:

  • 文档检索(例如在搜索引擎中使用 - 它们如何快速对析取查询进行排名?)
  • 非指标 nearest neighbor(链接适用于常见指标版本)
  • 0-1 linear programming

因此,我认为这个问题没有一个术语 - 太多领域太有趣了。这三个领域(例如Google)之间肯定有很多研究: