{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ipymarkup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Collection of NLP vizualizations for NER and syntax tree markup. Similar to Spacy displaCy and displaCy ENT." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
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\n",
       "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\n",
       "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\n",
       "a────────────   c──── f  \n",
       "  d──────────────────────\n",
       "      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\n",
       "a──────────────────────────\n",
       "  b── c── d e f g h── i──  
show_dep_markup
show_dep_ascii_markup
302010aaaaa 312101bbbbb 023212ccccc 031323ddddd
┌►┌─────┌►┌─────┌►┌─ aaaaa 10\n",
       "│ │ ┌►┌─│ │ ┌►┌─└─└► bbbbb 01\n",
       "│ │ │ │ └─└►└─└──►┌─ ccccc 12\n",
       "└─└►└─└──►└───────└► ddddd 23
eaaaa abcbbbb dcccc adddd geeee gffff agggg
┌─┌►┌───┌─ aaa ea\n",
       "│ │ │ ┌►└► bbb ab\n",
       "│ │ │ └─┌► ccc dc\n",
       "│ │ └──►└─ ddd ad\n",
       "│ └───┌──► eee ge\n",
       "│     │ ┌► fff gf\n",
       "└────►└─└─ ggg ag
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipymarkup.demo import show_table\n", "show_table()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## NER" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All NER markup visualization functions have two arguments as input: `text` and `spans`. `spans` are tuples of `start`, `stop` and optional `type`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `show_span_ascii_markup`" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "В мероприятии примут участие не только российские учёные, но и \n", "зарубежные исследователи, в том числе, Крис Хелмбрехт - управляющий \n", " PER─────────── \n", "директор и совладелец креативного агентства Kollektiv (Германия, США),\n", " LOC───── LOC \n", " Ннека Угбома - руководитель проекта Mushroom works (Великобритания), \n", " PER───────── LOC─────────── \n", "Гергей Ковач - политик и лидер субкультурной партии «Dog with two \n", "PER───────── ORG──────────\n", "tails» (Венгрия), Георг Жено - немецкий режиссёр, один из создателей \n", "───── LOC──── PER─────── \n", "экспериментального театра «Театр.doc», Театра им. Йозефа Бойса \n", " ORG─────── PER───────── \n", "(Германия).\n", " LOC───── \n" ] } ], "source": [ "from ipymarkup import show_span_ascii_markup\n", "\n", "text = 'В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис Хелмбрехт - управляющий директор и совладелец креативного агентства Kollektiv (Германия, США), Ннека Угбома - руководитель проекта Mushroom works (Великобритания), Гергей Ковач - политик и лидер субкультурной партии «Dog with two tails» (Венгрия), Георг Жено - немецкий режиссёр, один из создателей экспериментального театра «Театр.doc», Театра им. Йозефа Бойса (Германия).'\n", "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')]\n", "\n", "show_span_ascii_markup(text, spans)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `show_span_box_markup`" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис ХелмбрехтPER - управляющий директор и совладелец креативного агентства Kollektiv (ГерманияLOC, СШАLOC), Ннека УгбомаPER - руководитель проекта Mushroom works (ВеликобританияLOC), Гергей КовачPER - политик и лидер субкультурной партии «Dog with two tailsORG» (ВенгрияLOC), Георг ЖеноPER - немецкий режиссёр, один из создателей экспериментального театра «Театр.doc», Театра им.ORG Йозефа БойсаPER (ГерманияLOC).
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipymarkup import show_span_box_markup\n", "\n", "show_span_box_markup(text, spans)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To assign specific colors use `ipymarkup.palette`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
В мероприятии примут участие не только российские учёные, но и зарубежные исследователи, в том числе, Крис ХелмбрехтPER - управляющий директор и совладелец креативного агентства Kollektiv (ГерманияLOC, СШАLOC), Ннека УгбомаPER - руководитель проекта Mushroom works (ВеликобританияLOC), Гергей КовачPER - политик и лидер субкультурной партии «Dog with two tailsORG» (ВенгрияLOC), Георг ЖеноPER - немецкий режиссёр, один из создателей экспериментального театра «Театр.doc», Театра им.ORG Йозефа БойсаPER (ГерманияLOC).
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipymarkup.palette import palette, BLUE, RED, GREEN\n", "\n", "show_span_box_markup(text, spans, palette=palette(PER=BLUE, ORG=RED, LOC=GREEN))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `show_span_line_markup`" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
В мероприятии примут участие не только российские учёные, но и зарубежные
исследователи, в том числе, Крис Хелмбрехт - 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).
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipymarkup import show_span_line_markup\n", "\n", "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')]\n", "show_span_line_markup(text, spans)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make all colors blue, initialize palette with single color:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
В мероприятии примут участие не только российские учёные, но и зарубежные
исследователи, в том числе, Крис Хелмбрехт - 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).
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_span_line_markup(text, spans, palette=palette(BLUE))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `show_span_ascii_markup`" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "В мероприятии примут участие не только российские учёные, но и \n", "зарубежные исследователи, в том числе, Крис Хелмбрехт - управляющий \n", " PERSON───────────────────────\n", " PERSONPROPER\n", "директор и совладелец креативного агентства Kollektiv (Германия, США),\n", "───────────────────────────────────────────────────────────────────── \n", "──────── PERSONPROPERTY──────────────────────────────────────────── \n", " ORGANIZATION─────────────────────────────────── \n", " GEO───── GEO \n", " Ннека Угбома - руководитель проекта Mushroom works (Великобритания), \n", " PERSON──────────────────────────────────────────── GEO─────────── \n", " PERSONPROPERTY───────────────────── \n", "Гергей Ковач - политик и лидер субкультурной партии «Dog with two \n", " PERSONPROPERTY───────────────────────────\n", " ORGANIZATION───────────────────────\n", "tails» (Венгрия), Георг Жено - немецкий режиссёр, один из создателей \n", "──────────────── PERSON──────────────────────── \n", "──────────────── PERSONPROPERTY─── \n", " GEO──── \n", "экспериментального театра «Театр.doc», Театра им. Йозефа Бойса \n", "ORGANIZATION───────────────────────── ORGANIZATION────────────\n", "(Германия).\n", "────────── \n", " GEO───── \n" ] } ], "source": [ "show_span_ascii_markup(text, spans)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `spans`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For convenience `span` objects can be tuples, dicts or objects:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
0123b456789c
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
0123b456789c
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0123456789\n", " ─ b ─ ─ c\n" ] } ], "source": [ "class C(object):\n", " def __init__(self, start, stop, type=None):\n", " self.start = start\n", " self.stop = stop\n", " self.type = type\n", " \n", " \n", "text = '0123456789'\n", "spans = [\n", " (1, 2), # tuple/list (int, int)\n", " (3, 4, 'b'), # tuple/list (int, int, str)\n", " [5, 6],\n", " C(7, 8),\n", " C(9, 10, 'c') # object with start, stop, type attributes\n", "]\n", "show_span_box_markup(text, spans)\n", "show_span_line_markup(text, spans)\n", "show_span_ascii_markup(text, spans)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Syntax tree" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Syntax tree visualization functions have two arguments as input: `words` and `deps`. `words` are strings, `deps` — list of tuples `source`, `target` and optional `type`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `show_dep_markup`" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
caseВ amodсоветский oblпериод nmodвремени objчисло compoundИТ punct- nmodспециалистов caseв nmodАрмении составляло caseоколо nummodдесяти nsubjтысяч punct.
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipymarkup import show_dep_markup\n", "\n", "words = ['В', 'советский', 'период', 'времени', 'число', 'ИТ', '-', 'специалистов', 'в', 'Армении', 'составляло', 'около', 'десяти', 'тысяч', '.']\n", "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')]\n", "show_dep_markup(words, deps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `show_dep_ascii_markup`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " ┌──► В case\n", " │ ┌► советский amod\n", "┌──────►└─└─ период obl\n", "│ └──► времени nmod\n", "│ ┌►┌─┌───── число obj\n", "│ │ │ │ ┌►┌─ ИТ compound\n", "│ │ │ │ │ └► - punct\n", "│ │ │ └►└─── специалистов nmod\n", "│ │ │ ┌► в case\n", "│ │ └────►└─ Армении nmod\n", "└─└─┌─┌───── составляло \n", " │ │ ┌──► около case\n", " │ │ │ ┌► десяти nummod\n", " │ └►└─└─ тысяч nsubj\n", " └──────► . punct\n" ] } ], "source": [ "from ipymarkup import show_dep_ascii_markup\n", "\n", "words = ['В', 'советский', 'период', 'времени', 'число', 'ИТ', '-', 'специалистов', 'в', 'Армении', 'составляло', 'около', 'десяти', 'тысяч', '.']\n", "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')]\n", "show_dep_ascii_markup(words, deps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `deps`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For convenience `dep` objects can be tuples, dicts or objects. Same as `spans` in NER visualizations:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
aa bb bcc cdd ee
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " ┌───┌─ aa \n", "┌─│ ┌─└► bb \n", "│ └►└──► cc b\n", "└────►┌─ dd c\n", " └► ee \n" ] } ], "source": [ "class C(object):\n", " def __init__(self, source, target, type=None):\n", " self.source = source\n", " self.target = target\n", " self.type = type\n", " \n", " \n", "words = 'aa bb cc dd ee'.split()\n", "deps = [\n", " (0, 1),\n", " (1, 2, 'b'),\n", " [3, 4],\n", " C(0, 2),\n", " C(1, 3, 'c')\n", "]\n", "show_dep_markup(words, deps)\n", "show_dep_ascii_markup(words, deps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cookbook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `format_*` functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[' ┌───┌─ aa ',\n", " '┌─│ ┌─└► bb ',\n", " '│ └►└──► cc b',\n", " '└────►┌─ dd c',\n", " ' └► ee ']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ipymarkup import format_dep_ascii_markup\n", "\n", "list(format_dep_ascii_markup(words, deps))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Same for `show_span_box_markup` and `format_span_box_markup`:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['
',\n", " '0',\n", " '',\n", " '1',\n", " '',\n", " '2',\n", " '',\n", " '3',\n", " '',\n", " 'b',\n", " '',\n", " '',\n", " '4',\n", " '',\n", " '5',\n", " '',\n", " '6',\n", " '',\n", " '7',\n", " '',\n", " '8',\n", " '',\n", " '9',\n", " '',\n", " 'c',\n", " '',\n", " '',\n", " '',\n", " '
']" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ipymarkup import format_span_box_markup\n", "\n", "list(format_span_box_markup(text, spans))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 2 }