Skip to content

Commit

Permalink
Merge pull request #219 from biothings/semmed-sentences
Browse files Browse the repository at this point in the history
properly merge semmedb sentences
  • Loading branch information
colleenXu authored Oct 20, 2024
2 parents 6cefe98 + d025d30 commit 3a3c6de
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/graph/kg_edge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ export default class KGEdge {
addAdditionalAttributes(name: string, value: string | string[] | TrapiAttribute[]): void {
// special handling for full edge attributes
if (name === 'edge-attributes') {
this.attributes[name] = value as TrapiAttribute[];
if (this.attributes[name]) this.attributes[name] = [...this.attributes[name], ...value as TrapiAttribute[]];
else this.attributes[name] = value as TrapiAttribute[];
return;
}

Expand Down
26 changes: 26 additions & 0 deletions src/graph/knowledge_graph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -166,9 +166,35 @@ export default class KnowledgeGraph {
});

//handle TRAPI APIs (Situation A of https://github.com/biothings/BioThings_Explorer_TRAPI/issues/208) and APIs that define 'edge-atributes' in x-bte
const seenPmids = new Set();
kgEdge.attributes['edge-attributes']?.forEach((attribute) => {
// Do not add multiple SemmedDB sentences/other "supporting study results" from the same publication
if (attribute.attribute_type_id === "biolink:has_supporting_study_result" && attribute?.attributes?.find((attr) => attr.attribute_type_id === "biolink:publications")) {
const publication = attribute.attributes.find((attr) => attr.attribute_type_id === "biolink:publications").value;
// publication has been seen or cap reached
if (seenPmids.has(publication) || seenPmids.size >= 50) {
seenPmids.add(publication);
return;
}
seenPmids.add(publication);
}

attributes.push(attribute);
});

// update evidence count after PMIDs have been merged (for SemmedDB)
if (seenPmids.size != 0) {
const evidenceAttr = attributes.find(attr => attr.attribute_type_id === 'biolink:evidence_count');
if (evidenceAttr) {
evidenceAttr.value = seenPmids.size;
} else {
attributes.push({
attribute_type_id: 'biolink:evidence_count',
value: seenPmids.size,
});
}
}

return attributes;
}

Expand Down

0 comments on commit 3a3c6de

Please sign in to comment.