Spaces:
Running
Running
/** | |
* Indicates position of spans of text inside the string. | |
* (for visual applications only, no semantic sense here.) | |
*/ | |
interface Span { | |
type: string; | |
start: number; | |
end: number; | |
} | |
class Displacy { | |
/** | |
* Render a text string and its entity spans | |
* | |
* *see displacy-ent.js* | |
*/ | |
static render(text: string, spans: Span[]): string { | |
let out = { | |
__content: "", | |
append(s: string) { | |
this.__content += s; | |
} | |
}; | |
let offset = 0; | |
spans.forEach(({ type, start, end }) => { | |
const entity = text.slice(start, end); | |
const fragments = text.slice(offset, start).split('\n'); | |
fragments.forEach((fragment, i) => { | |
out.append(fragment); | |
if (fragments.length > 1 && i !== fragments.length - 1) { | |
out.append('<br>'); | |
} | |
}); | |
// Breaking change from displacy-ent.js: | |
// We do not filter any entity type out. | |
out.append(`<mark data-entity=${ type.toLowerCase() }>${ entity }</mark>`); | |
offset = end; | |
}); | |
out.append(text.slice(offset, text.length)); | |
return out.__content; | |
} | |
} | |