CustomMarkAlineaHead.jape 6.29 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Imports: { import gateStandAlone.* ;}
Phase: MarkAlinea1Head
Input: Alinea Article_Head Token SpaceToken num HeaderLabel OpenQuote Footnote_Anchor Footnote_Content
Options: control = appelt
Rule: DoMarkAlinea1Head
({SpaceToken.kind=="control"}{Token.string=="Art"}{Token.string=="."}{SpaceToken.kind=="space"}{Token.kind=="numberPrime"}|{Token.kind=="number"}({Token.string=="-"}({Token,!Token.string=="("}|{SpaceToken.kind=="space"})+)?{Token.string=="."}({SpaceToken.kind=="space"}({Token.string=="("}({Token,!Token.string=="("}|{SpaceToken.kind=="space"})+{Token.string==")"}):block)?){SpaceToken.kind=="space"}{Token.string=="("}{Token.kind=="numberPrime"}|{Token.kind=="number"}{Token.string==")"}{SpaceToken.kind=="space"}({Token.kind=="word", Token.orth=="upperInitial"}):header
-->
{
	AnnotationSet headerAnnotation = (AnnotationSet) bindings.get("header");
	Node headerStart = headerAnnotation.firstNode();
	Node headerEnd = headerAnnotation.lastNode();

	//create property num
	String num = "";
	AnnotationSet numAnnotation = (AnnotationSet) bindings.get("num");
	if (numAnnotation != null) 
	{
		Node numStart = numAnnotation.firstNode();
		Node numEnd = numAnnotation.lastNode();
		num = doc.getContent().toString().substring(numStart.getOffset().intValue(), numEnd.getOffset().intValue());
	}

	//create property block
	String block = "";
	AnnotationSet blockAnnotation = (AnnotationSet) bindings.get("block");
	if (blockAnnotation != null) 
	{
		Node blockStart = blockAnnotation.firstNode();
		Node blockEnd = blockAnnotation.lastNode();
		block = doc.getContent().toString().substring(blockStart.getOffset().intValue(), blockEnd.getOffset().intValue());
	}

	//create property ruleName
	String ruleName = "Alinea1Head";

	//create the new token
	FeatureMap features = Factory.newFeatureMap();
	features.put("num", num);
	features.put("block", block);
	features.put("ruleName", ruleName);
	outputAS.add(headerStart, headerEnd, "Alinea_Head", features);
}
Phase: MarkAlinea2Head
Input: Alinea Article_Head Token SpaceToken num HeaderLabel OpenQuote Footnote_Anchor Footnote_Content
Options: control = appelt
Rule: DoMarkAlinea2Head
({SpaceToken.kind=="control"}{Token.string=="Art"}{Token.string=="."}{SpaceToken.kind=="space"}{Token.kind=="numberPrime"}|{Token.kind=="number"}({Token.string=="-"}({Token,!Token.string=="("}|{SpaceToken.kind=="space"})+)?{Token.string=="."}({SpaceToken.kind=="space"}({Token.string=="("}({Token,!Token.string=="("}|{SpaceToken.kind=="space"})+{Token.string==")"}):block)?){SpaceToken.kind=="space"}({Token.kind=="word", Token.orth=="upperInitial"}):header
-->
{
	AnnotationSet headerAnnotation = (AnnotationSet) bindings.get("header");
	Node headerStart = headerAnnotation.firstNode();
	Node headerEnd = headerAnnotation.lastNode();

	//create property num
	String num = "";
	AnnotationSet numAnnotation = (AnnotationSet) bindings.get("num");
	if (numAnnotation != null) 
	{
		Node numStart = numAnnotation.firstNode();
		Node numEnd = numAnnotation.lastNode();
		num = doc.getContent().toString().substring(numStart.getOffset().intValue(), numEnd.getOffset().intValue());
	}

	//create property block
	String block = "";
	AnnotationSet blockAnnotation = (AnnotationSet) bindings.get("block");
	if (blockAnnotation != null) 
	{
		Node blockStart = blockAnnotation.firstNode();
		Node blockEnd = blockAnnotation.lastNode();
		block = doc.getContent().toString().substring(blockStart.getOffset().intValue(), blockEnd.getOffset().intValue());
	}

	//create property ruleName
	String ruleName = "Alinea2Head";

	//create the new token
	FeatureMap features = Factory.newFeatureMap();
	features.put("num", num);
	features.put("block", block);
	features.put("ruleName", ruleName);
	outputAS.add(headerStart, headerEnd, "Alinea_Head", features);
}
Phase: MarkAlinea3Head
Input: Alinea Article_Head Token SpaceToken num HeaderLabel OpenQuote Footnote_Anchor Footnote_Content
Options: control = appelt
Rule: DoMarkAlinea3Head
{Token.string=="."}{SpaceToken.kind=="control"}{Token.string=="("}{Token.kind=="numberPrime"}|{Token.kind=="number"}{Token.string==")"}{SpaceToken.kind=="space"}({Token.kind=="word", Token.orth=="upperInitial"}):header
-->
{
	AnnotationSet headerAnnotation = (AnnotationSet) bindings.get("header");
	Node headerStart = headerAnnotation.firstNode();
	Node headerEnd = headerAnnotation.lastNode();

	//create property num
	String num = "";
	AnnotationSet numAnnotation = (AnnotationSet) bindings.get("num");
	if (numAnnotation != null) 
	{
		Node numStart = numAnnotation.firstNode();
		Node numEnd = numAnnotation.lastNode();
		num = doc.getContent().toString().substring(numStart.getOffset().intValue(), numEnd.getOffset().intValue());
	}

	//create property ruleName
	String ruleName = "Alinea3Head";

	//create the new token
	FeatureMap features = Factory.newFeatureMap();
	features.put("num", num);
	features.put("ruleName", ruleName);
	outputAS.add(headerStart, headerEnd, "Alinea_Head", features);
}
Phase: MarkAlinea4Head
Input: Alinea Article_Head Token SpaceToken num HeaderLabel OpenQuote Footnote_Anchor Footnote_Content
Options: control = appelt
Rule: DoMarkAlinea4Head
{Token.string=="."}{SpaceToken.kind=="control"}({Token.kind=="word", Token.orth=="upperInitial"}):header
-->
{
	AnnotationSet headerAnnotation = (AnnotationSet) bindings.get("header");
	Node headerStart = headerAnnotation.firstNode();
	Node headerEnd = headerAnnotation.lastNode();

	//create property ruleName
	String ruleName = "Alinea4Head";

	//create the new token
	FeatureMap features = Factory.newFeatureMap();
	features.put("ruleName", ruleName);
	outputAS.add(headerStart, headerEnd, "Alinea_Head", features);
}
//Clean the Alinea_Head annotations (remove duplicates and the annotations within other)
Phase: MarkCleanAlineaAnnotations
Input:  Act_Head Part_Head Book_Head Title_Head Chapter_Head Section_Head Subsection_Head Article_Head Paragraph_Head Alinea_Head
Options: control = appelt
Rule: DoMarkCleanAlinea
(
({Alinea_Head within Act_Head} | {Alinea_Head within Part_Head} | {Alinea_Head within Book_Head} | {Alinea_Head within Title_Head} | {Alinea_Head within Chapter_Head} | {Alinea_Head within Section_Head} | {Alinea_Head within Subsection_Head} | {Alinea_Head within Article_Head} | {Alinea_Head within Paragraph_Head})
):reference
-->
{
AnnotationSet toRemove = (gate.AnnotationSet) bindings.get("reference");
outputAS.removeAll(toRemove);
inputAS.removeAll(toRemove);
}