.forEach( reciever -> { final Relation r = new Relation(jCas); r.setBegin(offset); r.setEnd(offset); r.setRelationshipType("emails"); r.setValue("emails"); r.setSource(from); r.setTarget(reciever); r.addToIndexes(); });
final Relation r1 = new Relation(jCas); r1.setBegin(0); r1.setEnd(10); r1.setRelationshipType("type"); r1.setRelationshipType("subtype"); r1.setSource(a); r1.setTarget(b); r1.addToIndexes(); final Relation r4 = new Relation(jCas); r4.setBegin(r1.getBegin()); r4.setEnd(r1.getEnd()); r4.setRelationshipType("different"); r4.setRelationSubType(r1.getRelationSubType()); r4.setSource(a); r4.setTarget(b); r4.addToIndexes(); final Relation r5 = new Relation(jCas); r5.setBegin(r1.getBegin()); r5.setEnd(r1.getEnd()); r5.setRelationshipType(r1.getRelationshipType()); r5.setRelationSubType(r1.getRelationSubType()); r5.setSource(c); r5.setTarget(b); r5.addToIndexes(); final Relation r6 = new Relation(jCas); r6.setBegin(r1.getBegin());
br.setType(relation.getRelationshipType()); br.setSubType(relation.getRelationSubType()); br.setValue(relation.getValue()); br.setBegin(relation.getBegin()); br.setEnd(relation.getEnd()); final Entity source = relation.getSource(); if (source != null) { final String sourceId = idGenerator.generateForExternalId(source.getExternalId()); br.setSource(mentions.get(sourceId)); final Entity target = relation.getTarget(); if (target != null) { final String targetId = idGenerator.generateForExternalId(target.getExternalId());
/** * @generated * @param jcas JCas to which this Feature Structure belongs * @param begin offset to the begin spot in the SofA * @param end offset to the end spot in the SofA */ public Relation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); }
@Override protected String print(Relation t) { final StringBuilder sb = new StringBuilder(); writeLine(sb, "Value", t.getValue()); writeLine(sb, "Type", t.getRelationshipType() + " [" + t.getRelationSubType() + "]"); writeLine(sb, "Source", t.getSource()); writeLine(sb, "Target", t.getTarget()); return sb.toString(); } }
private Relation createRelation(JCas jCas, Entity e1, Entity e2) { final Relation p2l = new Relation(jCas); p2l.setSource(e2); p2l.setTarget(e1); p2l.setRelationshipType("from"); p2l.addToIndexes(); return p2l; } }
Relation r = new Relation(jCas); r.setBegin(6); r.setEnd(13); r.setValue("went to"); r.setSource(p); r.setTarget(l); r.setRelationshipType("AT"); r.setConfidence(0.7); r.setSentenceDistance(0); r.setWordDistance(10); r.setDependencyDistance(-1); r.addToIndexes(); assertEquals(r.getBegin(), relation.get(FIELD_BEGIN)); assertEquals(r.getEnd(), relation.get(FIELD_END)); assertEquals(r.getConfidence(), relation.get(FIELD_CONFIDENCE)); assertEquals(p.getValue(), relation.get(FIELD_SOURCE_VALUE)); assertEquals(p.getType().getShortName(), relation.get(FIELD_SOURCE_TYPE)); assertEquals(l.getType().getName(), relation.get(FIELD_TARGET_TYPE_FULL)); assertEquals(l.getExternalId(), relation.get(FIELD_TARGET)); assertEquals(r.getRelationshipType(), relation.get(FIELD_RELATIONSHIP_TYPE)); assertEquals(r.getRelationSubType(), relation.get(FIELD_RELATIONSHIP_SUBTYPE)); assertEquals(r.getSentenceDistance(), relation.get(FIELD_SENTENCE_DISTANCE)); assertEquals(1.0, (double) relation.get(FIELD_NORMAL_SENTENCE_DISTANCE), 0.001); assertEquals(r.getWordDistance(), relation.get(FIELD_WORD_DISTANCE)); assertEquals(1.0 / 11, (double) relation.get(FIELD_NORMAL_WORD_DISTANCE), 0.001); assertEquals(-1, relation.get(FIELD_DEPENDENCY_DISTANCE));
Person p2 = Annotations.createPerson(jCas, 10, 20, "target"); Relation r1 = new Relation(jCas); r1.setBegin(0); r1.setEnd(4); r1.setValue("test"); r1.setSource(p1); r1.setTarget(p2); r1.addToIndexes(jCas); Relation r2 = new Relation(jCas); r2.setBegin(0); r2.setEnd(4); r2.setValue("test"); r2.setSource(p1); r2.setTarget(p2); r2.addToIndexes(jCas); assertEquals(r1.getExternalId(), r2.getExternalId()); Graph graph = GraphFactory.open(propertiesFile.getAbsolutePath()); assertTrue(graph.traversal().E(r1.getExternalId()).hasNext());
final Relation r1 = new Relation(jCas); r1.setBegin(2); r1.setEnd(4); r1.setRelationshipType("r1Type"); r1.setRelationSubType("r1SubType"); r1.setValue("r1Value"); r1.setSource(e1); r1.setTarget(e4); r1.addToIndexes(); final Relation r2 = new Relation(jCas); r2.setBegin(2); r2.setEnd(4); r2.setRelationshipType("r2Type"); r2.setRelationSubType("r2SubType"); r2.setValue("r2Value"); r2.setSource(e2); r2.setTarget(e5); r2.addToIndexes(); final Relation r2Duplicate = new Relation(jCas); r2Duplicate.setBegin(2); r2Duplicate.setEnd(4); r2Duplicate.setRelationshipType("r2Type"); r2Duplicate.setRelationSubType("r2SubType"); r2Duplicate.setValue("r2Value"); r2Duplicate.setSource(e2); r2Duplicate.setTarget(e5); r2Duplicate.addToIndexes();
.append(fields.getExternalId(), r.getExternalId()) .append(FIELD_RELATIONSHIP_TYPE, r.getRelationshipType()) .append(FIELD_RELATIONSHIP_SUBTYPE, r.getRelationSubType()) .append(FIELD_SOURCE_VALUE, r.getSource().getValue()) .append(FIELD_SOURCE_TYPE, r.getSource().getType().getShortName()) .append(FIELD_SOURCE_TYPE_FULL, r.getSource().getType().getName()) .append(FIELD_VALUE, r.getValue()) .append(FIELD_TARGET_VALUE, r.getTarget().getValue()) .append(FIELD_TARGET_TYPE, r.getTarget().getType().getShortName()) .append(FIELD_TARGET_TYPE_FULL, r.getTarget().getType().getName()) .append(FIELD_SENTENCE, sentence) .append(FIELD_DOCUMENT_ID, documentId) .append(FIELD_SOURCE, r.getSource().getExternalId()) .append(FIELD_TARGET, r.getTarget().getExternalId()) .append(FIELD_BEGIN, r.getBegin()) .append(FIELD_END, r.getEnd()) .append(FIELD_CONFIDENCE, r.getConfidence()) .append(FIELD_SENTENCE_DISTANCE, r.getSentenceDistance()) .append(FIELD_NORMAL_SENTENCE_DISTANCE, normalize(r.getSentenceDistance())) .append(FIELD_WORD_DISTANCE, r.getWordDistance()) .append(FIELD_NORMAL_WORD_DISTANCE, normalize(r.getWordDistance())) .append(FIELD_DEPENDENCY_DISTANCE, r.getDependencyDistance()) .append( FIELD_NORMAL_DEPENDENCY_DISTANCE, normalize(r.getDependencyDistance()));
@Test public void testStructureSentenceGivesRelation() throws AnalysisEngineProcessException, ResourceInitializationException { jCas.setDocumentText("Jon, at last, visits London."); final Person person = Annotations.createPerson(jCas, 0, 3, "Jon"); final Location location = Annotations.createLocation(jCas, 21, 27, "London", ""); final uk.gov.dstl.baleen.types.structure.Sentence s = new uk.gov.dstl.baleen.types.structure.Sentence(jCas); s.setBegin(0); s.setEnd(jCas.getDocumentText().length()); s.addToIndexes(); addWordTokens(); processJCas(SentenceRelationshipAnnotator.PARAM_VALUE_STRATEGY, ValueStrategy.BETWEEN); final List<Relation> relations = new ArrayList<>(JCasUtil.select(jCas, Relation.class)); assertEquals(1, relations.size()); final Relation r = relations.get(0); assertEquals(person, r.getSource()); assertEquals(location, r.getTarget()); assertEquals("", r.getRelationshipType()); assertEquals(", at last, visits", r.getValue()); assertEquals(0, r.getSentenceDistance()); assertEquals(5, r.getWordDistance()); assertEquals(-1, r.getDependencyDistance()); }
@Test public void test2() throws UIMAException { createPOS(); Person person = new Person(jCas, 0, 1); // H person.addToIndexes(); Money money = new Money(jCas, 59, 71); // $1.8 billion money.addToIndexes(); Temporal date = new Temporal(jCas, 75, 84); // September date.addToIndexes(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Relation.class).size()); Relation r1 = JCasUtil.selectByIndex(jCas, Relation.class, 0); assertEquals("reckons", r1.getValue()); assertEquals(person, r1.getSource()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r1.getTarget().getTypeName()); assertEquals("the current account deficit", r1.getTarget().getCoveredText()); Relation r2 = JCasUtil.selectByIndex(jCas, Relation.class, 1); assertEquals("will narrow to", r2.getValue()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r2.getSource().getTypeName()); assertEquals("the current account deficit", r2.getSource().getCoveredText()); assertEquals(money, r2.getTarget()); }
@Test public void testRegExRelationExtraction() throws AnalysisEngineProcessException, ResourceInitializationException { jCas.setDocumentText("Jon visits London. Steve visited Cheltenham"); final Person jon = Annotations.createPerson(jCas, 0, 3, "Jon"); final Person steve = Annotations.createPerson(jCas, 19, 24, "Steve"); final Location london = Annotations.createLocation(jCas, 11, 17, "London", ""); final Location cheltenham = Annotations.createLocation(jCas, 33, 43, "Cheltenham", ""); processJCas( PARAM_PATTERN, "(:Person:)\\s+(?:visit\\w*|went)\\s+(:Location:)", PARAM_TYPE, LOCATED_AT); final List<Relation> relations = new ArrayList<>(JCasUtil.select(jCas, Relation.class)); assertEquals(2, relations.size()); final Relation jlr = findRelationBetween(relations, jon, london); final Relation scr = findRelationBetween(relations, steve, cheltenham); assertEquals(LOCATED_AT, jlr.getRelationshipType()); assertEquals("Jon visits London", jlr.getValue()); assertEquals(0, jlr.getBegin()); assertEquals(17, jlr.getEnd()); assertEquals("", jlr.getRelationSubType()); assertEquals(LOCATED_AT, scr.getRelationshipType()); assertEquals("", scr.getRelationSubType()); assertEquals("Steve visited Cheltenham", scr.getValue()); assertEquals(19, scr.getBegin()); assertEquals(43, scr.getEnd()); }
assertTrue( traversal .E(r.getExternalId()) .hasLabel(RELATION) .has("relationshipType", r.getRelationshipType()) .has("value", r.getValue()) .not(has("begin")) .not(has("end"))
/** * Merge entity onto targetEntity (assuming they have the same ReferentTarget), updating * relationships as required. * * @return True if merge was successful, false otherwise */ private boolean mergeEntities(Entity entity, Entity targetEntity) { ReferenceTarget targetRef = targetEntity.getReferent(); ReferenceTarget entityRef = entity.getReferent(); if (mergeDistinctEntities || isSameTarget(targetRef, entityRef)) { addMergeToHistory(targetEntity, entity); // Update relationship pointers for (Relation r : getRelations(entity)) { if (r.getSource() == entity) { r.setSource(targetEntity); } if (r.getTarget() == entity) { r.setTarget(targetEntity); } } remove(entity); return true; } else { monitor.debug( "Not merging objects {} and {} as they have different referents", targetEntity.getInternalId(), entity.getInternalId()); return false; } }
private boolean assertRelation(Relation r, Entity a, Entity b, String type) { return (r.getSource() == a && r.getTarget() == b || r.getSource() == b && r.getTarget() == a) && r.getRelationshipType().equalsIgnoreCase(type); } }
/** * Get relations that have a given entity as either the source or the target * * @param e The given entity * @return Collection of relations that refer to the given Entity */ public Collection<Relation> getRelations(Entity e) { try { JCas jCas = e.getCAS().getJCas(); Collection<Relation> relations = JCasUtil.select(jCas, Relation.class); return relations .stream() .filter(r -> r.getSource() == e || r.getTarget() == e) .collect(Collectors.toList()); } catch (UIMAException ue) { monitor.warn("Unable to get relations from entity", ue); return Collections.emptyList(); } } }
source, sentence, r.getRelationshipType(), r.getRelationSubType(), normalize(r.getSource().getValue()), normalize(r.getTarget().getValue()), normalize(r.getSource().getCoveredText()), normalize(r.getTarget().getCoveredText()), r.getSource().getType().getShortName(), r.getTarget().getType().getShortName(), Double.toString(r.getConfidence()) }; })