CustomMarkParagraphHead.jape 3.81 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
Imports: { import gateStandAlone.* ;}
Phase: MarkParagraph1Head
Input: Paragraph Token SpaceToken num HeaderLabel OpenQuote Footnote_Anchor Footnote_Content
Options: control = appelt
Rule: DoMarkParagraph1Head
({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)?):article{SpaceToken.kind=="space"}(({Token.string=="("}({Token.kind=="numberPrime"}|{Token.kind=="number"}):id{Token.string==")"}):num):header{SpaceToken.kind=="space"} 
-->
{
	AnnotationSet headerAnnotation = (AnnotationSet) bindings.get("header");
	Node headerStart = headerAnnotation.firstNode();
	Node headerEnd = headerAnnotation.lastNode();

	//create property id
	String id = "";
	AnnotationSet idAnnotation = (AnnotationSet) bindings.get("id");
	if (idAnnotation != null) 
	{
		Node idStart = idAnnotation.firstNode();
		Node idEnd = idAnnotation.lastNode();
		id = doc.getContent().toString().substring(idStart.getOffset().intValue(), idEnd.getOffset().intValue());
		id = GateHeaderConverter.convertExpression(id);
	}

	//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 = "Paragraph1Head";

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

	//create property id
	String id = "";
	AnnotationSet idAnnotation = (AnnotationSet) bindings.get("id");
	if (idAnnotation != null) 
	{
		Node idStart = idAnnotation.firstNode();
		Node idEnd = idAnnotation.lastNode();
		id = doc.getContent().toString().substring(idStart.getOffset().intValue(), idEnd.getOffset().intValue());
		id = GateHeaderConverter.convertExpression(id);
	}

	//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 = "Paragraph2Head";

	//create the new token
	FeatureMap features = Factory.newFeatureMap();
	features.put("id", id);
	features.put("num", num);
	features.put("ruleName", ruleName);
	outputAS.add(headerStart, headerEnd, "Paragraph_Head", features);
}