string-matching - 如何将一阶逻辑语句翻译成Protègè中带有字符串匹配的限制?

标签 string-matching ontology protege first-order-logic

我正在尝试构建一个本体来推断有关领域分类和术语的一些信息,但我遇到了一些概念上的困难。

让我解释一下这个问题。在 Protègè 4.1 中,我创建了 Thing 的 6 个子类:Concept、conceptTitle、ConceptSynonym(用于分类)和 Term、TermTitle、TermSynonym(用于术语)。我还创建了 hasConceptTitle、hasConceptSynonym、hasTermTitle 和 hasTermSynonym 对象关系(带有一些约束),表示每个概念都有一个(且仅有一个)标题,并且可能有一些同义词,并且每个术语都有一个(且仅有一个)标题,并且一些同义词。 Concept 和 Term 还有另一种关系 isA,赋予分类 DAG/树结构,而术语具有点阵结构(换句话说,一个术语可能是多个术语的子类)。

问题来了:我想创建一个 Concept 的子类,比如说“MappedConcept”),它应该是映射概念的集合,即标题等于术语标题的概念集合,或者它具有等于术语标题的同义词或具有等于术语同义词的同义词。 在一阶逻辑中,该集合可以表示为:

∀x∃y( ∃z((hasConceptTitle(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptTitle(x,z) ∧ hasTermSynonym(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermSynonym(y,z)) )

我怎样才能得到这个?定义“ConceptTitle”、“ConceptSynonym”、“TermTitle”和“TermSynonym”的数据属性?以及如何描述字符串匹配? 也许这 4 个类应该只是 Concept 和 Term 类的数据属性? 我读了好几遍Matthew Horridge的实用指南,但我无法将我脑海中的实用想法转化为Protègè的ongology。

提前致谢。

最佳答案

恐怕您无法在 OWL 2 DL 或 Protégé(OWL 2 DL 的编辑器)中执行此操作,因为据我所知,似乎有必要引入数据类型属性的逆,这在 OWL 2 DL 中被禁止。然而,在 OWL Full 中这是可能的,一些深度学习推理机甚至可以处理它。在这里,在 Turtle 中:

<MappedConcept>  a  owl:Class;
    owl:equivalentTo  [
        a  owl:Class;
        owl:unionOf (
            [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ]
        )
    ] .

您也可以在没有 OWL 的情况下完成此操作,例如使用规则语言。这些规则将更接近您在编程语言中的做法。在 SWRL 中:

hasConceptTitle(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptTitle(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)

关于string-matching - 如何将一阶逻辑语句翻译成Protègè中带有字符串匹配的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916330/

相关文章:

C# 引号中的引号(正则表达式匹配)

php - 具有错误字符容忍度的最长公共(public)子串

taxonomy - 具有非分类关系的本体

java - 使用 OWL API 提取本体命名空间/前缀

java - 使用 OWL-API 和 Hermit 打印披萨本体的父类(super class)

java - 并行序列比对算法

java - 将动态字符串变量转换为 string.match() 的正则表达式?

java - 如何将 Openllet OWL2 推理器(或任何其他)与 Jena TDB 一起使用?

owl - SWRL:将规则限制于特定个人

jena - 解释耶拿的推论