Collection of NLP vizualizations for NER and syntax tree markup. Similar to Spacy displaCy and displaCy ENT.
from ipymarkup.demo import show_table
show_table()
show_span_box_markup | show_span_line_markup | show_span_ascii_markup |
a a aa b bb c c cc | a a aa b bb c c cc | a a a b b c c c a──── b── c──── |
a a aa b bb cc ee d d dd f ff g gg hh | a a aa b bb cc ee d d dd f ff g gg hh | a a a b b c e d d d f f g g h a──── b── c e d──── f── g── h |
a d a b a a aad a b a a a b c c c f ddb a a a bb c c cc ff d | a ad a db a a ab b c c cc ff d | a d a b a a a b c c c f d a──────────── c──── f d────────────────────── b──────── |
a b b c c d e f g h h i i aab bb c cc dd ee ff gg h hh i ii a | a ab bb c cc dd ee ff gg h hh i ii a | a b b c c d e f g h h i i a a────────────────────────── b── c── d e f g h── i── |
show_dep_markup | show_dep_ascii_markup | |
302010aaaaa 312101bbbbb 023212ccccc 031323ddddd | ┌►┌─────┌►┌─────┌►┌─ aaaaa 10 │ │ ┌►┌─│ │ ┌►┌─└─└► bbbbb 01 │ │ │ │ └─└►└─└──►┌─ ccccc 12 └─└►└─└──►└───────└► ddddd 23 | |
eaaaa abcbbbb dcccc adddd geeee gffff agggg | ┌─┌►┌───┌─ aaa ea │ │ │ ┌►└► bbb ab │ │ │ └─┌► ccc dc │ │ └──►└─ ddd ad │ └───┌──► eee ge │ │ ┌► fff gf └────►└─└─ ggg ag |
All NER markup visualization functions have two arguments as input: text
and spans
. spans
are tuples of start
, stop
and optional type
.
show_span_ascii_markup
¶from ipymarkup import show_span_ascii_markup
text = 'В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис Хелмбрехт - управляющий директор и совладелец креативного агентства Kollektiv (Германия, США), Ннека Угбома - руководитель проекта Mushroom works (Великобритания), Гергей Ковач - политик и лидер субкультурной партии «Dog with two tails» (Венгрия), Георг Жено - немецкий режиссёр, один из создателей экспериментального театра «Театр.doc», Театра им. Йозефа Бойса (Германия).'
spans = [(102, 116, 'PER'), (186, 194, 'LOC'), (196, 199, 'LOC'), (202, 214, 'PER'), (254, 268, 'LOC'), (271, 283, 'PER'), (324, 342, 'ORG'), (345, 352, 'LOC'), (355, 365, 'PER'), (445, 455, 'ORG'), (456, 468, 'PER'), (470, 478, 'LOC')]
show_span_ascii_markup(text, spans)
В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис Хелмбрехт - управляющий PER─────────── директор и совладелец креативного агентства Kollektiv (Германия, США), LOC───── LOC Ннека Угбома - руководитель проекта Mushroom works (Великобритания), PER───────── LOC─────────── Гергей Ковач - политик и лидер субкультурной партии «Dog with two PER───────── ORG────────── tails» (Венгрия), Георг Жено - немецкий режиссёр, один из создателей ───── LOC──── PER─────── экспериментального театра «Театр.doc», Театра им. Йозефа Бойса ORG─────── PER───────── (Германия). LOC─────
show_span_box_markup
¶from ipymarkup import show_span_box_markup
show_span_box_markup(text, spans)
To assign specific colors use ipymarkup.palette
:
from ipymarkup.palette import palette, BLUE, RED, GREEN
show_span_box_markup(text, spans, palette=palette(PER=BLUE, ORG=RED, LOC=GREEN))
show_span_line_markup
¶from ipymarkup import show_span_line_markup
spans = [(102, 200, 'PERSON'), (119, 139, 'PERSONPROPERTY'), (142, 200, 'PERSONPROPERTY'), (153, 200, 'ORGANIZATION'), (186, 194, 'GEO'), (196, 199, 'GEO'), (202, 252, 'PERSON'), (217, 252, 'PERSONPROPERTY'), (254, 268, 'GEO'), (296, 353, 'PERSONPROPERTY'), (302, 353, 'ORGANIZATION'), (345, 352, 'GEO'), (355, 385, 'PERSON'), (368, 385, 'PERSONPROPERTY'), (406, 443, 'ORGANIZATION'), (445, 479, 'ORGANIZATION'), (470, 478, 'GEO')]
show_span_line_markup(text, spans)
To make all colors blue, initialize palette with single color:
show_span_line_markup(text, spans, palette=palette(BLUE))
show_span_ascii_markup
¶show_span_ascii_markup(text, spans)
В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис Хелмбрехт - управляющий PERSON─────────────────────── PERSONPROPER директор и совладелец креативного агентства Kollektiv (Германия, США), ───────────────────────────────────────────────────────────────────── ──────── PERSONPROPERTY──────────────────────────────────────────── ORGANIZATION─────────────────────────────────── GEO───── GEO Ннека Угбома - руководитель проекта Mushroom works (Великобритания), PERSON──────────────────────────────────────────── GEO─────────── PERSONPROPERTY───────────────────── Гергей Ковач - политик и лидер субкультурной партии «Dog with two PERSONPROPERTY─────────────────────────── ORGANIZATION─────────────────────── tails» (Венгрия), Георг Жено - немецкий режиссёр, один из создателей ──────────────── PERSON──────────────────────── ──────────────── PERSONPROPERTY─── GEO──── экспериментального театра «Театр.doc», Театра им. Йозефа Бойса ORGANIZATION───────────────────────── ORGANIZATION──────────── (Германия). ────────── GEO─────
spans
¶For convenience span
objects can be tuples, dicts or objects:
class C(object):
def __init__(self, start, stop, type=None):
self.start = start
self.stop = stop
self.type = type
text = '0123456789'
spans = [
(1, 2), # tuple/list (int, int)
(3, 4, 'b'), # tuple/list (int, int, str)
[5, 6],
C(7, 8),
C(9, 10, 'c') # object with start, stop, type attributes
]
show_span_box_markup(text, spans)
show_span_line_markup(text, spans)
show_span_ascii_markup(text, spans)
0123456789 ─ b ─ ─ c
Syntax tree visualization functions have two arguments as input: words
and deps
. words
are strings, deps
— list of tuples source
, target
and optional type
.
show_dep_markup
¶from ipymarkup import show_dep_markup
words = ['В', 'советский', 'период', 'времени', 'число', 'ИТ', '-', 'специалистов', 'в', 'Армении', 'составляло', 'около', 'десяти', 'тысяч', '.']
deps = [(2, 0, 'case'), (2, 1, 'amod'), (10, 2, 'obl'), (2, 3, 'nmod'), (10, 4, 'obj'), (7, 5, 'compound'), (5, 6, 'punct'), (4, 7, 'nmod'), (9, 8, 'case'), (4, 9, 'nmod'), (13, 11, 'case'), (13, 12, 'nummod'), (10, 13, 'nsubj'), (10, 14, 'punct')]
show_dep_markup(words, deps)
show_dep_ascii_markup
¶from ipymarkup import show_dep_ascii_markup
words = ['В', 'советский', 'период', 'времени', 'число', 'ИТ', '-', 'специалистов', 'в', 'Армении', 'составляло', 'около', 'десяти', 'тысяч', '.']
deps = [(2, 0, 'case'), (2, 1, 'amod'), (10, 2, 'obl'), (2, 3, 'nmod'), (10, 4, 'obj'), (7, 5, 'compound'), (5, 6, 'punct'), (4, 7, 'nmod'), (9, 8, 'case'), (4, 9, 'nmod'), (13, 11, 'case'), (13, 12, 'nummod'), (10, 13, 'nsubj'), (10, 14, 'punct')]
show_dep_ascii_markup(words, deps)
┌──► В case │ ┌► советский amod ┌──────►└─└─ период obl │ └──► времени nmod │ ┌►┌─┌───── число obj │ │ │ │ ┌►┌─ ИТ compound │ │ │ │ │ └► - punct │ │ │ └►└─── специалистов nmod │ │ │ ┌► в case │ │ └────►└─ Армении nmod └─└─┌─┌───── составляло │ │ ┌──► около case │ │ │ ┌► десяти nummod │ └►└─└─ тысяч nsubj └──────► . punct
deps
¶For convenience dep
objects can be tuples, dicts or objects. Same as spans
in NER visualizations:
class C(object):
def __init__(self, source, target, type=None):
self.source = source
self.target = target
self.type = type
words = 'aa bb cc dd ee'.split()
deps = [
(0, 1),
(1, 2, 'b'),
[3, 4],
C(0, 2),
C(1, 3, 'c')
]
show_dep_markup(words, deps)
show_dep_ascii_markup(words, deps)
┌───┌─ aa ┌─│ ┌─└► bb │ └►└──► cc b └────►┌─ dd c └► ee
format_*
functions¶To use visualizations outside of Jupyter notebook use format_*
function. For example show_dep_ascii_markup
has format_dep_ascii_markup
counterpart that return generator of strings:
from ipymarkup import format_dep_ascii_markup
list(format_dep_ascii_markup(words, deps))
[' ┌───┌─ aa ', '┌─│ ┌─└► bb ', '│ └►└──► cc b', '└────►┌─ dd c', ' └► ee ']
Same for show_span_box_markup
and format_span_box_markup
:
from ipymarkup import format_span_box_markup
list(format_span_box_markup(text, spans))
['<div class="tex2jax_ignore" style="white-space: pre-wrap">', '0', '<span style="padding: 2px; border-radius: 4px; border: 1px solid #ffe0b2; background: #fff3e0">', '1', '</span>', '2', '<span style="padding: 2px; border-radius: 4px; border: 1px solid #c8e6c9; background: #e8f5e9">', '3', '<span style="vertical-align: middle; margin-left: 2px; font-size: 0.7em; color: #66bb6a;">', 'b', '</span>', '</span>', '4', '<span style="padding: 2px; border-radius: 4px; border: 1px solid #ffe0b2; background: #fff3e0">', '5', '</span>', '6', '<span style="padding: 2px; border-radius: 4px; border: 1px solid #ffe0b2; background: #fff3e0">', '7', '</span>', '8', '<span style="padding: 2px; border-radius: 4px; border: 1px solid #ffcdd2; background: #ffebee">', '9', '<span style="vertical-align: middle; margin-left: 2px; font-size: 0.7em; color: #e57373;">', 'c', '</span>', '</span>', '', '</div>']