mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-25 17:36:30 +03:00
a79cd3542b
* Fix docstring for EntityRenderer * Add warning in displacy if doc.spans are empty * Implement parse_spans converter One notable change here is that the default spans_key is sc, and it's set by the user through the options. * Implement SpanRenderer Here, I implemented a SpanRenderer that looks similar to the EntityRenderer except for some templates. The spans_key, by default, is set to sc, but can be configured in the options (see parse_spans). The way I rendered these spans is per-token, i.e., I first check if each token (1) belongs to a given span type and (2) a starting token of a given span type. Once I have this information, I render them into the markup. * Fix mypy issues on typing * Add tests for displacy spans support * Update colors from RGB to hex Co-authored-by: Ines Montani <ines@ines.io> * Remove unnecessary CSS properties * Add documentation for website * Remove unnecesasry scripts * Update wording on the documentation Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com> * Put typing dependency on top of file * Put back z-index so that spans overlap properly * Make warning more explicit for spans_key Co-authored-by: Ines Montani <ines@ines.io> Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
130 lines
4.5 KiB
Python
130 lines
4.5 KiB
Python
# Setting explicit height and max-width: none on the SVG is required for
|
|
# Jupyter to render it properly in a cell
|
|
|
|
TPL_DEP_SVG = """
|
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="{lang}" id="{id}" class="displacy" width="{width}" height="{height}" direction="{dir}" style="max-width: none; height: {height}px; color: {color}; background: {bg}; font-family: {font}; direction: {dir}">{content}</svg>
|
|
"""
|
|
|
|
|
|
TPL_DEP_WORDS = """
|
|
<text class="displacy-token" fill="currentColor" text-anchor="middle" y="{y}">
|
|
<tspan class="displacy-word" fill="currentColor" x="{x}">{text}</tspan>
|
|
<tspan class="displacy-tag" dy="2em" fill="currentColor" x="{x}">{tag}</tspan>
|
|
</text>
|
|
"""
|
|
|
|
|
|
TPL_DEP_WORDS_LEMMA = """
|
|
<text class="displacy-token" fill="currentColor" text-anchor="middle" y="{y}">
|
|
<tspan class="displacy-word" fill="currentColor" x="{x}">{text}</tspan>
|
|
<tspan class="displacy-lemma" dy="2em" fill="currentColor" x="{x}">{lemma}</tspan>
|
|
<tspan class="displacy-tag" dy="2em" fill="currentColor" x="{x}">{tag}</tspan>
|
|
</text>
|
|
"""
|
|
|
|
|
|
TPL_DEP_ARCS = """
|
|
<g class="displacy-arrow">
|
|
<path class="displacy-arc" id="arrow-{id}-{i}" stroke-width="{stroke}px" d="{arc}" fill="none" stroke="currentColor"/>
|
|
<text dy="1.25em" style="font-size: 0.8em; letter-spacing: 1px">
|
|
<textPath xlink:href="#arrow-{id}-{i}" class="displacy-label" startOffset="50%" side="{label_side}" fill="currentColor" text-anchor="middle">{label}</textPath>
|
|
</text>
|
|
<path class="displacy-arrowhead" d="{head}" fill="currentColor"/>
|
|
</g>
|
|
"""
|
|
|
|
|
|
TPL_FIGURE = """
|
|
<figure style="margin-bottom: 6rem">{content}</figure>
|
|
"""
|
|
|
|
TPL_TITLE = """
|
|
<h2 style="margin: 0">{title}</h2>
|
|
"""
|
|
|
|
|
|
TPL_ENTS = """
|
|
<div class="entities" style="line-height: 2.5; direction: {dir}">{content}</div>
|
|
"""
|
|
|
|
|
|
TPL_ENT = """
|
|
<mark class="entity" style="background: {bg}; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
|
|
{text}
|
|
<span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">{label}{kb_link}</span>
|
|
</mark>
|
|
"""
|
|
|
|
TPL_ENT_RTL = """
|
|
<mark class="entity" style="background: {bg}; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em">
|
|
{text}
|
|
<span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-right: 0.5rem">{label}{kb_link}</span>
|
|
</mark>
|
|
"""
|
|
|
|
TPL_SPANS = """
|
|
<div class="spans" style="line-height: 2.5; direction: {dir}">{content}</div>
|
|
"""
|
|
|
|
TPL_SPAN = """
|
|
<span style="font-weight: bold; display: inline-block; position: relative;">
|
|
{text}
|
|
{span_slices}
|
|
{span_starts}
|
|
</span>
|
|
"""
|
|
|
|
TPL_SPAN_SLICE = """
|
|
<span style="background: {bg}; top: {top_offset}px; height: 4px; left: -1px; width: calc(100% + 2px); position: absolute;">
|
|
</span>
|
|
"""
|
|
|
|
|
|
TPL_SPAN_START = """
|
|
<span style="background: {bg}; top: {top_offset}px; height: 4px; border-top-left-radius: 3px; border-bottom-left-radius: 3px; left: -1px; width: calc(100% + 2px); position: absolute;">
|
|
<span style="background: {bg}; z-index: 10; color: #000; top: -0.5em; padding: 2px 3px; position: absolute; font-size: 0.6em; font-weight: bold; line-height: 1; border-radius: 3px">
|
|
{label}{kb_link}
|
|
</span>
|
|
</span>
|
|
|
|
"""
|
|
|
|
TPL_SPAN_RTL = """
|
|
<span style="font-weight: bold; display: inline-block; position: relative;">
|
|
{text}
|
|
{span_slices}
|
|
{span_starts}
|
|
</span>
|
|
"""
|
|
|
|
TPL_SPAN_SLICE_RTL = """
|
|
<span style="background: {bg}; top: {top_offset}px; height: 4px; left: -1px; width: calc(100% + 2px); position: absolute;">
|
|
</span>
|
|
"""
|
|
|
|
TPL_SPAN_START_RTL = """
|
|
<span style="background: {bg}; top: {top_offset}px; height: 4px; border-top-left-radius: 3px; border-bottom-left-radius: 3px; left: -1px; width: calc(100% + 2px); position: absolute;">
|
|
<span style="background: {bg}; z-index: 10; color: #000; top: -0.5em; padding: 2px 3px; position: absolute; font-size: 0.6em; font-weight: bold; line-height: 1; border-radius: 3px">
|
|
{label}{kb_link}
|
|
</span>
|
|
</span>
|
|
"""
|
|
|
|
|
|
# Important: this needs to start with a space!
|
|
TPL_KB_LINK = """
|
|
<a style="text-decoration: none; color: inherit; font-weight: normal" href="{kb_url}">{kb_id}</a>
|
|
"""
|
|
|
|
|
|
TPL_PAGE = """
|
|
<!DOCTYPE html>
|
|
<html lang="{lang}">
|
|
<head>
|
|
<title>displaCy</title>
|
|
</head>
|
|
|
|
<body style="font-size: 16px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; padding: 4rem 2rem; direction: {dir}">{content}</body>
|
|
</html>
|
|
"""
|