2

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

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

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. 选择上下文模式中包含的模式名称计数最多的对象;

例如:

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

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

我的问题:

  1. 你怎么称呼这种算法?(让我用正确的名字做未来的研究)
  2. 是否已经定义了这样的规则?它看起来足够通用,以至于有人以前可以定义类似的规则,但是除了定义重载规则的语言标准的一部分(如 C++ 标准)之外,我找不到类似的东西;
  3. 是否有研究探索此类算法/规则的特性?我不确定这是否是适合我的用例的正确方法,但它似乎可能是正确的解决方案。但是我没有实现这种语言功能的经验,所以我想看看我可能会遇到什么问题的一些数据(但到目前为止我找不到任何东西)。

一位朋友建议看一些关于人工智能、专家系统和语言设计器和编译器实现的书籍。但是,有关如何查找有关这种特定方式的数据的一些指导将有很大帮助。

4

1 回答 1

0

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

  • 文档检索(例如在搜索引擎中使用——它们如何如此快速地对分离查询进行排名?)
  • 非公制 最近邻(链接适用于通用公制版本)
  • 0-1线性规划

因此,我认为这个问题没有一个术语——它对太多领域来说太有趣了。这三个领域之间肯定有很多研究(例如谷歌):

于 2013-07-01T18:48:05.817 回答