在标记相关注释时取消标记先前标记的注释

Unmark previously marked annotation while marking related one

这是我的输入:

person
the private person

这是我的规则

DECLARE Person;
DECLARE PrivatePerson;

ANY{REGEXP("person") -> MARK(Person)};

ANY{AFTER(Person), REGEXP("private") -> MARK(PrivatePerson), UNMARK(Person)};

如何让 "private person" 中的 Person 不被标记(但保留 PrivatePerson 被标记)?

UNMARK(Person) 无效

有可能吗?

我不知道以下是否适合您,但它会起作用:

W{REGEXP("private")} Person {->UNMARK(Person),MARK(PrivatePerson,1,2)};

我放了 1,2 这样注释范围也包含 private

根据您的条件,您需要 BEFORE 而不是 AFTER。这将创建一个注释 PrivatePerson。但是,取消标记不会发生,因为规则仅适用于匹配的内容。在您的规则中匹配的是字符串 "private" 而不是其他任何内容。 BEFORE(Person) 只是一个条件,所以规则 UNMARK(Person) 在特定场合什么都不做。

此外,更喜欢 Document 而不是 ANY,因为 ANY 用于每个标记(对我来说,它既是 RutaBasic 又是 SW)并创建了重复的注释,而使用 Document 我最终得到了每个注释的一个实例。我不确定您是否遇到过相同的行为。