Jape 文件以查找句子中的模式
Jape file to find the pattern within a sentence
如果我在戏谑规则中写的词出现在同一个句子中,我需要对句子的一部分进行注释。例如句子是"The child cannot resist any changes to his routine"。我在 "trouble.lst" 文件中加入了 resist 之类的词,在 "alteration.lst" 文件中加入了 changes 之类的词。现在在这句话中我需要将 "resist any changes" 部分注释为 "A3b"。我试过使用下面的代码,但它没有考虑同一句话中的单词。我的戏谑规则也是从不同的句子中取词。假设 resist 出现在一个句子中,并在后面的其他句子中发生变化,那么这段代码也会对其进行注释。任何人都可以帮我找出解决方案吗?
Phase:secondpass
Input: Lookup
Options: control = brill
Rule: A3b
({Lookup.majorType == "trouble"}
{Lookup.majorType == "alteration"}
):label
-->
:label.A3b = {rule= "A3b"}
在这种情况下,您不能像使用 {X within Y}
那样使用 Contextual Operators,因为它们仅适用于单个注释,而不适用于一系列注释。
但是你可以使用 "trick":
在 Input
中包含 Sentence
注释。
这是主要的事情。即使您没有在规则中的任何地方使用 Sentence
,它也会阻止在新句子开始 某处 注释之间的匹配。
但它不会阻止句子开始 与注释本身在同一点 的匹配。
使用!
运算符禁止任何句子从与第二个注释相同的点开始:{Lookup, !Sentence}
.
Phase: secondpass
Input: Lookup Sentence
Options: control = brill
Rule: A3b
(
{Lookup.majorType == "trouble"}
{Lookup.majorType == "alteration", !Sentence}
):label
--> :label.A3b = {rule= "A3b"}
除了覆盖句子本身的 Sentence
注释外,句子拆分器还会在句子边界上创建 Split
注释。如果您在 Input
行中包含 Split
但在规则中 not 提及 {Split}
,这将具有防止交叉匹配的效果一个句子边界。
Phase: secondpass
Input: Lookup Split
Options: control = brill
Rule: A3b
({Lookup.majorType == "trouble"}
{Lookup.majorType == "alteration"}
):label
--> :label.A3b = {rule= "A3b"}
它的工作方式是 Input
行决定 JAPE 匹配器可以使用哪些注释 "see" - 如果麻烦和改动 Lookup
注释在不同的句子中,那么匹配器将看到序列 {Lookup}{Split}{Lookup}
,它与想要 {Lookup}{Lookup}
.
的规则不匹配
如果我在戏谑规则中写的词出现在同一个句子中,我需要对句子的一部分进行注释。例如句子是"The child cannot resist any changes to his routine"。我在 "trouble.lst" 文件中加入了 resist 之类的词,在 "alteration.lst" 文件中加入了 changes 之类的词。现在在这句话中我需要将 "resist any changes" 部分注释为 "A3b"。我试过使用下面的代码,但它没有考虑同一句话中的单词。我的戏谑规则也是从不同的句子中取词。假设 resist 出现在一个句子中,并在后面的其他句子中发生变化,那么这段代码也会对其进行注释。任何人都可以帮我找出解决方案吗?
Phase:secondpass
Input: Lookup
Options: control = brill
Rule: A3b
({Lookup.majorType == "trouble"}
{Lookup.majorType == "alteration"}
):label
-->
:label.A3b = {rule= "A3b"}
在这种情况下,您不能像使用 {X within Y}
那样使用 Contextual Operators,因为它们仅适用于单个注释,而不适用于一系列注释。
但是你可以使用 "trick":
在
Input
中包含Sentence
注释。
这是主要的事情。即使您没有在规则中的任何地方使用Sentence
,它也会阻止在新句子开始 某处 注释之间的匹配。
但它不会阻止句子开始 与注释本身在同一点 的匹配。使用
!
运算符禁止任何句子从与第二个注释相同的点开始:{Lookup, !Sentence}
.
Phase: secondpass
Input: Lookup Sentence
Options: control = brill
Rule: A3b
(
{Lookup.majorType == "trouble"}
{Lookup.majorType == "alteration", !Sentence}
):label
--> :label.A3b = {rule= "A3b"}
除了覆盖句子本身的 Sentence
注释外,句子拆分器还会在句子边界上创建 Split
注释。如果您在 Input
行中包含 Split
但在规则中 not 提及 {Split}
,这将具有防止交叉匹配的效果一个句子边界。
Phase: secondpass
Input: Lookup Split
Options: control = brill
Rule: A3b
({Lookup.majorType == "trouble"}
{Lookup.majorType == "alteration"}
):label
--> :label.A3b = {rule= "A3b"}
它的工作方式是 Input
行决定 JAPE 匹配器可以使用哪些注释 "see" - 如果麻烦和改动 Lookup
注释在不同的句子中,那么匹配器将看到序列 {Lookup}{Split}{Lookup}
,它与想要 {Lookup}{Lookup}
.