在标记相关注释时取消标记先前标记的注释
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 我最终得到了每个注释的一个实例。我不确定您是否遇到过相同的行为。
这是我的输入:
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 我最终得到了每个注释的一个实例。我不确定您是否遇到过相同的行为。