ipymarkup

Collection of NLP vizualizations for NER and syntax tree markup. Similar to Spacy displaCy and displaCy ENT.

In [1]:
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

NER

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

In [2]:
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

In [3]:
from ipymarkup import show_span_box_markup

show_span_box_markup(text, spans)
В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис ХелмбрехтPER - управляющий директор и совладелец креативного агентства Kollektiv (ГерманияLOC, СШАLOC), Ннека УгбомаPER - руководитель проекта Mushroom works (ВеликобританияLOC), Гергей КовачPER - политик и лидер субкультурной партии «Dog with two tailsORG» (ВенгрияLOC), Георг ЖеноPER - немецкий режиссёр, один из создателей экспериментального театра «Театр.doc», Театра им.ORG Йозефа БойсаPER (ГерманияLOC).

To assign specific colors use ipymarkup.palette:

In [4]:
from ipymarkup.palette import palette, BLUE, RED, GREEN

show_span_box_markup(text, spans, palette=palette(PER=BLUE, ORG=RED, LOC=GREEN))
В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис ХелмбрехтPER - управляющий директор и совладелец креативного агентства Kollektiv (ГерманияLOC, СШАLOC), Ннека УгбомаPER - руководитель проекта Mushroom works (ВеликобританияLOC), Гергей КовачPER - политик и лидер субкультурной партии «Dog with two tailsORG» (ВенгрияLOC), Георг ЖеноPER - немецкий режиссёр, один из создателей экспериментального театра «Театр.doc», Театра им.ORG Йозефа БойсаPER (ГерманияLOC).

show_span_line_markup

In [5]:
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)
В мероприятии примут участие не только российские учёные, но и зарубежные
исследователи, в том числе, Крис Хелмбрехт - PERSONуправляющий директорPERSONPROPERTY и совладелец PERSONPROPERTY
креативного агентства Kollektiv (ORGANIZATIONГерманияGEO, СШАGEO), Ннека Угбома - PERSONруководитель PERSONPROPERTY
проекта Mushroom works (ВеликобританияGEO), Гергей Ковач - политик и лидер PERSONPROPERTY
субкультурной партии «Dog with two tails» (ORGANIZATIONВенгрияGEO), Георг Жено - PERSONнемецкий PERSONPROPERTY
режиссёр, один из создателей экспериментального театра «Театр.doc»ORGANIZATION, Театра им. ORGANIZATION
Йозефа Бойса (ГерманияGEO).

To make all colors blue, initialize palette with single color:

In [6]:
show_span_line_markup(text, spans, palette=palette(BLUE))
В мероприятии примут участие не только российские учёные, но и зарубежные
исследователи, в том числе, Крис Хелмбрехт - PERSONуправляющий директорPERSONPROPERTY и совладелец PERSONPROPERTY
креативного агентства Kollektiv (ORGANIZATIONГерманияGEO, СШАGEO), Ннека Угбома - PERSONруководитель PERSONPROPERTY
проекта Mushroom works (ВеликобританияGEO), Гергей Ковач - политик и лидер PERSONPROPERTY
субкультурной партии «Dog with two tails» (ORGANIZATIONВенгрияGEO), Георг Жено - PERSONнемецкий PERSONPROPERTY
режиссёр, один из создателей экспериментального театра «Театр.doc»ORGANIZATION, Театра им. ORGANIZATION
Йозефа Бойса (ГерманияGEO).

show_span_ascii_markup

In [7]:
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:

In [8]:
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)
0123b456789c
0123b456789c
0123456789
 ─ b ─ ─ c

Syntax tree

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

In [9]:
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)
caseВ amodсоветский oblпериод nmodвремени objчисло compoundИТ punct- nmodспециалистов caseв nmodАрмении составляло caseоколо nummodдесяти nsubjтысяч punct.

show_dep_ascii_markup

In [10]:
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:

In [11]:
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 bcc cdd ee
  ┌───┌─ aa 
┌─│ ┌─└► bb 
│ └►└──► cc b
└────►┌─ dd c
      └► ee 

Cookbook

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:

In [12]:
from ipymarkup import format_dep_ascii_markup

list(format_dep_ascii_markup(words, deps))
Out[12]:
['  ┌───┌─ aa ',
 '┌─│ ┌─└► bb ',
 '│ └►└──► cc b',
 '└────►┌─ dd c',
 '      └► ee ']

Same for show_span_box_markup and format_span_box_markup:

In [13]:
from ipymarkup import format_span_box_markup

list(format_span_box_markup(text, spans))
Out[13]:
['<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>']
In [ ]: