Skip to content

Commit a37afbb

Browse files
committed
Add a block testing the morpho feature capability of Ssurgeon EditNode
1 parent f77a9b4 commit a37afbb

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

test/src/edu/stanford/nlp/semgraph/semgrex/ssurgeon/SsurgeonTest.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,6 +1396,72 @@ public void readXMLEditNode() {
13961396
assertEquals("blue", blueVertex.value());
13971397
}
13981398

1399+
/**
1400+
* A couple tests of setting the morpho features on a word using EditNode
1401+
*/
1402+
@Test
1403+
public void readXMLEditNodeMorpho() {
1404+
Ssurgeon inst = Ssurgeon.inst();
1405+
1406+
String editPattern = String.join(newline,
1407+
"<ssurgeon-pattern-list>",
1408+
" <ssurgeon-pattern>",
1409+
" <uid>38</uid>",
1410+
" <notes>Edit a node's morpho</notes>",
1411+
" <semgrex>" + XMLUtils.escapeXML("{word:/antennae/}=word") + "</semgrex>",
1412+
" <edit-list>EditNode -node word -morphofeatures foo=asdf</edit-list>",
1413+
" </ssurgeon-pattern>",
1414+
"</ssurgeon-pattern-list>");
1415+
1416+
List<SsurgeonPattern> patterns = inst.readFromString(editPattern);
1417+
assertEquals(patterns.size(), 1);
1418+
SsurgeonPattern editSsurgeon = patterns.get(0);
1419+
1420+
SemanticGraph sg = SemanticGraph.valueOf("[has-2 nsubj> Jennifer-1 obj> [antennae-4 dep> green-3]]");
1421+
IndexedWord vertex = sg.getNodeByIndexSafe(4);
1422+
assertEquals(vertex.get(CoreAnnotations.CoNLLUFeats.class), null);
1423+
assertEquals("antennae", vertex.value());
1424+
SemanticGraph newSG = editSsurgeon.iterate(sg).first;
1425+
IndexedWord newVertex = newSG.getNodeByIndexSafe(4);
1426+
assertSame(vertex, newVertex);
1427+
assertEquals(vertex.get(CoreAnnotations.CoNLLUFeats.class).toString(), "foo=asdf");
1428+
1429+
editPattern = String.join(newline,
1430+
"<ssurgeon-pattern-list>",
1431+
" <ssurgeon-pattern>",
1432+
" <uid>38</uid>",
1433+
" <notes>Edit a node's morpho</notes>",
1434+
" <semgrex>" + XMLUtils.escapeXML("{word:/antennae/}=word") + "</semgrex>",
1435+
" <edit-list>EditNode -node word -morphofeatures bar=zzzz</edit-list>",
1436+
" </ssurgeon-pattern>",
1437+
"</ssurgeon-pattern-list>");
1438+
1439+
patterns = inst.readFromString(editPattern);
1440+
assertEquals(patterns.size(), 1);
1441+
editSsurgeon = patterns.get(0);
1442+
1443+
newSG = editSsurgeon.iterate(newSG).first;
1444+
assertEquals(vertex.get(CoreAnnotations.CoNLLUFeats.class).toString(), "bar=zzzz");
1445+
1446+
editPattern = String.join(newline,
1447+
"<ssurgeon-pattern-list>",
1448+
" <ssurgeon-pattern>",
1449+
" <uid>38</uid>",
1450+
" <notes>Edit a node's morpho</notes>",
1451+
" <semgrex>" + XMLUtils.escapeXML("{word:/antennae/}=word") + "</semgrex>",
1452+
" <edit-list>EditNode -node word -morphofeatures foo=asdf|bar=zzzz</edit-list>",
1453+
" </ssurgeon-pattern>",
1454+
"</ssurgeon-pattern-list>");
1455+
1456+
patterns = inst.readFromString(editPattern);
1457+
assertEquals(patterns.size(), 1);
1458+
editSsurgeon = patterns.get(0);
1459+
1460+
newSG = editSsurgeon.iterate(newSG).first;
1461+
// eager test! checking that the features are sorted
1462+
assertEquals(vertex.get(CoreAnnotations.CoNLLUFeats.class).toString(), "bar=zzzz|foo=asdf");
1463+
assertEquals(vertex.get(CoreAnnotations.CoNLLUFeats.class).size(), 2);
1464+
}
13991465

14001466
/**
14011467
* Put MWT annotations on a couple nodes using EditNode

0 commit comments

Comments
 (0)