private static boolean isRoleAgree(FeatureStructure aMergeFs, Map<String, ArrayFS> aAnnosPerUser) { for (String user : aAnnosPerUser.keySet()) { boolean agree = false; if (aAnnosPerUser.get(user) == null) { return false; } for (FeatureStructure usrFs : aAnnosPerUser.get(user).toArray()) { // same on all non slot feature values if (isSameAnno(aMergeFs, usrFs)) { if (!agree) { // this anno is the same with the others agree = true; } } } // do not match in at least one user annotation in this position if (!agree) { return false; } } return true; }
private static boolean isRoleAgree(FeatureStructure aMergeFs, Map<String, ArrayFS> aAnnosPerUser) { for (String user : aAnnosPerUser.keySet()) { boolean agree = false; if (aAnnosPerUser.get(user) == null) { return false; } for (FeatureStructure usrFs : aAnnosPerUser.get(user).toArray()) { // same on all non slot feature values if (isSameAnno(aMergeFs, usrFs)) { if (!agree) { // this anno is the same with the others agree = true; } } } // do not match in at least one user annotation in this position if (!agree) { return false; } } return true; }
StringBuffer sbRole = new StringBuffer(); StringBuffer sbTarget = new StringBuffer(); for (FeatureStructure linkFS : array.toArray()) { String role = linkFS.getStringValue(linkFS.getType().getFeatureByBaseName("role")); AnnotationFS targetFs = (AnnotationFS) linkFS
StringBuilder sbRole = new StringBuilder(); StringBuilder sbTarget = new StringBuilder(); for (FeatureStructure linkFS : array.toArray()) { String role = linkFS .getStringValue(linkFS.getType().getFeatureByBaseName("role"));
StringBuilder sbRole = new StringBuilder(); StringBuilder sbTarget = new StringBuilder(); for (FeatureStructure linkFS : array.toArray()) { String role = linkFS .getStringValue(linkFS.getType().getFeatureByBaseName("role"));
for (FeatureStructure link : array.toArray()) { LinkWithRoleModel m = new LinkWithRoleModel(); m.role = link.getStringValue(roleFeat);
for (FeatureStructure link : array.toArray()) { LinkWithRoleModel m = new LinkWithRoleModel(); m.role = link.getStringValue(roleFeat);
for (FeatureStructure link : array.toArray()) { LinkWithRoleModel m = new LinkWithRoleModel(); m.role = link.getStringValue(roleFeat);
for (FeatureStructure link : array.toArray()) { LinkWithRoleModel m = new LinkWithRoleModel(); m.role = link.getStringValue(roleFeat);
@Override public List<? extends Position> generateSubPositions(int aCasId, AnnotationFS aFs, LinkCompareBehavior aLinkCompareBehavior) { List<Position> subPositions = new ArrayList<>(); for (LinkFeatureDecl decl : linkFeatures) { Feature linkFeature = aFs.getType().getFeatureByBaseName(decl.name); ArrayFS array = (ArrayFS) aFs.getFeatureValue(linkFeature); if (array == null) { continue; } for (FeatureStructure linkFS : array.toArray()) { String role = linkFS.getStringValue(linkFS.getType().getFeatureByBaseName( decl.roleFeature)); AnnotationFS target = (AnnotationFS) linkFS.getFeatureValue(linkFS.getType() .getFeatureByBaseName(decl.targetFeature)); Position pos = getPosition(aCasId, aFs, decl.name, role, target.getBegin(), target.getEnd(), aLinkCompareBehavior); subPositions.add(pos); } } return subPositions; } }
} else if (typeSystem.subsumes(typeSystem.getType("uima.tcas.Annotation"), componentType)) { ArrayFS fsArray = (ArrayFS) featureStructure.getFeatureValue(feature); FeatureStructure[] array = fsArray.toArray(); if (allValues) { for (FeatureStructure ftr : array)
@Test public void multiLinkWithRoleLabelDifferenceTest() throws Exception { JCas jcasA = JCasFactory.createJCas(DiffUtils.createMultiLinkWithRoleTestTypeSytem()); DiffUtils.makeLinkHostFS(jcasA, 0, 0, DiffUtils.makeLinkFS(jcasA, "slot1", 0, 0)); JCas jcasB = JCasFactory.createJCas(DiffUtils.createMultiLinkWithRoleTestTypeSytem()); DiffUtils.makeLinkHostFS(jcasB, 0, 0, DiffUtils.makeLinkFS(jcasB, "slot2", 0, 0)); Map<String, List<JCas>> casByUser = new LinkedHashMap<>(); casByUser.put("user1", asList(jcasA)); casByUser.put("user2", asList(jcasB)); casByUser.put(CURATION_USER, asList(jcasA)); List<String> entryTypes = asList(DiffUtils.HOST_TYPE); SpanDiffAdapter adapter = new SpanDiffAdapter(DiffUtils.HOST_TYPE); adapter.addLinkFeature("links", "role", "target"); List<? extends DiffAdapter> diffAdapters = asList(adapter); DiffResult result = CasDiff2.doDiff(entryTypes, diffAdapters, LinkCompareBehavior.LINK_TARGET_AS_LABEL, casByUser); result.print(System.out); JCas mergeCas = MergeCas.reMergeCas(result, getSingleCasByUser(casByUser)); Type hostType = mergeCas.getTypeSystem().getType(DiffUtils.HOST_TYPE); int numHost = CasUtil.select(mergeCas.getCas(), hostType).size(); assertEquals(1, numHost); for (FeatureStructure host : CasUtil.select(mergeCas.getCas(), hostType)) { ArrayFS linkFss = (ArrayFS) WebAnnoCasUtil.getFeatureFS(host, "links"); assertEquals(0, linkFss.toArray().length); } }
@Test public void multiLinkWithRoleTargetDifferenceTest() throws Exception { JCas jcasA = JCasFactory.createJCas(DiffUtils.createMultiLinkWithRoleTestTypeSytem()); DiffUtils.makeLinkHostFS(jcasA, 0, 0, DiffUtils.makeLinkFS(jcasA, "slot1", 0, 0)); JCas jcasB = JCasFactory.createJCas(DiffUtils.createMultiLinkWithRoleTestTypeSytem()); DiffUtils.makeLinkHostFS(jcasB, 0, 0, DiffUtils.makeLinkFS(jcasB, "slot1", 10, 10)); Map<String, List<JCas>> casByUser = new LinkedHashMap<>(); casByUser.put("user1", asList(jcasA)); casByUser.put("user2", asList(jcasB)); casByUser.put(CURATION_USER, asList(jcasA)); List<String> entryTypes = asList(DiffUtils.HOST_TYPE); SpanDiffAdapter adapter = new SpanDiffAdapter(DiffUtils.HOST_TYPE); adapter.addLinkFeature("links", "role", "target"); List<? extends DiffAdapter> diffAdapters = asList(adapter); DiffResult result = CasDiff2.doDiff(entryTypes, diffAdapters, LinkCompareBehavior.LINK_TARGET_AS_LABEL, casByUser); result.print(System.out); JCas mergeCas = MergeCas.reMergeCas(result, getSingleCasByUser(casByUser)); Type hostType = mergeCas.getTypeSystem().getType(DiffUtils.HOST_TYPE); int numHost = CasUtil.select(mergeCas.getCas(), hostType).size(); assertEquals(1, numHost); for (FeatureStructure host : CasUtil.select(mergeCas.getCas(), hostType)) { ArrayFS linkFss = (ArrayFS) WebAnnoCasUtil.getFeatureFS(host, "links"); assertEquals(0, linkFss.toArray().length); } }
return ((ArrayFS) fs).toArray();