CINXE.COM

Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors – Digital Humanities Lab

<!DOCTYPE html> <html lang="de-DE" class="no-js"> <head><script type="text/javascript" src="https://web-static.archive.org/_static/js/bundle-playback.js?v=7YQSqjSh" charset="utf-8"></script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://dhlab.hypotheses.org/2191","20211030161402","https://web.archive.org/","web","https://web-static.archive.org/_static/", "1635610442"); </script> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/banner-styles.css?v=p7PEIJWi" /> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="profile" href="https://gmpg.org/xfn/11"> <link rel="pingback" href="https://dhlab.hypotheses.org/xmlrpc.php"> <script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <title>Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors &#8211; Digital Humanities Lab</title> <link rel="icon" type="image/png" href="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/images/favicon.png"/><link rel="dns-prefetch" href="//web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/"/> <link rel="dns-prefetch" href="//web.archive.org/web/20211030161402/https://fonts.googleapis.com/"/> <link rel="dns-prefetch" href="//web.archive.org/web/20211030161402/https://s.w.org/"/> <link href="https://web.archive.org/web/20211030161402/https://fonts.gstatic.com/" crossorigin rel="preconnect"/> <link rel="alternate" type="application/rss+xml" title="Digital Humanities Lab » Feed" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/feed"/> <link rel="alternate" type="application/rss+xml" title="Digital Humanities Lab » Kommentar-Feed" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/comments/feed"/> <link rel="alternate" type="application/rss+xml" title="Digital Humanities Lab » Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors Kommentar-Feed" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2191/feed"/> <script> window._wpemojiSettings = {"baseUrl":"https:\/\/web.archive.org\/web\/20211030161402\/https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/72x72\/","ext":".png","svgUrl":"https:\/\/web.archive.org\/web\/20211030161402\/https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/web.archive.org\/web\/20211030161402\/https:\/\/dhlab.hypotheses.org\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.6.2"}}; !function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([55357,56424,8205,55356,57212],[55357,56424,8203,55356,57212])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings); </script> <style> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 .07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel="stylesheet" id="wp-block-library-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-includes/css/dist/block-library/style.min.css?ver=5.6.2" media="all"/> <link rel="stylesheet" id="wp-block-library-theme-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-includes/css/dist/block-library/theme.min.css?ver=5.6.2" media="all"/> <link rel="stylesheet" id="wp-hal-style1-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/plugins/hal/css/style.css?ver=5.6.2" media="all"/> <link rel="stylesheet" id="pdf-viewer-block-styles-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/plugins/pdf-viewer-block/public/css/pdf-viewer-block.css?ver=5.6.2" media="all"/> <link rel="stylesheet" id="wp-syntax-css-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/plugins/wp-syntax/css/wp-syntax.css?ver=1.1" media="all"/> <link rel="stylesheet" id="twentysixteen-fonts-css" href="https://web.archive.org/web/20211030161402cs_/https://fonts.googleapis.com/css?family=Merriweather%3A400%2C700%2C900%2C400italic%2C700italic%2C900italic%7CMontserrat%3A400%2C700%7CInconsolata%3A400&amp;subset=latin%2Clatin-ext&amp;display=fallback" media="all"/> <link rel="stylesheet" id="genericons-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/genericons/genericons.css?ver=20201208" media="all"/> <link rel="stylesheet" id="twentysixteen-style-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/style.css?ver=20201208" media="all"/> <style id="twentysixteen-style-inline-css"> /* Custom Link Color */ .menu-toggle:hover, .menu-toggle:focus, a, .main-navigation a:hover, .main-navigation a:focus, .dropdown-toggle:hover, .dropdown-toggle:focus, .social-navigation a:hover:before, .social-navigation a:focus:before, .post-navigation a:hover .post-title, .post-navigation a:focus .post-title, .tagcloud a:hover, .tagcloud a:focus, .site-branding .site-title a:hover, .site-branding .site-title a:focus, .entry-title a:hover, .entry-title a:focus, .entry-footer a:hover, .entry-footer a:focus, .comment-metadata a:hover, .comment-metadata a:focus, .pingback .comment-edit-link:hover, .pingback .comment-edit-link:focus, .comment-reply-link, .comment-reply-link:hover, .comment-reply-link:focus, .required, .site-info a:hover, .site-info a:focus { color: #843144; } mark, ins, button:hover, button:focus, input[type="button"]:hover, input[type="button"]:focus, input[type="reset"]:hover, input[type="reset"]:focus, input[type="submit"]:hover, input[type="submit"]:focus, .pagination .prev:hover, .pagination .prev:focus, .pagination .next:hover, .pagination .next:focus, .widget_calendar tbody a, .page-links a:hover, .page-links a:focus { background-color: #843144; } input[type="date"]:focus, input[type="time"]:focus, input[type="datetime-local"]:focus, input[type="week"]:focus, input[type="month"]:focus, input[type="text"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="number"]:focus, textarea:focus, .tagcloud a:hover, .tagcloud a:focus, .menu-toggle:hover, .menu-toggle:focus { border-color: #843144; } @media screen and (min-width: 56.875em) { .main-navigation li:hover > a, .main-navigation li.focus > a { color: #843144; } } </style> <link rel="stylesheet" id="twentysixteen-block-style-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/css/blocks.css?ver=20190102" media="all"/> <!--[if lt IE 10]> <link rel='stylesheet' id='twentysixteen-ie-css' href='https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/css/ie.css?ver=20170530' media='all' /> <![endif]--> <!--[if lt IE 9]> <link rel='stylesheet' id='twentysixteen-ie8-css' href='https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/css/ie8.css?ver=20170530' media='all' /> <![endif]--> <!--[if lt IE 8]> <link rel='stylesheet' id='twentysixteen-ie7-css' href='https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/css/ie7.css?ver=20170530' media='all' /> <![endif]--> <link rel="stylesheet" id="Branda_Signup_Password-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/plugins/ultimate-branding/inc/modules/login-screen/assets/css/signup-password.css?ver=3.4.1" media="all"/> <link rel="stylesheet" id="wp-featherlight-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/plugins/wp-featherlight/css/wp-featherlight.min.css?ver=1.3.4" media="all"/> <link rel="stylesheet" id="cmplz-cookie-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/plugins/complianz-gdpr-premium-multisite/assets/css/cookieconsent.min.css?ver=5.4.0.2" media="all"/> <link rel="stylesheet" id="cleo-global-css" href="https://web.archive.org/web/20211030161402cs_/https://static.openedition.org/openbarre_/styles/main.css?ver=5.6.2" media="screen"/> <link rel="stylesheet" id="print-global-css" href="https://web.archive.org/web/20211030161402cs_/http://dhlab.hypotheses.org/wp-content/cleo-commons/css/print.css?ver=5.6.2" media="print"/> <link rel="stylesheet" id="wp-author-bio-css" href="https://web.archive.org/web/20211030161402cs_/https://dhlab.hypotheses.org/wp-content/plugins/wp-about-author/wp-about-author.css?ver=5.6.2" media="all"/> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-includes/js/jquery/jquery.min.js?ver=3.5.1" id="jquery-core-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2" id="jquery-migrate-js"></script> <!--[if lt IE 9]> <script src='https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/js/html5.js?ver=3.7.3' id='twentysixteen-html5-js'></script> <![endif]--> <link rel="https://api.w.org/" href="https://dhlab.hypotheses.org/wp-json/"/><link rel="alternate" type="application/json" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/wp-json/wp/v2/posts/2191"/><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://dhlab.hypotheses.org/xmlrpc.php?rsd"/> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://dhlab.hypotheses.org/wp-includes/wlwmanifest.xml"/> <meta name="generator" content="Wordpress 5.6.2 - https://wordpress.org"/> <link rel="canonical" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2191"/> <link rel="shortlink" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/?p=2191"/> <link rel="alternate" type="application/json+oembed" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdhlab.hypotheses.org%2F2191"/> <link rel="alternate" type="text/xml+oembed" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdhlab.hypotheses.org%2F2191&amp;format=xml"/> <style type="text/css"> .wpcp {background: #f7f7f7; padding: 16px 20px; border-radius: 5px; line-height: 20px;} </style> <meta name="twitter:card" content="summary"/> <meta name="twitter:site" content="@hypothesesorg"/> <meta property="fb:app_id" content="1148222708571516"/> <meta property="og:type" content="article"/> <meta property="og:site_name" content="Digital Humanities Lab"/> <meta property="og:url" content="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2191"/> <meta property="og:title" content="Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors"/> <meta property="og:description" content="by Markus Müller In the last episode, we built a pipeline to convert a diplomatic transcription into normalized Latin text. The code works fine as long as the diplomatic transcription is correct. But what happens if the transcription contains errors or, even worse, if the printer in the 16th century misspelled a word? – Right … „Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors“ weiterlesen"/> <meta property="og:image" content="https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/06/transkribus_0_Titel-825x510.jpg"/> <style type="text/css"> @font-face { font-family: "si"; src: url("https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/fonts/social-font/socicon.eot"); src: url("https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/fonts/social-font/socicon.eot#iefix") format("embedded-opentype"), url("https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/fonts/social-font/socicon.woff") format("woff"), url("https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/fonts/social-font/socicon.ttf") format("truetype"), url("https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/fonts/social-font/socicon.svg#icomoonregular") format("svg"); font-weight: normal; font-style: normal; } @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family:si; src: url(https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/fonts/social-font/socicon.svg) format(svg); } } .entry ul.soc { overflow:hidden; margin:0; padding:0; list-style:none;} .soc li { display:inline-block; *display:inline; zoom:1;} .soc li a { font-family:si!important; font-style:normal; font-weight:400; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; -ms-box-sizing:border-box; -o-box-sizing:border-box; box-sizing:border-box; -o-transition:.1s; -ms-transition:.1s; -moz-transition:.1s; -webkit-transition:.1s; transition:.1s; -webkit-transition-property: transform;transition-property: transform; -webkit-transform: translateZ(0); transform: translateZ(0); overflow:hidden; text-decoration:none; text-align:center; display:block; position: relative; z-index: 1; width: 38px; height: 38px; line-height: 38px; font-size: 20px; -webkit-border-radius: 0px; -moz-border-radius: 0px; border-radius: 0px; margin-right: 13px; color: #ffffff; background-color: none;} .soc a:hover { z-index: 2; -webkit-transform: scale(1.1); transform: scale(1.1);} .soc-icon-last{ margin:0 !important;} .soc-twitter { background-color: #4da7de;} .soc-twitter:before { content:"\e040";} .soc-facebook { background-color: #3e5b98;} .soc-facebook:before { content:"\e041";} .soc-linkedin { background-color: #3371b7;} .soc-linkedin:before { content:"\e049";} </style> <script type="text/javascript"> // Share buttons jQuery(document).ready(function($) { $(".share-hypotheses").click(function(event) { var shareName = $(this).attr("class").split(" ")[0]; //get the first class name of clicked element switch (shareName) { case "facebook": var openLink = "https://web.archive.org/web/20211030161402/https://www.facebook.com/sharer.php?title=Uncovering+censorship+in+the+16th+century+with+Transkribus+and+Python.+Episode+IV%3A+Detecting+OCR+transcription+errors&u=https%3A%2F%2Fdhlab.hypotheses.org%2F2191"; break; case "twitter": var openLink = "https://web.archive.org/web/20211030161402/https://twitter.com/share?text=Uncovering+censorship+in+the+16th+century+with+Transkribus+and+Python.+Episode+IV%3A+Detecting+OCR+transcription+errors&url=https%3A%2F%2Fdhlab.hypotheses.org%2F2191&via=hypothesesorg"; break; case "linkedin": var openLink = "https://web.archive.org/web/20211030161402/https://www.linkedin.com/shareArticle?title=Uncovering+censorship+in+the+16th+century+with+Transkribus+and+Python.+Episode+IV%3A+Detecting+OCR+transcription+errors&url=https%3A%2F%2Fdhlab.hypotheses.org%2F2191&mini=true"; break; } //Parameters for the Popup window var winWidth = 650; var winHeight = 450; var winLeft = ($(window).width() - winWidth) / 2; var winTop = ($(window).height() - winHeight) / 2; var winOptions = "width=" + winWidth + ",height=" + winHeight + ",top=" + winTop + ",left=" + winLeft; //open Popup window and redirect user to share website. window.open(openLink,"Share This Link",winOptions); return false; }); }); </script> <style type="text/css"> ol.footnotes>li {list-style-type:decimal;} ol.footnotes { color:#666666; } ol.footnotes li { font-size:80%; } </style> <link rel="alternate" type="application/rdf+xml" title="RDF Version" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of this post" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2191/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the category Lab Report" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/lab-report/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the tag digital humanities" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/digital-humanities/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the tag Flask" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/flask/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the tag OCR" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/ocr/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the tag programming" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/programming/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the tag Python" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/python/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the tag Transkribus" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/transkribus/feed/rdf"/> <link rel="alternate" type="application/rdf+xml" title="RDF Version of the tag UI" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/ui/feed/rdf"/> <script type="text/javascript" src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/hypotheses-config//js/hypoc.js"></script><style type="text/css" id="branda-admin-bar-logo"> body #wpadminbar #wp-admin-bar-wp-logo > .ab-item { background-image: url(https://web.archive.org/web/20211030161402im_/https://hypotheses.org/files/2016/12/hypologo-flux.png); background-repeat: no-repeat; background-position: 50%; background-size: 80%; } body #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { content: " "; } </style> <style> .twitter-tweet.cmplz-blocked-content-container { padding: 10px 40px; } </style> <style> .cmplz-placeholder-element > blockquote.fb-xfbml-parse-ignore { margin: 0 20px; } </style> <style> .instagram-media.cmplz-placeholder-element > div { max-width: 100%; } </style> <style type="text/css"> span.icon-hypotheses { background:url(https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/wp-content/cleo-commons/images/favicon_18x20.png);width:18px;height:20px;display:inline-block;margin-right:5px; } </style> <style type="text/css"> @media screen and (min-width: 44.375em) { body:not(.custom-background-image):before, body:not(.custom-background-image):after { z-index: 8; } } </style> <style>.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style><style id="custom-background-css"> body.custom-background { background-color: #e5e5e5; } </style> <link rel="dc:identifier" href="https://dhlab.hypotheses.org/2191"/> <meta property="dc:title" content="Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors"/> <meta property="dc:creator" content="Markus Müller"/> <meta property="dcterms:created" content="2021-09-24"/> <meta property="dcterms:abstract" content="by Markus Müller In the last episode, we built a pipeline to convert a diplomatic transcription into normalized Latin text. The code works fine as long as the diplomatic transcription is correct. But what happens if the transcription contains errors or, even worse, if the printer in the 16th century misspelled a word? – Right … „Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors“ weiterlesen" xml:lang="fr"/> <meta property="dc:subject" content="Lab Report"/> <meta property="dc:subject" content="digital humanities"/> <meta property="dc:subject" content="Flask"/> <meta property="dc:subject" content="OCR"/> <meta property="dc:subject" content="programming"/> <meta property="dc:subject" content="Python"/> <meta property="dc:subject" content="Transkribus"/> <meta property="dc:subject" content="UI"/> <meta property="dc:type" content="Billet"/> <link rel="alternate" type="application/opml+xml" title="Outline" href="https://web.archive.org/web/20211030161402/https://www.openedition.org/opml.php?pubtype=carnet"/></head> <body data-cmplz="1" class="post-template-default single single-post postid-2191 single-format-standard custom-background wp-embed-responsive wp-featherlight-captions group-blog"> <div id="page" class="site"> <div class="site-inner"> <a class="skip-link screen-reader-text" href="#content">Zum Inhalt springen</a> <header id="masthead" class="site-header" role="banner"> <div class="site-header-main"> <div class="site-branding"> <p class="site-title"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/" rel="home">Digital Humanities Lab</a></p> <p class="site-description">Leibniz-Institut für Europäische Geschichte</p> </div><!-- .site-branding --> <button id="menu-toggle" class="menu-toggle">Menü</button> <div id="site-header-menu" class="site-header-menu"> <nav id="site-navigation" class="main-navigation" role="navigation" aria-label="Primäres Menü"> <div class="menu-menue-container"><ul id="menu-menue" class="primary-menu"><li id="menu-item-145" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-145"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/das-dh-lab-am-ieg">About</a></li> <li id="menu-item-1140" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1140"><a href="https://web.archive.org/web/20211030161402/https://github.com/ieg-dhr">DH Lab @ GitHub</a></li> <li id="menu-item-1590" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1590"><a href="https://web.archive.org/web/20211030161402/https://www.zotero.org/groups/2449547/ieg_dh_lab/library">DH Lab @ Zotero</a></li> <li id="menu-item-1866" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1866"><a href="https://web.archive.org/web/20211030161402/https://soundcloud.com/transitsofmars/dh-lab">DH Lab – The Anthem</a></li> </ul></div> </nav><!-- .main-navigation --> </div><!-- .site-header-menu --> </div><!-- .site-header-main --> </header><!-- .site-header --> <div id="content" class="site-content"> <div id="primary" class="content-area"> <main id="main" class="site-main" role="main"> <article id="post-2191" class="post-2191 post type-post status-publish format-standard has-post-thumbnail hentry category-lab-report tag-digital-humanities tag-flask tag-ocr tag-programming tag-python tag-transkribus tag-ui"> <header class="entry-header"> <h1 class="entry-title">Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors</h1> </header><!-- .entry-header --> <div class="post-thumbnail"> <img width="825" height="510" src="https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/06/transkribus_0_Titel-825x510.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" loading="lazy" srcset="https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/06/transkribus_0_Titel-825x510.jpg 825w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/06/transkribus_0_Titel-300x185.jpg 300w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/06/transkribus_0_Titel-500x309.jpg 500w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/06/transkribus_0_Titel-768x475.jpg 768w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/06/transkribus_0_Titel.jpg 1000w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 60vw, (max-width: 1362px) 62vw, 840px"/> </div><!-- .post-thumbnail --> <div class="entry-content"> <p><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/author/muellerm">by Markus Müller</a></p> <p>In the <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2154">last episode</a>, we built a pipeline to convert a diplomatic transcription into normalized Latin text. The code works fine as long as the diplomatic transcription is correct. But what happens if the transcription contains errors or, even worse, if the printer in the 16th century misspelled a word? – Right now, nothing would happen at the moment because our pipeline cannot detect these errors. This is a problem because as soon as we start comparing two editions of the same text to check for censorship (and that’s where we are going!), the slightest difference between the two texts may be interpreted as censorship. Can we solve this problem? – Yes, we can!</p> <p><span id="more-2191"></span></p> <hr/> <p><a name="miniseries"></a></p> <p><span style="color: #808080;font-size: 11pt">This miniseries describes a digital workflow that starts with raw images of 16th century Latin prints, extracts the text, normalizes it, corrects transcription errors, and finally compares two texts to uncover differences, i.e. censorship. These are the episodes:</span></p> <ol> <li><span style="color: #808080;font-size: 11pt"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2022#start">OCR with 16th century prints.</a></span></li> <li><span style="color: #808080;font-size: 11pt"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2114">Let Python speak to Transkribus.</a></span></li> <li><span style="color: #808080;font-size: 11pt"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2154">Normalizing 16th century raw text.</a></span></li> <li><span style="color: #808080;font-size: 11pt">Detecting OCR transcription errors.<br/> </span></li> <li><span style="color: #808080;font-size: 11pt"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/?p=2271">How did the censors actually change the text?</a><br/> </span></li> <li><span style="color: #808080;font-size: 11pt">Finding text re-use. (coming soon)</span></li> </ol> <hr/> <figure id="attachment_2193" aria-describedby="caption-attachment-2193" style="width: 500px" class="wp-caption aligncenter"><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_printers_errors.jpg"><img loading="lazy" class="wp-image-2193 size-large" src="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_printers_errors-500x192.jpg" alt="" width="500" height="192" srcset="https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_printers_errors-500x192.jpg 500w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_printers_errors-300x115.jpg 300w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_printers_errors.jpg 600w" sizes="(max-width: 500px) 85vw, 500px"/></a><figcaption id="caption-attachment-2193" class="wp-caption-text">Two printer’s errors in 16th century Latin texts.</figcaption></figure> <p>The ‘analogue’ solution is to manually decide whether a difference between the two texts is an actual censorship or just a misprint or our own transcription error. If it is a transcription error, we should correct it in Transkribus, since text recognition models trained with an erroneous transcription will reproduce these errors (cf. <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2022#start">episode I</a>). If, on the other hand, it is a printing error, the transcription does not need to be modified, although the normalization pipeline should definitely correct the misprint from 400 years ago in order to prevent false alarms when searching for censorship.</p> <p>It would be complicated or even impossible to automate this decision. But we could at least try to identify the problematic words in the text automatically and make the manual review as easy and fast as possible.</p> <h2>We need a Latin spell checker!</h2> <p>A simple way to find problematic words is to take the normalized text and check each word with a Latin dictionary. If the word is not in the dictionary, it could be a misprint or a transcription error. There is yet another possibilty: the suspicious word could be correct, but the dictionary does not know it – think of strange and rare names like “Thesbite“ or “Thisbite” (cf. <a href="https://web.archive.org/web/20211030161402/https://www.mechon-mamre.org/p/pt/pt09a17.htm#1">1 Kings 17:1</a>), alternative spellings (like “Abraam” instead of “Abraham”), or neo-Latin words that did not exist in Antiquity and therefore are not included in today’s standard Latin dictionaries (like “philautia” = self-love, selfishness, a Greek word (φιλαυτία) introduced into Latin by humanists in the 16th century and used by theologians like Erasmus of Rotterdam).</p> <p>The <code>dictionary.py</code> module from the last episode could do the job. Though it would be nice to have a fully interactive user interface that highlights the suspicious words, or even better, to get a list of possible corrections. The <code>cyhunspell</code> module we used in <code>dictionary.py</code> can generate such a list, but the quality is not very good and the algorithm is surpisingly slow: generating lists of possible corrections for fifty erroneous words with <code>cyhunspell</code> takes 3.8 seconds (on my seven-year-old laptop).</p> <h3>Building a super-fast Latin dictionary</h3> <p>Wolf Garbe’s <a href="https://web.archive.org/web/20211030161402/https://github.com/wolfgarbe/SymSpell">SymSpell algorithm</a> takes only 7 milliseconds to generate the same lists of possible corrections for fifty words. Fortunately, there is a nice <a href="https://web.archive.org/web/20211030161402/https://github.com/mammothb/symspellpy">Python implementation</a> called <code>SymSpellPy</code>. The only problem is that SymSpell requires a frequency list for the language in question, i.e., statistics on how often a word occurs in a given corpus. The bigger the corpus, the better.</p> <p>Compared to the many high-quality frequency lists for modern languages (see the <a href="https://web.archive.org/web/20211030161402/https://github.com/wolfgarbe/SymSpell#frequency-dictionaries-in-other-languages">links on Wolf Garbe’s GitHub page</a>), which are based on corpora with billions of words, the Latin lists are quite small and focussed on Antiquity. The late-medieval Latin in our texts contains loads of biblical names and theological/ecclesiastical vocabulary, so that the available Latin word lists are far too small. We have to build our own corpus and generate our own frequency list.</p> <p>Luckily, in recent decades many Latin texts have been digitized and are freely available. The <a href="https://web.archive.org/web/20211030161402/http://www.mlat.uzh.ch/MLS/">Corpus corporum</a>, for example, reached 160 million words in March 2019, of which 95 million words are theological texts from the “<a href="https://web.archive.org/web/20211030161402/https://en.wikipedia.org/wiki/Patrologia_Latina">Patrologia Latina</a>” (one of the largest editorial projects of the 19th century). This is exactly the type of text we need. Instead of downloading hundereds of individual files from “Corpus corporum”, you can get most of them as <code>txt</code> files by downloading the <a href="https://web.archive.org/web/20211030161402/https://github.com/cltk/lat_text_latin_library">Latin Text Library</a> which is part of Python’s <a href="https://web.archive.org/web/20211030161402/https://docs.cltk.org/en/latest/about.html">CLTK (Classical Language Tool Kit)</a>. This corpus contains 2,141 Latin text files from Antiquity up to the modern era. Unfortunately, the files are quite messy and sometimes suffer from very strange spelling and/or numerous transcription errors. Therefore I tried to clean the texts with a Python script before building the word list. The script normalizes non-standard characters (like “æ”, “œ” etc.) and typical spelling variants (“j” → “i”, “v” → “u”), then filters out all punctuation, numbers, and Greek characters, and finally it checks every word against our Latin Hunspell dictionary from episode III. The result is not bad, but the Hunspell dictionary is very picky when it comes to proper names (case-sensitive!) and medieval spelling variants. You can preserve at least some of them by applying some tricks on words that are not recognized at first glance (e.g. by replacing “ci“ → “ti”, “e“ → “ae”, capitalizing the word, etc.). See my Jupyter notebook <code>build_SymSpell_dictionary.ipynb</code> on <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/blob/main/build_symspell_dictionary/build_SymSpell_dictionary.ipynb">GitHub</a> for details.</p> <p>Using this method, we can extract 12,829,421 words from the 2,141 text files in the CLTK corpus. After counting them, we end up with 408,396 unique words (the most frequent ones are “et” (423,445), “in” (261,237), and “est” (159,846). Hunspell considers 125,141 of them are incorrect, but after applying the tricks described above, we can “save” around 30,000 words from being deleted. In the end, our frequency list contains 313,881 unique words, which is a fairly good starting point for SymSpell.</p> <p>Finally, we load the frequency list into a <code>SymSpell</code> object (which takes some seconds), et voilà: our super-fast Latin dictionary is ready. Caveat: rarely used inflected forms as well as some spelling variants and proper names are still missing. Therefore, the spell checker we are going to build will use Hunspell as a fallback option if SymSpell does not know a word. If Hunspell also reports an error, we should check the word manually and either correct it or add it to the SymSpell dictionary.</p> <p>To implement this fallback procedure we add a function to <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/resolve_abbreviations/blob/master/cleaner.py"><code>cleaner.py</code> from episode III</a> (cf. <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/Transkribus_spell_checker/blob/6ad500844f6029a959c082c20d3f07525bbf0a7e/my_app/nlp/cleaner.py#L69-L109">GitHub</a> for details). Now that the dictionary works on a technical level, let’s put some thought into the user interface.</p> <h3>Building a spell checker GUI with HTML, CSS and JavaScript</h3> <p>Theoretically, it would be possible to highlight erroneous words in the <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/resolve_abbreviations/blob/master/cli.py">rudimentary command line interface</a> we built in <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2154">episode III</a>, but the command line approach does not allow for a fully interactive user experience. Therefore, a graphical user interface (GUI) is the way to go, either as a desktop application (cf. this review of <a href="https://web.archive.org/web/20211030161402/https://towardsdatascience.com/top-10-python-gui-frameworks-for-developers-adca32fbe6fc">10 GUI frameworks for Python</a>) or as a web application, meaning the GUI would be a web page written in HTML. As you can see below, with a combination of HTML and Cascaded Style Sheets (CSS) we can display the normalized text below the diplomatic transcription, highlight misspelled words and provide alternative spellings in a drop-down menu:</p> <pre style="color: #d1d1d1;background: #000000"><span style="color: #008073">&lt;!DOCTYPE html&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">head</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">meta</span> charset<span style="color: #d2cd86">=</span><span style="color: #00c4c4">"utf-8"</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">link</span> rel<span style="color: #d2cd86">=</span><span style="color: #00c4c4">"stylesheet"</span> href<span style="color: #d2cd86">=</span><span style="color: #00c4c4">"editor.css"</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">head</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">body</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">h3</span><span style="color: #ff8906">&gt;</span>Latin Spell Checker<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">h3</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">p</span><span style="color: #ff8906">&gt;</span>Document: Wild1559-Mt,Paris<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">p</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">p</span><span style="color: #ff8906">&gt;</span>Page: <span style="color: #00a800">273</span><span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">p</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">p</span><span style="color: #ff8906">&gt;</span>Status: GT<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">p</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>tamen laudem appetimus, vilipendi ægrè ferimus, &amp; cæt<span style="color: #00a800">.</span><span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>tamen laudem appetimus , uilipendi aegre ferimus , etc<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>deinde proni ſumus ad iudicandum<span style="color: #00a800">.</span> Hæc tria Chriſtuus po<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>deinde proni sumus ad iudicandum . Haec tria <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span> class<span style="color: #d2cd86">=</span><span style="color: #00c4c4">"word wrong"</span><span style="color: #ff8906">&gt;</span>Christuus <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span> class<span style="color: #d2cd86">=</span><span style="color: #00c4c4">"dropdown"</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>Christus<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>Christum<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> potissimum <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>tiſsimùm in ſermone, quem in monte habuit, impugnauit:<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span>in sermone , quem in monte habuit , impugnauit :<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">body</span><span style="color: #ff8906">&gt;</span> <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">html</span><span style="color: #ff8906">&gt;</span> </pre> <p><span style="font-size: 10pt">Listing 1: Simplified snippet of an HTML page called <code>editor.html</code> (<a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/blob/main/flask_rudimentary/templates/editor.html">on GitHub</a>) visualizing the raw transcription together with the normalized Latin text. Words missing in the dictionary are underlined in red by adding the <code>word wrong</code> class. A drop-down menu shows possible corrections.</span></p> <pre style="color: #d1d1d1;background: #000000"><span style="color: #d2cd86">.</span>word <span style="color: #b060b0">{</span> <span style="color: #904050">position</span><span style="color: #d2cd86">:</span> relative<span style="color: #b060b0">;</span> <span style="color: #904050">display</span><span style="color: #d2cd86">:</span> inline-block<span style="color: #b060b0">;</span> <span style="color: #b060b0">}</span> .word<span style="color: #d2cd86">.</span>wrong <span style="color: #b060b0">{</span> <span style="color: #904050">position</span><span style="color: #d2cd86">:</span> relative<span style="color: #b060b0">;</span> <span style="color: #904050">display</span><span style="color: #d2cd86">:</span> inline-block<span style="color: #b060b0">;</span> <span style="color: #904050">text-decoration</span><span style="color: #d2cd86">:</span> underline<span style="color: #b060b0">;</span> text-decoration-style<span style="color: #d2cd86">:</span> wavy<span style="color: #b060b0">;</span> text-decoration-color<span style="color: #d2cd86">:</span> red<span style="color: #b060b0">;</span> <span style="color: #b060b0">}</span> <span style="color: #d2cd86">.</span>dropdown <span style="color: #b060b0">{</span> <span style="color: #904050">display</span><span style="color: #d2cd86">:</span> none<span style="color: #b060b0">;</span> <span style="color: #9999a9">/* make the dropdown menu invisible */</span> <span style="color: #904050">position</span><span style="color: #d2cd86">:</span> absolute<span style="color: #b060b0">;</span> <span style="color: #904050">background-color</span><span style="color: #d2cd86">:</span> <span style="color: #00a800">#</span><span style="color: #00a800">f1f1f1</span><span style="color: #b060b0">;</span> <span style="color: #904050">box-shadow</span><span style="color: #d2cd86">:</span> <span style="color: #00a800">0</span><span style="color: #006600">px</span> <span style="color: #00a800">8</span><span style="color: #006600">px</span> <span style="color: #00a800">16</span><span style="color: #006600">px</span> <span style="color: #00a800">0</span><span style="color: #006600">px</span> <span style="color: #e66170;font-weight: bold">rgba</span><span style="color: #d2cd86">(</span><span style="color: #00a800">0</span><span style="color: #d2cd86">,</span><span style="color: #00a800">0</span><span style="color: #d2cd86">,</span><span style="color: #00a800">0</span><span style="color: #d2cd86">,</span><span style="color: #00a800">0.2</span><span style="color: #d2cd86">)</span><span style="color: #b060b0">;</span> <span style="color: #b060b0">}</span> <span style="color: #d2cd86">.</span>word<span style="color: #b060b0">:</span><span style="color: #e66170;font-weight: bold">hover</span> <span style="color: #d2cd86">.</span>dropdown <span style="color: #b060b0">{</span> <span style="color: #904050">display</span><span style="color: #d2cd86">:</span> block<span style="color: #b060b0">;</span> <span style="color: #9999a9">/* make the dropdown menu visible */</span> <span style="color: #904050">color</span><span style="color: #d2cd86">:</span> black<span style="color: #b060b0">;</span> <span style="color: #904050">text-shadow</span><span style="color: #d2cd86">:</span> none<span style="color: #b060b0">;</span> <span style="color: #b060b0">}</span> </pre> <p><span style="font-size: 10pt">Listing 2: Cascaded Stylesheet (<code>editor.css</code>, <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/blob/main/flask_rudimentary/static/editor.css">on GitHub</a>) describing the format of the HTML elements (like the red wavy line below mispelled words) and implementing the drop-down functionality.</span></p> <figure id="attachment_2195" aria-describedby="caption-attachment-2195" style="width: 500px" class="wp-caption aligncenter"><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_spellchecker_template.jpg"><img loading="lazy" class="wp-image-2195 size-large" src="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_spellchecker_template-500x336.jpg" alt="" width="500" height="336" srcset="https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_spellchecker_template-500x336.jpg 500w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_spellchecker_template-300x201.jpg 300w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_spellchecker_template.jpg 532w" sizes="(max-width: 500px) 85vw, 500px"/></a><figcaption id="caption-attachment-2195" class="wp-caption-text">This is how <code>editor.html</code> looks in the browser.</figcaption></figure> <p>In this prototype, the text content is hard-coded. For a truly interactive user experience, we need a way to dynamically change the content, like on a news website where a computer program on the server responds with the latest news as soon as you request the web page by typing the corresponding URL in your browser.</p> <p>That means, we have to build our own “spell checker” server and make it send the latest transcription to the browser along with the normalized and spell-checked Latin text. We could even give the user to send commands back to the server by including some input elements of HTML5 (like buttons, text input fields etc.) in the web page.</p> <p>To implement this truly interactive scenario, we need to step into web development and learn HTML, CSS and some JavaScript. But don’t be afraid, there are very good tutorials to learn all these things. The good news is: programming a server can be done with Python using a so-called “web framework” like “<a href="https://web.archive.org/web/20211030161402/https://flask.palletsprojects.com/en/2.0.x/">Flask</a>” (see below). Let’s focus on programming the server.</p> <hr/> <h4>TIPS FOR LEARNING HTML, CSS, JavaScript AND Flask</h4> <p><span style="color: #808080;font-size: 11pt">A good starting point for web development is David J. Malans “CS 50” course at Harvard, which includes a very nice session about <a href="https://web.archive.org/web/20211030161402/https://www.youtube.com/watch?v=5g0x2xv3aHU&amp;list=PLhQjrBD2T382_R182iC2gNZI9HzWFMC_8&amp;index=9">HTML, CSS and JavaScript</a>, as well as an <a href="https://web.archive.org/web/20211030161402/https://www.youtube.com/watch?v=x_c8pTW8ZUc&amp;list=PLhQjrBD2T382_R182iC2gNZI9HzWFMC_8&amp;index=11">introductory lecture on Flask</a>. Since Flask hides a lot of functionality behind easy-to-use objects and functions, you may also benefit from Malan’s general <a href="https://web.archive.org/web/20211030161402/https://www.youtube.com/watch?v=Wb0DM9I8RDo&amp;list=PLhQjrBD2T382_R182iC2gNZI9HzWFMC_8&amp;index=8">introduction into databases and the Structured Query Language (SQL)</a>, which helps to understand what’s going on behind the scenes. An alternative would be to work through online courses, either for free (like <a href="https://web.archive.org/web/20211030161402/https://www.w3schools.com/">w3schools</a> or the tutorials of <a href="https://web.archive.org/web/20211030161402/https://developer.mozilla.org/en-US/">Mozilla’s Developer Network</a>) or paid (I very much liked the (partly free) JavaScript course of <a href="https://web.archive.org/web/20211030161402/https://www.youtube.com/channel/UCW5YeuERMmlnqo4oq8vwUpg">The Net Ninja</a>). To dive deeper, you should check out the <a href="https://web.archive.org/web/20211030161402/https://flask-doc.readthedocs.io/en/latest/">documentation of Flask</a> and bookmark technical references of HTML, CSS and JavaScript, like the <a href="https://web.archive.org/web/20211030161402/https://developer.mozilla.org/en-US/docs/Web">MDN Web Docs</a>. Be warned: You will need to invest quite a bit of time.</span></p> <hr/> <h2>A spell checking web app with Python and Flask</h2> <p>The task of our “spell checker” server will be to send data to the client (= the browser) and handle the requests it receives from the client (e.g. when the user fills in a text input field and presses a button). A web framework like <a href="https://web.archive.org/web/20211030161402/https://flask.palletsprojects.com/en/2.0.x/">Flask</a> provides ready-to-use modules to do all these things.<sup><a id="fnr.1" class="footref" href="#fn.1">1</a></sup></p> <p>Let’s have a look at a simplified example that demonstrates the basic idea of Flask and shows how to integrate the building blocks from episode II and III into a web application. By convention, Flask expects specific declarations and functions in your code and a certain folder structure. In your project folder, <code>app.py</code> is the main Python script that creates the web app and provides the core logic for managing requests and responses. HTML files must be located in a <code>templates/</code> subfolder. CSS and JavaScript belong in the <code>static/</code> subfolder. This is how the complete folder structure looks like:</p> <pre style="color: #d1d1d1;background: #000000">app<span style="color: #d2cd86">.</span>py static/ editor<span style="color: #d2cd86">.</span>css editor<span style="color: #d2cd86">.</span>js templates/ editor<span style="color: #d2cd86">.</span>html </pre> <p>The following code sets up a rudimentary web app that serves the HTML prototype we saw above when the user visits the <code>/editor</code> route in the browser:</p> <pre style="color: #d1d1d1;background: #000000"><span style="color: #e66170;font-weight: bold">from</span> flask <span style="color: #e66170;font-weight: bold">import</span> Flask<span style="color: #d2cd86">,</span> render_template app <span style="color: #d2cd86">=</span> Flask<span style="color: #d2cd86">(</span>__name__<span style="color: #d2cd86">)</span> <span style="color: #9999a9"># &lt;-- create app object</span> <span style="color: #d2cd86">@</span>app<span style="color: #d2cd86">.</span>route<span style="color: #d2cd86">(</span><span style="color: #00c4c4">"/editor"</span><span style="color: #d2cd86">)</span> <span style="color: #9999a9"># &lt;-- define a route</span> <span style="color: #e66170;font-weight: bold">def</span> editor<span style="color: #d2cd86">(</span><span style="color: #d2cd86">)</span><span style="color: #d2cd86">:</span> <span style="color: #9999a9"># &lt;-- function which sends</span> <span style="color: #9999a9"># data to the client</span> <span style="color: #e66170;font-weight: bold">return</span> render_template<span style="color: #d2cd86">(</span><span style="color: #00c4c4">"editor.html"</span><span style="color: #d2cd86">)</span> <span style="color: #9999a9"># &lt;┐</span> <span style="color: #9999a9"># template sent to client</span> </pre> <p><span style="font-size: 10pt">Listing 3: A very simple web app with Flask (<a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/blob/main/flask_rudimentary/app.py">on GitHub</a>).</span></p> <p>The cool thing about Flask is that you can run a development server locally without having to install any additional software. After installing Flask (<code>pip install Flask</code>, I strongly recommend to use a virtual environment, either <a href="https://web.archive.org/web/20211030161402/https://docs.conda.io/">conda</a> or <a href="https://web.archive.org/web/20211030161402/https://towardsdatascience.com/virtual-environments-104c62d48c54">venv</a>) and downloading and unzipping the <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/tree/main/flask_rudimentary">code from GitHub</a> just open a terminal or command line, go to the project folder and say <code>flask run</code>. The development server will start and as soon as you open your browser and visit <code><a href="https://web.archive.org/web/20211030161402/http://127.0.0.1:5000/editor">http://127.0.0.1:5000/editor</a></code>, you should see the spell checker prototype from above.</p> <p>Unfortunately, the web site still shows hard-coded content. But thanks to Flask we can easily change that. Compare the rudimentary Flask app from above with this one:</p> <pre style="color: #d1d1d1;background: #000000"><span style="color: #e66170;font-weight: bold">from</span> flask <span style="color: #e66170;font-weight: bold">import</span> Flask<span style="color: #d2cd86">,</span> render_template app <span style="color: #d2cd86">=</span> Flask<span style="color: #d2cd86">(</span>__name__<span style="color: #d2cd86">)</span> <span style="color: #d2cd86">@</span>app<span style="color: #d2cd86">.</span>route<span style="color: #d2cd86">(</span><span style="color: #00c4c4">"/editor"</span><span style="color: #d2cd86">)</span> <span style="color: #e66170;font-weight: bold">def</span> editor<span style="color: #d2cd86">(</span><span style="color: #d2cd86">)</span><span style="color: #d2cd86">:</span> page <span style="color: #d2cd86">=</span> <span style="color: #b060b0">{</span><span style="color: #00c4c4">'lines'</span><span style="color: #d2cd86">:</span> <span style="color: #d2cd86">[</span> <span style="color: #9999a9"># raw transcription from Transkribus:</span> <span style="color: #b060b0">{</span><span style="color: #00c4c4">'raw_data'</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">'deinde proni ſumus ad iudicandum. Hæc tria Chriſtuus po'</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">'words'</span><span style="color: #d2cd86">:</span> <span style="color: #d2cd86">[</span> <span style="color: #b060b0">{</span><span style="color: #00c4c4">"data-type"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"word"</span><span style="color: #d2cd86">,</span> <span style="color: #9999a9"># &lt;word | punctuation | unreadable&gt;</span> <span style="color: #00c4c4">"data"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"deinde"</span><span style="color: #d2cd86">,</span> <span style="color: #9999a9"># &lt;the actual word as a string&gt;</span> <span style="color: #00c4c4">"spelling"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"ok"</span><span style="color: #d2cd86">,</span> <span style="color: #9999a9"># &lt;ok | probably ok | wrong&gt;</span> <span style="color: #b060b0">}</span><span style="color: #d2cd86">,</span> <span style="color: #b060b0">{</span><span style="color: #00c4c4">"data-type"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"word"</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">"data"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"proni"</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">"spelling"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"ok"</span><span style="color: #d2cd86">,</span> <span style="color: #b060b0">}</span><span style="color: #d2cd86">,</span> <span style="color: #9999a9"># etc. ... etc. ...</span> <span style="color: #b060b0">{</span><span style="color: #00c4c4">"data-type"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"punctuation"</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">"data"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"."</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">"spelling"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"ok"</span><span style="color: #d2cd86">,</span> <span style="color: #b060b0">}</span><span style="color: #d2cd86">,</span> <span style="color: #9999a9"># etc. ... etc. ...</span> <span style="color: #b060b0">{</span><span style="color: #00c4c4">"data-type"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"word"</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">"data"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"Christuus"</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">"spelling"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"wrong"</span><span style="color: #d2cd86">,</span> <span style="color: #00c4c4">"suggestions"</span><span style="color: #d2cd86">:</span> <span style="color: #d2cd86">[</span><span style="color: #b060b0">{</span><span style="color: #00c4c4">"term"</span><span style="color: #d2cd86">:</span> <span style="color: #00c4c4">"Christus"</span><span style="color: #d2cd86">,</span> <span style="color: #9999a9"># &lt;suggested word&gt;</span> <span style="color: #00c4c4">"count"</span><span style="color: #d2cd86">:</span> <span style="color: #00a800">1432</span><span style="color: #b060b0">}</span><span style="color: #d2cd86">]</span> <span style="color: #9999a9"># &lt;frequency in the corpus&gt;</span> <span style="color: #b060b0">}</span><span style="color: #d2cd86">,</span> <span style="color: #d2cd86">]</span><span style="color: #b060b0">}</span> <span style="color: #d2cd86">]</span><span style="color: #b060b0">}</span> <span style="color: #9999a9">┌&gt; send the page variable</span> <span style="color: #e66170;font-weight: bold">return</span> render_template<span style="color: #d2cd86">(</span><span style="color: #00c4c4">"editor.html"</span><span style="color: #d2cd86">,</span> page<span style="color: #d2cd86">=</span>page<span style="color: #d2cd86">)</span> </pre> <p><span style="font-size: 10pt">Listing 4: Sending data and an HTML template with Flask (<a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/blob/main/flask_simple/app.py">on GitHub</a>).</span></p> <p>This time, the content is no longer hard-coded in the HTML file itself. Instead, there is a <code>page</code> variable that contains all the data and is sent to the browser along with <code>editor.html</code> in the <code>return render_template()</code> statement. The <code>page</code> variable is a Python dictionary containing the <code>raw_data</code> taken from Transkribus and a list of <code>words</code>. Each <code>word</code> is a Python dictionary that stores the word itself (in the <code>data</code> attribute), its type (<code>data-type</code>), and information about whether the word is misspelled or correct.</p> <pre style="color: #d1d1d1;background: #000000"><span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span> class<span style="color: #d2cd86">=</span><span style="color: #00c4c4">"page"</span><span style="color: #ff8906">&gt;</span> {% for line in page<span style="color: #00a800">.</span>lines %} <span style="color: #ff8906">&lt;</span><span style="color: #e66170;font-weight: bold">div</span> class<span style="color: #d2cd86">=</span><span style="color: #00c4c4">"rawText"</span><span style="color: #ff8906">&gt;</span>{{ line<span style="color: #00a800">.</span>raw_data }}<span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> <span style="color: #9999a9">&lt;!-- etc. … … … etc. --&gt;</span> {% endfor %} <span style="color: #ff8906">&lt;/</span><span style="color: #e66170;font-weight: bold">div</span><span style="color: #ff8906">&gt;</span> </pre> <p><span style="font-size: 10pt">Listing 5: A snippet of the corresponding <code>editor.html</code> (<a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/blob/ff0c5130f7c2d2d73a05277cc053207d800db99f/flask_simple/templates/editor.html#L23-L24">on GitHub</a>). When rendering the page, the <code>Jinja</code> templating engine will convert the placeholders with curly braces into actual HTML markup.</span></p> <p>If you take a look at <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/dh_blog_Latin_spell_checker/blob/main/flask_simple/templates/editor.html">the new <code>editor.html</code></a>, you will notice a strange syntax with curly braces. Similar to a form on paper, this syntax marks gaps which Flask should fill in when it renders the template. For example, <code>{% for line in page.lines %}</code> means: “Iterate over the lines of the page”, and <code>{{ line.raw_data }}</code> means: “Fill in the raw transcription of this line here”, and so on. This syntax and the templating functionality are part of the <a href="https://web.archive.org/web/20211030161402/https://jinja.palletsprojects.com/"><code>Jinja</code> templating engine</a>, which is <a href="https://web.archive.org/web/20211030161402/https://flask.palletsprojects.com/en/2.0.x/quickstart/#rendering-templates">included into Flask</a>. The resulting HTML code is identical to our hard-coded prototype, but this time, the server generated it dynamically based on the data provided by the <code>page</code> variable. If we change the <code>page</code> variable, the text content of the resulting HTML would change as well.</p> <p>This is where the building blocks from episodes II and III come into play: Imagine we used Python to change the <code>page</code> variable automatically! <code>Transkribus_Web</code>, for example, could download the raw transcription from Transkribus and store it in the <code>page</code> variable. <code>normalize.py</code> would do its job and generate the list of normalized words. Last but not least, <code>dictionary.py</code> would check the spelling of every word and generate the list of suggestions if necessary. All the data would be stored in the <code>page</code> variable. The result would be a <code>page</code> variable just like the one we saw in the example above. This time, however, the <code>page</code> variable would be generated dynamically. That means that we can normalize and render the data from Transkribus flawlessly and display the result as a web page!</p> <p>Let’s go even one step further and make the content of the web page, especially the raw transcription, editable so that the user could react when a word is highlighted as “wrong” and possibly correct the transcription error. Then, by pressing a button on the web page, the user could ask the server to re-run the spell check or save the modified transcription to the Transkribus server. All of these features can be implemented with Flask and HTML. If you want even more interactivity on the web page, you should outsource parts of the logic from the Flask server to the browser by adding JavaScript to the HTML template so that the HTML document can be manipulated from within the browser.</p> <p>I can’t explain all the details here because the blog article is already too long. The code of the app I built (see my <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/Transkribus_spell_checker">GitHub repository</a>) has grown over the last three years and is still work in progress. The parts of the code I wrote at the beginning are often quite clumsy, and the details of the architecture of the software are sometimes a crude mixture of different approaches. I am a historian, not a professional programmer. The app can only be used by small teams (two or three people at most) because it lacks a proper user rights management and the data management is far too inefficient for larger numbers of users. Writing this web app, I learned a lot, but I also recognized how complex programming is and how much expertise and experience is needed to write really good and efficient code.</p> <hr/> <h4>HINTS FOR BEGINNERS WHO ALREADY HAVE SOME EXPERIENCE WITH HTML, CSS, JavaScript AND Flask</h4> <ul> <li><span style="color: #808080;font-size: 11pt">Making your HTML content look right with CSS takes a lot of time. There are CSS frameworks like <a href="https://web.archive.org/web/20211030161402/https://www.w3schools.com/bootstrap/bootstrap_ver.asp">Bootstrap</a> or <a href="https://web.archive.org/web/20211030161402/https://www.w3schools.com/w3css/defaulT.asp">W3.CSS</a> that provide ready-to-use CSS designs that look professional and reduce the lines of CSS lines you have to write.</span></li> <li><span style="color: #808080;font-size: 11pt">An efficient graphical user interface typically uses icons. <a href="https://web.archive.org/web/20211030161402/https://www.w3schools.com/css/css_icons.asp">Using a CSS icon library</a> is an easy way to integrate professionally designed icon sets into your web application.</span></li> <li><span style="color: #808080;font-size: 11pt">Writing pure JavaScript code (aka “Vanilla JavaScript”) can sometimes be tedious. Using a JavaScript framework like <a href="https://web.archive.org/web/20211030161402/https://jquery.com/">jQuery</a> or <a href="https://web.archive.org/web/20211030161402/https://jquery.com/">Vue.js</a> can make life easier. The downside is that you have to learn yet another set of commands.</span></li> <li><span style="color: #808080;font-size: 11pt">To transfer data from the Flask server to your JavaScript, you could implement your own REST-API in Flask and use JavaScript to retrieve the data. Alternatively, <code>render_template</code> could send your data along with the HTML template. In the HTML template, you should then include a line of JavaScript in the <code>&lt;head&gt;</code> tag with a syntax like <code>var my_data = {{ my_data|safe }}</code>, meaning that <code>Jinja</code> should use <a href="https://web.archive.org/web/20211030161402/https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.safe">the <code>safe</code> filter</a> to render the variable as JSON. This prevents crashes caused by escaped characters.</span></li> </ul> <hr/> <h2>On the way to a fully-featured Transkribus spell checker web app</h2> <p><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_document_manager.jpg"><img loading="lazy" class="size-thumbnail wp-image-2197 alignright" src="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_document_manager-150x150.jpg" alt="" width="150" height="150"/></a>To conclude, I briefly explain the structure of the web app. The user interface consists of three main parts, the document manager, the editor and the dictionary. In the <strong>document manager</strong> you can browser your collections, documents and pages on the Transkribus server. The other tabs will be explained in the next episodes.</p> <p><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_editor.jpg"><img loading="lazy" class="size-thumbnail wp-image-2198 alignleft" src="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_editor-150x150.jpg" alt="" width="150" height="150"/></a>By clicking on a page, you can open it in the <strong>editor</strong>, which is an extended version of the prototype we saw above. It offers much more interactivity. As soon as you select a line of text for editing, the photo of the original page jumps to the corresponding passage and highlights the line in red, so you can easily decide whether you deal with a transcription error or a misprint. If a highlighted word turns out to be correct, you can add it to the dictionary or to a list of printer’s errors with just one click in the dropdown menu (<code>⨁ dictionary</code>).</p> <p><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_editor_keyboard.jpg"><img loading="lazy" class="size-thumbnail wp-image-2199 alignright" src="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_editor_keyboard-150x150.jpg" alt="" width="150" height="150"/></a>The buttons on the left and right margin of the screen give you access to a <strong>virtual keyboard</strong> for special characters and a <strong>comments side panel</strong> (you can attach comments to words).</p> <p><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_user_dictionary.jpg"><img loading="lazy" class="alignleft wp-image-2210 size-thumbnail" src="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_user_dictionary-150x150.jpg" alt="" width="150" height="150"/></a></p> <p>Clicking the books icon in the editor opens the <strong>user dictionary</strong>, where you can review entries and add or delete words. The “Reload abbreviations table from Google Docs” button at the top of the page refers to the <code>Cleaner</code>’s replacement table: the table is stored on Google Drive and can be edited by all members of the team. Clicking the button synchronizes the web app with the Google spread sheet.</p> <p>Things like the user dictionary would not work without a custom database in the background. Flask provides efficient ways (<a href="https://web.archive.org/web/20211030161402/https://flask-sqlalchemy.palletsprojects.com/en/2.x/">Flask SQLAlchemy</a>) to set up and communicate with a database, or in other words, to “manipulate the database model”. The overall architecture of the app follows the so-called <a href="https://web.archive.org/web/20211030161402/https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC pattern</a>, where “M” stands for the model, i.e. the database(s), “V” is the view, i.e. the HTML templates like <code>editor.html</code>, and “C” stands for the controller, i.e. the normalization pipeline and all other parts of the Python code explained above.</p> <p><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_architecture.jpg"><img loading="lazy" class="wp-image-2201 size-large aligncenter" src="https://web.archive.org/web/20211030161402im_/http://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_architecture-500x435.jpg" alt="" width="500" height="435" srcset="https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_architecture-500x435.jpg 500w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_architecture-300x261.jpg 300w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_architecture-768x668.jpg 768w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_architecture-1200x1044.jpg 1200w, https://web.archive.org/web/20211030161402im_/https://dhlab.hypotheses.org/files/2021/09/transkribus_4_app_architecture.jpg 1271w" sizes="(max-width: 500px) 85vw, 500px"/></a>The schema shows how the Flask server talks to the Transkribus REST-API to download the raw transcriptions. It processes them and stores some data in the database and/or in the in-memory cache, from where the views get their data before they are sent to the client via the <code>render_template()</code> command. In the browser, the JavaScript code generates an interactive user interface and allows the user to send commands back to the controller, which then saves the modified transcription on the Transkribus server, loads new data or modifies the user dictionary in the database etc. On GitHub you find a <a href="https://web.archive.org/web/20211030161402/https://github.com/gedoensmanagement/Transkribus_spell_checker/blob/master/doc/database_2021-09-16.jpg">schema of the database model</a>.</p> <p><strong>Conclusion</strong>: Programming a well-designed user interface is quite complicated. The solution presented here is only one of many possible approaches. It is still work in progress, the code is far from beeing professional, some bugs are not fixed yet, others still need to be found. Nevertheless, together with a student assistant I used the app for more than a year, and the interactive user interface has made the whole procedure of transcribing, training a Transkribus model and correcting automated transcriptions much faster and easier. The road is rocky, but worth it.</p> <hr/> <p><em>Footnotes</em></p> <p><sup><a id="fn.1" class="footnum" href="#fnr.1">1</a></sup> An even more powerful web framework for Python would be <a href="https://web.archive.org/web/20211030161402/https://www.djangoproject.com/">Django</a>.</p> <div class="wpcp">Cite this article as: Markus Müller, "Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors," in <em>Digital Humanities Lab</em>, 24/09/2021, <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2191">https://dhlab.hypotheses.org/2191</a>.</div> <hr/> <p style="line-height: 1.1"><span style="font-size: 10pt">Featured Image: <em>Let Python Talk to Transkribus</em>, 2021, by Markus Müller, <a href="https://web.archive.org/web/20211030161402/https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a>,<br/> build upon <a href="https://web.archive.org/web/20211030161402/https://commons.wikimedia.org/wiki/File:Wolpertinger.jpg">Wolpertinger</a> by Rainer Zenz, <a href="https://web.archive.org/web/20211030161402/https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a>; <a href="https://web.archive.org/web/20211030161402/https://commons.wikimedia.org/wiki/File:Python_natalensis_Smith_1840_white_background.jpg">Python natalensis</a>, in: Andrew Smith: Illustrations of the zoology of South Africa, Reptilia. Smith, Elder, and Co., London 1840, PD; Markus Müller: Sammelband mit Schriften Johann Wilds, Wissenschaftliche Stadtbibliothek Mainz, Signatur 559 q 1; <a href="https://web.archive.org/web/20211030161402/https://commons.wikimedia.org/wiki/File:%27Haunted_table%27_of_The_Black_Horse_Inn,_Nuthurst,_West_Sussex.jpg">The ‘haunted table’ in the bar of the Black Horse Inn public house</a>, on Nuthurst Street in Nuthurst, West Sussex, England, by Acabashi, <a href="https://web.archive.org/web/20211030161402/https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a>.</span></p> <hr/> <!-- from https://perfecticons.com/ --> <ul class="soc"> <li><a class="twitter share-hypotheses soc-twitter" href="https://web.archive.org/web/20211030161402/https://twitter.com/share?text=Uncovering+censorship+in+the+16th+century+with+Transkribus+and+Python.+Episode+IV%3A+Detecting+OCR+transcription+errors&amp;url=https%3A%2F%2Fdhlab.hypotheses.org%2F2191&amp;via=hypothesesorg"></a></li> <li><a class="facebook share-hypotheses soc-facebook" href="https://web.archive.org/web/20211030161402/https://www.facebook.com/sharer.php?title=Uncovering+censorship+in+the+16th+century+with+Transkribus+and+Python.+Episode+IV%3A+Detecting+OCR+transcription+errors&amp;u=https%3A%2F%2Fdhlab.hypotheses.org%2F2191"></a></li> <li><a class="linkedin share-hypotheses soc-linkedin" href="https://web.archive.org/web/20211030161402/https://www.linkedin.com/shareArticle?title=Uncovering+censorship+in+the+16th+century+with+Transkribus+and+Python.+Episode+IV%3A+Detecting+OCR+transcription+errors&amp;url=https%3A%2F%2Fdhlab.hypotheses.org%2F2191&amp;mini=true"></a></li> </ul> <div class="author-info"> <div class="author-avatar"> <img alt="" src="https://web.archive.org/web/20211030161402im_/https://secure.gravatar.com/avatar/03e7503b07a7704c7483675902117e89?s=42&amp;d=blank&amp;r=g" srcset="https://web.archive.org/web/20211030161402im_/https://secure.gravatar.com/avatar/03e7503b07a7704c7483675902117e89?s=84&amp;d=blank&amp;r=g 2x" class="avatar avatar-42 photo" height="42" width="42" loading="lazy"/> </div><!-- .author-avatar --> <div class="author-description"> <h2 class="author-title"><span class="author-heading">Autor:</span> Markus Müller</h2> <p class="author-bio"> Studied Catholic theology and education science in Tübingen (2000–2006) and Salamanca (2002/2003). 2012: PhD in Catholic theology (ecclesiastical history) in Tübingen. Research assistant in Tübingen, assistant lecturer in Frankfurt and Mainz. Since 2018, postdoctoral researcher at the Institute of European History in Mainz. – Research interests: history of religious education, censorship in the 16th century, Digital Humanities. <a class="author-link" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/author/muellerm" rel="author"> Alle Beiträge von Markus Müller anzeigen </a> </p><!-- .author-bio --> </div><!-- .author-description --> </div><!-- .author-info --> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="byline"><span class="author vcard"><img alt="" src="https://web.archive.org/web/20211030161402im_/https://secure.gravatar.com/avatar/03e7503b07a7704c7483675902117e89?s=49&amp;d=blank&amp;r=g" srcset="https://web.archive.org/web/20211030161402im_/https://secure.gravatar.com/avatar/03e7503b07a7704c7483675902117e89?s=98&amp;d=blank&amp;r=g 2x" class="avatar avatar-49 photo" height="49" width="49" loading="lazy"/><span class="screen-reader-text">Autor </span> <a class="url fn n" href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/author/muellerm">Markus Müller</a></span></span><span class="posted-on"><span class="screen-reader-text">Veröffentlicht am </span><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2191" rel="bookmark"><time class="entry-date published" datetime="2021-09-24T11:00:52+02:00">24/09/2021</time><time class="updated" datetime="2021-10-29T11:28:02+02:00">29/10/2021</time></a></span><span class="cat-links"><span class="screen-reader-text">Kategorien </span><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/lab-report" rel="category tag">Lab Report</a></span><span class="tags-links"><span class="screen-reader-text">Schlagwörter </span><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/digital-humanities" rel="tag">digital humanities</a>, <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/flask" rel="tag">Flask</a>, <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/ocr" rel="tag">OCR</a>, <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/programming" rel="tag">programming</a>, <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/python" rel="tag">Python</a>, <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/transkribus" rel="tag">Transkribus</a>, <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/ui" rel="tag">UI</a></span> </footer><!-- .entry-footer --> </article><!-- #post-2191 --> <div id="comments" class="comments-area"> <div id="respond" class="comment-respond"> <h2 id="reply-title" class="comment-reply-title">Schreibe einen Kommentar <small><a rel="nofollow" id="cancel-comment-reply-link" href="/web/20211030161402/https://dhlab.hypotheses.org/2191#respond" style="display:none;">Antworten abbrechen</a></small></h2><form action="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Deine E-Mail-Adresse wird nicht veröffentlicht.</span> Erforderliche Felder sind mit <span class="required">*</span> markiert.</p><p class="comment-form-comment"><label for="comment">Kommentar</label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"></textarea></p><p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required="required"/></p> <p class="comment-form-email"><label for="email">E-Mail <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" required="required"/></p> <p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200"/></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Kommentar abschicken"/> <input type="hidden" name="comment_post_ID" value="2191" id="comment_post_ID"/> <input type="hidden" name="comment_parent" id="comment_parent" value="0"/> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="2c0948650a"/></p><input type="hidden" id="ak_js" name="ak_js" value="104"/><textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100" style="display: none !important;"></textarea></form> </div><!-- #respond --> <p class="akismet_comment_form_privacy_notice">Diese Website verwendet Akismet, um Spam zu reduzieren. <a href="https://web.archive.org/web/20211030161402/https://akismet.com/privacy/" target="_blank" rel="nofollow noopener">Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden</a>.</p> </div><!-- .comments-area --> <nav class="navigation post-navigation" role="navigation" aria-label="Beiträge"> <h2 class="screen-reader-text">Beitrags-Navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2154" rel="prev"><span class="meta-nav" aria-hidden="true">Zurück</span> <span class="screen-reader-text">Vorheriger Beitrag:</span> <span class="post-title">Uncovering censorship in the 16th century with Transkribus and Python. Episode III: Normalizing 16th century raw text</span></a></div><div class="nav-next"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2219" rel="next"><span class="meta-nav" aria-hidden="true">Weiter</span> <span class="screen-reader-text">Nächster Beitrag:</span> <span class="post-title">Geohumanities III: analysing early modern mobility through birth and apprenticeship letters</span></a></div></div> </nav> </main><!-- .site-main --> </div><!-- .content-area --> <aside id="secondary" class="sidebar widget-area" role="complementary"> <section id="search-1" class="widget widget_search"> <form role="search" method="get" class="search-form" action="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/"> <label> <span class="screen-reader-text">Suche nach:</span> <input type="search" class="search-field" placeholder="Suche …" value="" name="s"/> </label> <button type="submit" class="search-submit"><span class="screen-reader-text">Suchen</span></button> </form> </section> <section id="recent-posts-3" class="widget widget_recent_entries"> <h2 class="widget-title">Posts</h2><nav role="navigation" aria-label="Posts"> <ul> <li> <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2271">Uncovering censorship in the 16th century with Transkribus and Python. Episode V: How did the censors actually change the text?</a> <span class="post-date">29/10/2021</span> </li> <li> <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2251">„Experiment, Ergebnis, Erkenntnis“ – Dokumentation einer Interviewreihe zu Projektmanagement in den Digital Humanities</a> <span class="post-date">15/10/2021</span> </li> <li> <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2219">Geohumanities III: analysing early modern mobility through birth and apprenticeship letters</a> <span class="post-date">01/10/2021</span> </li> </ul> </nav></section><section id="recent-comments-3" class="widget widget_recent_comments"><h2 class="widget-title">Comments</h2><nav role="navigation" aria-label="Comments"><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2114" rel="external nofollow ugc" class="url">Uncovering censorship in the 16th century with Transkribus and Python. Episode II: Let Python speak to Transkribus &#8211; Digital Humanities Lab</a></span> bei <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2154#comment-271">Uncovering censorship in the 16th century with Transkribus and Python. Episode III: Normalizing 16th century raw text</a></li><li class="recentcomments"><span class="comment-author-link"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2022" rel="external nofollow ugc" class="url">Uncovering censorship in the 16th century with Transkribus and Python. Episode I: OCR with Latin prints &#8211; Digital Humanities Lab</a></span> bei <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2154#comment-270">Uncovering censorship in the 16th century with Transkribus and Python. Episode III: Normalizing 16th century raw text</a></li><li class="recentcomments"><span class="comment-author-link"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2191" rel="external nofollow ugc" class="url">Uncovering censorship in the 16th century with Transkribus and Python. Episode IV: Detecting OCR transcription errors &#8211; Digital Humanities Lab</a></span> bei <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/2154#comment-269">Uncovering censorship in the 16th century with Transkribus and Python. Episode III: Normalizing 16th century raw text</a></li></ul></nav></section><section id="tag_cloud-1" class="widget widget_tag_cloud"><h2 class="widget-title">Tags</h2><nav role="navigation" aria-label="Tags"><div class="tagcloud"><ul class="wp-tag-cloud" role="list"> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/3d" class="tag-cloud-link tag-link-116 tag-link-position-1" style="font-size: 1em;">3D</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/aor" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 1em;">AOR</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/art-history" class="tag-cloud-link tag-link-79 tag-link-position-3" style="font-size: 1em;">Art History</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/covid-19" class="tag-cloud-link tag-link-89 tag-link-position-4" style="font-size: 1em;">COVID-19</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/dariah-de" class="tag-cloud-link tag-link-84 tag-link-position-5" style="font-size: 1em;">DARIAH-DE</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/databases" class="tag-cloud-link tag-link-115 tag-link-position-6" style="font-size: 1em;">Databases</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/design" class="tag-cloud-link tag-link-87 tag-link-position-7" style="font-size: 1em;">Design</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/digital-history" class="tag-cloud-link tag-link-93 tag-link-position-8" style="font-size: 1em;">digital history</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/digital-humanities" class="tag-cloud-link tag-link-109 tag-link-position-9" style="font-size: 1em;">digital humanities</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/doing-digital-history-with-python" class="tag-cloud-link tag-link-106 tag-link-position-10" style="font-size: 1em;">Doing digital history with Python</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/epidemics" class="tag-cloud-link tag-link-96 tag-link-position-11" style="font-size: 1em;">Epidemics</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/gamification" class="tag-cloud-link tag-link-86 tag-link-position-12" style="font-size: 1em;">Gamification</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/geohumanities" class="tag-cloud-link tag-link-111 tag-link-position-13" style="font-size: 1em;">geohumanities</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/geojson" class="tag-cloud-link tag-link-112 tag-link-position-14" style="font-size: 1em;">GeoJSON</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/gis" class="tag-cloud-link tag-link-113 tag-link-position-15" style="font-size: 1em;">GIS</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/hebrew" class="tag-cloud-link tag-link-99 tag-link-position-16" style="font-size: 1em;">Hebrew</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/higher-order-networks" class="tag-cloud-link tag-link-70 tag-link-position-17" style="font-size: 1em;">higher-order networks</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/iiif" class="tag-cloud-link tag-link-88 tag-link-position-18" style="font-size: 1em;">IIIF</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/json" class="tag-cloud-link tag-link-95 tag-link-position-19" style="font-size: 1em;">JSON</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/maps" class="tag-cloud-link tag-link-114 tag-link-position-20" style="font-size: 1em;">maps</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/neo4j" class="tag-cloud-link tag-link-104 tag-link-position-21" style="font-size: 1em;">Neo4j</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/network-analysis" class="tag-cloud-link tag-link-50 tag-link-position-22" style="font-size: 1em;">network analysis</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/networks" class="tag-cloud-link tag-link-102 tag-link-position-23" style="font-size: 1em;">networks</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/network-science" class="tag-cloud-link tag-link-20 tag-link-position-24" style="font-size: 1em;">Network science</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/network-theory" class="tag-cloud-link tag-link-55 tag-link-position-25" style="font-size: 1em;">network theory</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/nfdi" class="tag-cloud-link tag-link-81 tag-link-position-26" style="font-size: 1em;">NFDI</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/nlp" class="tag-cloud-link tag-link-129 tag-link-position-27" style="font-size: 1em;">NLP</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/ocr" class="tag-cloud-link tag-link-97 tag-link-position-28" style="font-size: 1em;">OCR</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/on-the-road" class="tag-cloud-link tag-link-117 tag-link-position-29" style="font-size: 1em;">on-the-road</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/orcid" class="tag-cloud-link tag-link-103 tag-link-position-30" style="font-size: 1em;">ORCID</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/programming" class="tag-cloud-link tag-link-154 tag-link-position-31" style="font-size: 1em;">programming</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/project-management" class="tag-cloud-link tag-link-110 tag-link-position-32" style="font-size: 1em;">project management</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/public-humanities" class="tag-cloud-link tag-link-85 tag-link-position-33" style="font-size: 1em;">Public Humanities</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/python" class="tag-cloud-link tag-link-92 tag-link-position-34" style="font-size: 1em;">Python</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/reires" class="tag-cloud-link tag-link-78 tag-link-position-35" style="font-size: 1em;">ReIReS</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/religious-studies" class="tag-cloud-link tag-link-74 tag-link-position-36" style="font-size: 1em;">religious studies</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/research-infrastructure" class="tag-cloud-link tag-link-80 tag-link-position-37" style="font-size: 1em;">Research infrastructure</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/reserach-data-management" class="tag-cloud-link tag-link-120 tag-link-position-38" style="font-size: 1em;">reserach data management</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/ruby" class="tag-cloud-link tag-link-105 tag-link-position-39" style="font-size: 1em;">Ruby</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/software-development" class="tag-cloud-link tag-link-83 tag-link-position-40" style="font-size: 1em;">software development</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/teaching" class="tag-cloud-link tag-link-90 tag-link-position-41" style="font-size: 1em;">teaching</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/transkribus" class="tag-cloud-link tag-link-98 tag-link-position-42" style="font-size: 1em;">Transkribus</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/twitter" class="tag-cloud-link tag-link-65 tag-link-position-43" style="font-size: 1em;">Twitter</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/wordcloud" class="tag-cloud-link tag-link-100 tag-link-position-44" style="font-size: 1em;">wordcloud</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/tag/xml" class="tag-cloud-link tag-link-94 tag-link-position-45" style="font-size: 1em;">XML</a></li> </ul> </div> </nav></section><section id="categories-3" class="widget widget_categories"><h2 class="widget-title">Categories</h2><nav role="navigation" aria-label="Categories"> <ul> <li class="cat-item cat-item-1"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/aktuelles">Aktuelles</a> (1) </li> <li class="cat-item cat-item-108"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/concept">Concept</a> (1) </li> <li class="cat-item cat-item-35"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/event-report" title="Reports of conferences, meetings and workshops">Event Report</a> (12) </li> <li class="cat-item cat-item-60"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/lab-report" title="Reflections on working and researching in the lab, reports from research projects.">Lab Report</a> (21) </li> <li class="cat-item cat-item-107"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/category/tutorial" title="Helpful statements and guides for the use of digital methods and tools in historical research">Tutorial</a> (3) </li> </ul> </nav></section><section id="custom_html-4" class="widget_text widget widget_custom_html"><h2 class="widget-title">Twitter</h2><div class="textwidget custom-html-widget"><a href="https://web.archive.org/web/20211030161402/https://twitter.com/search?q=%23DHLab_IEG">#DHLab_IEG</a></div></section><section id="meta-3" class="widget widget_meta"><h2 class="widget-title">Meta</h2> <ul> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/wp-login.php">Anmelden</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/feed" title="Syndicate this site using RSS 2.0">Entries <abbr title="Really Simple Syndication">RSS</abbr></a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/comments/feed" title="The latest comments to all posts in RSS">Comments <abbr title="Really Simple Syndication">RSS</abbr></a></li> <li><a href="https://web.archive.org/web/20211030161402/http://hypotheses.org/" title="Powered by Hypotheses">Hypotheses</a></li> </ul> </section><section id="archives-3" class="widget widget_archive"><h2 class="widget-title">Archive</h2><nav role="navigation" aria-label="Archive"> <ul> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/10">Oktober 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/09">September 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/07">Juli 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/06">Juni 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/05">Mai 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/04">April 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/03">März 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/02">Februar 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2021/01">Januar 2021</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/12">Dezember 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/11">November 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/10">Oktober 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/09">September 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/08">August 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/07">Juli 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/06">Juni 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/05">Mai 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/04">April 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/03">März 2020</a></li> <li><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/date/2020/02">Februar 2020</a></li> </ul> </nav></section><section id="text-3" class="widget widget_text"> <div class="textwidget"><p><a href="https://web.archive.org/web/20211030161402/http://dhlab.hypotheses.org/credits">Impressum</a></p> </div> </section> </aside><!-- .sidebar .widget-area --> </div><!-- .site-content --> <footer id="colophon" class="site-footer" role="contentinfo"> <nav class="main-navigation" role="navigation" aria-label="Primäres Footer-Menü"> <div class="menu-menue-container"><ul id="menu-menue-1" class="primary-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-145"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/das-dh-lab-am-ieg">About</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1140"><a href="https://web.archive.org/web/20211030161402/https://github.com/ieg-dhr">DH Lab @ GitHub</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1590"><a href="https://web.archive.org/web/20211030161402/https://www.zotero.org/groups/2449547/ieg_dh_lab/library">DH Lab @ Zotero</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1866"><a href="https://web.archive.org/web/20211030161402/https://soundcloud.com/transitsofmars/dh-lab">DH Lab – The Anthem</a></li> </ul></div> </nav><!-- .main-navigation --> <div class="site-info"> <span class="icon-hypotheses"></span>Ein Blog präsentiert von <a href="https://web.archive.org/web/20211030161402/https://hypotheses.org/" title="Hypotheses">Hypotheses</a> - <a href="https://web.archive.org/web/20211030161402/https://www.openedition.org/31967" title="Zum OpenEdition-Katalogeintrag">Zum OpenEdition-Katalogeintrag</a> - <a href="https://web.archive.org/web/20211030161402/https://www.openedition.org/19362?lang=en">Datenschutzerklärung</a><br/><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/feed" title="RSS">Syndication Feed</a> - <a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/credits">Impressum</a> - ISSN 2702-7368<br/> <span class="site-title"><a href="https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/" rel="home">Digital Humanities Lab</a></span> <a href="https://web.archive.org/web/20211030161402/https://de.wordpress.org/" class="imprint"> Stolz präsentiert von WordPress </a> </div><!-- .site-info --> </footer><!-- .site-footer --> </div><!-- .site-inner --> </div><!-- .site --> <!-- Piwik --> <script type="text/javascript"> var _paq = _paq || []; // tracker methods like "setCustomDimension" should be called before "trackPageView" _paq.push(['setCustomVariable', 1, 'Domain', document.domain, 'page']); _paq.push(['enableCrossDomainLinking']); _paq.push(["setDocumentTitle", document.domain + "/" + document.title]); _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://web.archive.org/web/20211030161402/https://pk.labocleo.org/"; _paq.push(['setTrackerUrl', u+'pk.php']); _paq.push(['setSiteId', '4']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'pk.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Piwik Code --> <script type="text/javascript"> (function( $ ) { 'use strict'; $(function() { $('body').prepend($('#ob-breadcrumb')); $('body').prepend($('#ob-search')); $('body').prepend($('#ob-header')); }); })(jQuery); </script> <script type="text/javascript" src="https://web.archive.org/web/20211030161402js_/https://static.openedition.org/openbarre_/scripts/main.js?date=2020-09-01"></script> <script type="text/javascript" src="https://web.archive.org/web/20211030161402js_/https://static.openedition.org/js/jquery.jsonp-latest.min.js"></script> <script type="text/javascript"><!-- jQuery(document).ready(function($) { if ($('#lodel-container').length == 1) { $('#ob-header, #ob-search, #ob-breadcrumb').remove(); } $('.ob-authdata').hide(); if (document.getElementById('authdata')) { document.getElementById('authdata').remove(); } }); function updateUrlParameter(uri, key, value) { // remove the hash part before operating on the uri var i = uri.indexOf('#'); var hash = i === -1 ? '' : uri.substr(i); uri = i === -1 ? uri : uri.substr(0, i); var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); var separator = uri.indexOf('?') !== -1 ? "&" : "?"; if (!value) { // remove key-value pair if value is empty uri = uri.replace(new RegExp("([&]?)" + key + "=.*?(&|$)", "i"), ''); if (uri.slice(-1) === '?') { uri = uri.slice(0, -1); } } else if (uri.match(re)) { uri = uri.replace(re, '$1' + key + "=" + value + '$2'); } else { uri = uri + separator + key + "=" + value; } return uri + hash; } function updateCurrentUrl(key,value) { window.location.assign(updateUrlParameter(window.location.href, key, value)); } --></script> <div id="ob-bar-opacity"></div> <div id="ob-search-modal-content" class="ob-modal"> <div class="ob-modal-content"> <div class="ob-modal-content-header"> <i class="ob-icons ob-icons-search-openedition" aria-hidden="true"></i> <button type="button" title="Schließen" id="ob-search-modal-close"><i class="ob-icons ob-icons-modal-close" aria-hidden="true"></i></button> </div> <script> (function( $ ) { 'use strict'; $(function() { $("input[name='s']").change(function() { var pfVal = $(this).val() == "" ? "" : "HO"; $("input[name='pf']").val(pfVal); }); }); })(jQuery); </script> <form action="https://web.archive.org/web/20211030161402/https://search.openedition.org/results" method="get"> <fieldset> <legend>Suche in OpenEdition Search</legend> <p>Sie werden weitergeleitet zur OpenEdition Search</p> <input class="ob-search-field" name="q" type="search" title="Begriff oder Schlüsselwort" placeholder="Begriff oder Schlüsselwort"> <div class="ob-form-group"> <input type="radio" id="choice-1" name="s" value=""/> <label for="choice-1">In alle OpenEdition</label> </div> <div class="ob-form-group"> <input type="radio" id="choice-2" name="s" value="Digital Humanities Lab" checked="checked"/> <input type="hidden" id="pf-1" name="pf" value="HO"> <label for="choice-2">In Digital Humanities Lab</label> </div> <button type="submit">Suche</button> </fieldset> </form> </div> </div> <div id="ob-header" class="ob-header-hypothesesorg ob-header-bottom-blog" role="banner"> <div class="ob-header-view"> <div class="ob-header-container"> <div class="ob-header-bottom"> <div class="ob-header-bottom-bar"> <div class="ob-header-bottom-row"> <div class="ob-header-bottom-logo"> <a href="https://web.archive.org/web/20211030161402/http://hypotheses.org/" title="Home" tabindex="1"><svg class="ob-icons ob-icons-logo hypothesesorg">"&gt; <use xlink:href="/web/20211030161402im_/https://dhlab.hypotheses.org/2191#icon-logo_hypothesesorg"></use> </svg></a> </div> <div class="ob-header-bottom-nav-container"> <div class="ob-header-bottom-nav-mobile"> <button type="button" id="ob-sidenav-button"> <i class="ob-icons ob-icons-hamb"></i> </button> </div> <div class="ob-header-bottom-nav nosearch"> <nav id="ob-mobile-sidenav" class="ob-header-main-nav"> <ul aria-hidden="true" role="menu" class="ob-mobile-sidenav"> <li role="menuitem" tabindex="-1"> <a href="https://web.archive.org/web/20211030161402/https://www.openedition.org/">TODO</a> </li> </ul> </nav> <a href="javascript:;" class="ob-search2-modal-open"> <span class="openedition-word-1">OpenEdition</span> <span class="openedition-word-2">Search</span> <i class="ob-icons ob-icons-search"></i> </a> </div> <div class="ob-header-bottom-tout-OE"> <div class="ob-header-bottom-tout-OE-content"> <button id="ob-grid-nav-content-open"> <span class="ob-all-openedition">Alle OpenEdition</span> <i class="ob-icons ob-icons-tout-OE"></i> </button> </div> </div> </div> </div> </div> </div> <nav id="ob-grid-nav-content" class="ob-header-bottom-tout-OE-content-dropdown"> <div class="ob-header-bottom-tout-OE-content-dropdown-nav"> <div class="ob-authdata ob-header-bottom-tout-OE-content-dropdown-nav-titles ob-header-bottom-tout-OE-foundation"></div> <span class="ob-gray-separator">Portal der elektronischen Ressourcen in den Geistes- und Sozialwissenschaften</span> <div class="ob-header-bottom-tout-OE-content-dropdown-nav-titles"> <a href="https://web.archive.org/web/20211030161402/https://www.openedition.org/" class="openedition-text">OpenEdition</a> </div> <span class="ob-gray-separator">Unsere Plattformen</span> <div class="ob-header-bottom-tout-OE-content-dropdown-nav-titles"> <a href="https://web.archive.org/web/20211030161402/https://books.openedition.org/" class="books-text">OpenEdition Books</a> <a href="https://web.archive.org/web/20211030161402/https://journals.openedition.org/" class="journals-text">OpenEdition Journals</a> <a href="https://web.archive.org/web/20211030161402/https://hypotheses.org/" class="hypotheses-text">Hypotheses</a> <a href="https://web.archive.org/web/20211030161402/https://calenda.org/" class="calenda-text">Calenda</a> </div> <span class="ob-gray-separator">Bibliotheken und Institutionen</span> <div class="ob-header-bottom-tout-OE-content-dropdown-nav-links"> <a href="https://web.archive.org/web/20211030161402/https://www.openedition.org/14043">OpenEdition Freemium</a> </div> <span class="ob-gray-separator">Unsere Dienstleistungen</span> <div class="ob-header-bottom-tout-OE-content-dropdown-nav-links"> <a href="https://web.archive.org/web/20211030161402/https://search.openedition.org/">OpenEdition Search</a> <a href="https://web.archive.org/web/20211030161402/https://newsletter.openedition.org/">Newsletter</a> </div> <span class="ob-gray-separator">Folgen Sie uns</span> <div class="ob-header-bottom-tout-OE-content-dropdown-nav-social"> <a href="https://web.archive.org/web/20211030161402/https://www.facebook.com/openedition" class="facebook" title="Facebook"> <i class="ob-icons ob-icons-facebook" aria-hidden="true"></i> </a> <a href="https://web.archive.org/web/20211030161402/https://twitter.com/OpenEditionActu" class="twitter" title="Twitter"> <i class="ob-icons ob-icons-twitter" aria-hidden="true"></i> </a> <a href="https://web.archive.org/web/20211030161402/https://www.openedition.org/backend" class="rss" title="Rss"> <i class="ob-icons ob-icons-rss" aria-hidden="true"></i> </a> </div> </div> </nav> </div> </div> </div> <svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <symbol id="icon-logo_books" viewbox="0 0 125 32"> <title>OpenEdition Books</title> <path fill="#93117e" style="fill: var(--color15, #93117e)" d="M39.658 1.37c3.455 0 5.416 2.335 5.416 5.665s-1.899 5.728-5.416 5.728c-3.549 0-5.416-2.366-5.416-5.728 0.031-3.362 1.93-5.665 5.416-5.665zM39.658 11.051c2.272 0 3.082-1.992 3.082-3.984 0-1.93-0.903-3.922-3.082-3.922-2.21 0-3.082 1.992-3.082 3.922 0 1.961 0.84 3.984 3.082 3.984z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M46.91 4.451h2.023v1.152h0.031c0.467-0.778 1.276-1.339 2.521-1.339 2.49 0 3.424 1.992 3.424 4.233s-0.903 4.296-3.455 4.296c-0.903 0-1.65-0.218-2.397-1.121h-0.031v4.265h-2.117v-11.486zM49.027 8.498c0 1.152 0.467 2.646 1.868 2.646s1.774-1.525 1.774-2.646c0-1.090-0.374-2.584-1.743-2.584s-1.899 1.463-1.899 2.584z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M63.066 12.14c-0.778 0.436-1.65 0.654-2.802 0.654-2.677 0-4.265-1.556-4.265-4.233 0-2.366 1.245-4.296 3.767-4.296 3.019 0 3.86 2.054 3.86 4.918h-5.634c0.093 1.307 0.996 2.054 2.335 2.054 1.027 0 1.899-0.374 2.708-0.809v1.712zM61.665 7.72c-0.062-1.027-0.529-1.899-1.712-1.899s-1.774 0.809-1.868 1.899h3.58z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M65.339 4.451h1.992v1.121h0.031c0.654-0.934 1.556-1.307 2.677-1.307 1.93 0 2.77 1.37 2.77 3.206v5.136h-2.117v-4.358c0-0.996-0.031-2.335-1.37-2.335-1.525 0-1.868 1.65-1.868 2.708v3.984h-2.117v-8.156z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M75.175 1.556h6.506v1.743h-4.296v2.708h3.922v1.743h-3.922v3.113h4.327v1.743h-6.537z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M89.183 11.673h-0.031c-0.623 0.778-1.494 1.121-2.49 1.121-2.49 0-3.424-2.054-3.424-4.296s0.903-4.233 3.424-4.233c1.058 0 1.805 0.374 2.428 1.152h0.031v-4.669h2.117v11.86h-2.054v-0.934zM87.222 11.144c1.401 0 1.868-1.494 1.868-2.646s-0.529-2.584-1.899-2.584c-1.37 0-1.743 1.494-1.743 2.584 0 1.121 0.405 2.646 1.774 2.646z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M93.447 0.965h2.117v2.023h-2.117v-2.023zM93.447 4.451h2.117v8.125h-2.117v-8.124z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M98.49 6.008h-1.556v-1.556h1.556v-1.619l2.117-0.685v2.304h1.868v1.556h-1.868v3.798c0 0.685 0.187 1.339 0.996 1.339 0.374 0 0.747-0.093 0.965-0.218l0.062 1.681c-0.436 0.124-0.934 0.187-1.556 0.187-1.65 0-2.584-1.027-2.584-2.646v-4.14z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M104 0.965h2.117v2.023h-2.117v-2.023zM104 4.451h2.117v8.125h-2.117v-8.124z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M112.062 4.265c2.428 0 4.265 1.619 4.265 4.327 0 2.335-1.556 4.202-4.265 4.202-2.677 0-4.233-1.868-4.233-4.202-0.031-2.708 1.837-4.327 4.233-4.327zM112.062 11.144c1.619 0 2.054-1.463 2.054-2.802 0-1.245-0.654-2.428-2.054-2.428-1.37 0-2.023 1.214-2.023 2.428 0 1.339 0.405 2.802 2.023 2.802z"></path><path fill="#93117e" style="fill: var(--color15, #93117e)" d="M117.977 4.451h1.992v1.121h0.031c0.654-0.934 1.556-1.307 2.677-1.307 1.93 0 2.77 1.37 2.77 3.206v5.136h-2.117v-4.358c0-0.996-0.031-2.335-1.37-2.335-1.525 0-1.868 1.65-1.868 2.708v3.984h-2.117v-8.156z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M16.093 32c5.323 0.156 10.459-2.926 12.7-8.124 0 0 0-0.031 0-0.031-7.035-0.374-12.607 6.973-12.7 8.156z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M0 20.389c5.323 0.062 10.335 3.331 12.358 8.623 0 0 0 0.031 0 0.031-7.035 0.093-12.14-6.039-12.358-8.654z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M14.163 17.307c-3.673-1.494-5.323-4.825-4.14-7.751 1.027-2.521 3.735-3.642 5.977-2.739 2.584 1.027 3.642 3.86 2.708 6.226-0.467 1.152-1.432 2.086-2.397 2.833 3.673 1.339 7.782 0.124 9.121-1.868 1.65-2.49-0.374-7.315-0.374-7.315-1.121-2.49-3.144-4.607-6.163-5.821-6.101-2.459-12.981 0.467-15.409 6.537-2.428 6.039 0.498 12.918 6.537 15.377 0.903 0.374 1.805 0.591 2.739 0.747l0.809 8.498h1.494l0.809-8.467c4.14-0.529 7.876-3.206 9.525-7.346 0 0 0 0 0-0.031-2.802 1.743-6.973 2.833-11.237 1.121z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M36.669 18.708c0-1.090-0.062-1.401-0.716-1.432l-0.467-0.031c-0.124-0.093-0.093-0.311 0-0.374 0.809-0.062 1.805-0.125 3.206-0.125 0.934 0 1.837 0.062 2.49 0.405 0.654 0.311 1.121 0.903 1.121 1.868 0 1.058-0.623 1.619-1.525 2.054 0 0.156 0.124 0.187 0.28 0.218 0.809 0.156 1.992 0.903 1.992 2.49 0 1.743-1.276 2.895-3.953 2.895-0.436 0-1.152-0.031-1.805-0.031s-1.152 0.031-1.712 0.031c-0.093-0.031-0.124-0.28-0.031-0.374l0.28-0.031c0.778-0.125 0.809-0.311 0.809-1.868v-5.697zM37.883 20.7c0 0.405 0 0.436 0.778 0.405 1.525-0.062 2.335-0.498 2.335-1.899 0-1.463-1.090-2.023-2.21-2.023-0.342 0-0.56 0.031-0.685 0.093-0.156 0.031-0.218 0.125-0.218 0.374v3.051zM37.883 24.156c0 0.529 0.031 1.307 0.311 1.619 0.28 0.342 0.716 0.405 1.183 0.405 1.339 0 2.335-0.591 2.335-2.086 0-1.183-0.591-2.553-2.957-2.553-0.809 0-0.872 0.093-0.872 0.374v2.241z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M50.521 23.626c0 1.868-1.276 3.206-3.144 3.206-1.712 0-3.051-1.214-3.051-3.082s1.432-3.237 3.175-3.237c1.65 0.031 3.019 1.276 3.019 3.113zM47.315 20.981c-0.996 0-1.712 0.934-1.712 2.584 0 1.37 0.623 2.833 1.93 2.833s1.712-1.37 1.712-2.521c-0.031-1.276-0.529-2.895-1.93-2.895z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M57.743 23.626c0 1.868-1.276 3.206-3.144 3.206-1.712 0-3.051-1.214-3.051-3.082s1.432-3.237 3.175-3.237c1.681 0.031 3.019 1.276 3.019 3.113zM54.537 20.981c-0.996 0-1.712 0.934-1.712 2.584 0 1.37 0.623 2.833 1.93 2.833s1.712-1.37 1.712-2.521c0-1.276-0.498-2.895-1.93-2.895z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M59.58 18.21c0-0.872 0-0.965-0.467-1.245l-0.156-0.093c-0.062-0.031-0.062-0.249 0-0.311 0.374-0.125 1.090-0.342 1.619-0.623 0.062 0 0.124 0.031 0.156 0.093 0 0.436-0.031 1.183-0.031 1.837v5.105c0 0.187 0 0.218 0.28 0.218 0.342 0 0.623-0.156 1.027-0.591l0.623-0.654c0.405-0.436 0.529-0.623 0.529-0.685s-0.062-0.125-0.342-0.156l-0.374-0.031c-0.124-0.031-0.124-0.342 0-0.374h0.342c0.654 0 1.525-0.031 2.366-0.125 0.093 0.031 0.124 0.311 0.031 0.374l-0.467 0.093c-0.311 0.062-0.56 0.218-0.934 0.529-0.591 0.467-1.090 0.996-1.37 1.245-0.187 0.156-0.187 0.249-0.093 0.342 0.249 0.342 0.498 0.623 0.996 1.183 0.591 0.654 1.089 1.245 1.401 1.525 0.218 0.187 0.498 0.28 0.778 0.342l0.218 0.031c0.093 0.062 0.093 0.342-0.031 0.374-0.436-0.031-0.934-0.031-1.432-0.031-0.591 0-1.121 0-1.556 0.031-0.124-0.062-0.124-0.311-0.031-0.374l0.28-0.031c0.218-0.031 0.374-0.062 0.374-0.156s-0.062-0.187-0.249-0.405l-1.588-1.837c-0.124-0.156-0.311-0.218-0.467-0.218-0.28 0-0.28 0.031-0.28 0.498v0.809c0 1.090 0.031 1.214 0.56 1.307l0.342 0.031c0.093 0.062 0.062 0.342-0.031 0.374-0.498-0.031-0.934-0.031-1.432-0.031-0.529 0-0.996 0-1.432 0.031-0.093-0.031-0.124-0.311 0-0.374l0.342-0.031c0.56-0.062 0.56-0.218 0.56-1.307v-6.693z"></path><path fill="#b73288" style="fill: var(--color10, #b73288)" d="M69.541 20.794c0.124 0.342 0.249 0.809 0.249 1.214-0.062 0.093-0.28 0.125-0.374 0.031-0.249-0.654-0.716-1.090-1.307-1.090s-0.965 0.374-0.965 0.903c0 0.623 0.623 0.934 1.152 1.245 0.778 0.436 1.525 0.965 1.525 2.023 0 1.121-1.058 1.712-2.148 1.712-0.716 0-1.214-0.156-1.588-0.436-0.124-0.28-0.218-1.027-0.187-1.494 0.062-0.093 0.28-0.093 0.342 0 0.249 0.809 0.716 1.525 1.588 1.525 0.529 0 0.996-0.311 0.996-0.965 0-0.685-0.591-1.058-1.152-1.37-0.872-0.498-1.463-1.027-1.463-1.837 0-1.090 0.903-1.712 2.023-1.712 0.623 0 1.183 0.156 1.307 0.249z"></path> </symbol> <symbol id="icon-logo_calenda" viewbox="0 0 100 32"> <title>Calenda</title> <path fill="#fff" style="fill: var(--color1, #fff)" d="M42.903 19.856c-0.886 0.177-1.95 0.355-2.837 0.355-4.078 0-6.914-2.039-6.914-6.294 0-4.343 2.659-6.737 6.914-6.737 0.798 0 1.95 0.177 2.837 0.532l-0.177 2.127c-0.975-0.532-1.773-0.709-2.748-0.709-2.571 0-4.166 1.95-4.166 4.521s1.596 4.521 4.255 4.521c0.975 0 2.127-0.177 2.748-0.532l0.089 2.216z"></path><path fill="#fff" style="fill: var(--color1, #fff)" d="M44.942 11.258c0.975-0.443 2.216-0.709 3.191-0.709 2.837 0 3.989 1.152 3.989 3.9v1.152c0 0.975 0 1.596 0 2.305s0.089 1.33 0.089 2.039h-2.127c-0.089-0.443-0.089-1.064-0.089-1.418v0c-0.532 1.064-1.773 1.596-2.837 1.596-1.596 0-3.28-0.975-3.28-2.748 0-1.418 0.709-2.216 1.596-2.659s2.127-0.532 3.102-0.532h1.33c0-1.507-0.709-2.039-2.127-2.039-1.064 0-2.039 0.355-2.837 0.975v-1.861zM47.778 18.526c0.709 0 1.33-0.355 1.684-0.798 0.355-0.532 0.532-1.152 0.532-1.95h-1.064c-1.064 0-2.659 0.177-2.659 1.596 0 0.798 0.709 1.152 1.507 1.152z"></path><path fill="#fff" style="fill: var(--color1, #fff)" d="M54.604 6.56h2.393v13.474h-2.393v-13.474z"></path><path fill="#fff" style="fill: var(--color1, #fff)" d="M67.014 19.501c-0.886 0.443-1.862 0.709-3.191 0.709-3.102 0-4.875-1.773-4.875-4.787 0-2.659 1.418-4.875 4.343-4.875 3.457 0 4.432 2.393 4.432 5.584h-6.382c0.089 1.507 1.152 2.305 2.659 2.305 1.152 0 2.216-0.443 3.103-0.975v2.039zM65.418 14.537c-0.089-1.152-0.621-2.216-1.95-2.216s-2.039 0.975-2.127 2.216h4.078z"></path><path fill="#fff" style="fill: var(--color1, #fff)" d="M69.585 10.814h2.305v1.241c0.798-1.064 1.773-1.507 3.014-1.507 2.216 0 3.191 1.507 3.191 3.634v5.85h-2.393v-4.964c0-1.152 0-2.659-1.596-2.659-1.773 0-2.127 1.861-2.127 3.103v4.521h-2.393v-9.219z"></path><path fill="#fff" style="fill: var(--color1, #fff)" d="M86.781 18.97v0c-0.798 0.886-1.773 1.241-2.837 1.241-2.837 0-3.9-2.305-3.9-4.875s1.064-4.787 3.9-4.787c1.241 0 2.039 0.443 2.748 1.33v0-5.319h2.393v13.474h-2.305v-1.064zM84.565 18.349c1.596 0 2.127-1.684 2.127-3.014s-0.621-2.925-2.127-2.925c-1.596 0-2.039 1.684-2.039 2.925 0 1.33 0.443 3.014 2.039 3.014z"></path><path fill="#fff" style="fill: var(--color1, #fff)" d="M92.011 11.258c0.975-0.443 2.216-0.709 3.191-0.709 2.837 0 3.989 1.152 3.989 3.9v1.152c0 0.975 0 1.596 0 2.305s0.089 1.33 0.089 2.039h-2.127c-0.089-0.443-0.089-1.064-0.089-1.418v0c-0.532 1.064-1.773 1.596-2.837 1.596-1.596 0-3.28-0.975-3.28-2.748 0-1.418 0.709-2.216 1.596-2.659s2.127-0.532 3.103-0.532h1.33c0-1.507-0.709-2.039-2.127-2.039-1.064 0-2.039 0.355-2.837 0.975v-1.861zM94.848 18.526c0.709 0 1.33-0.355 1.684-0.798 0.355-0.532 0.532-1.152 0.532-1.95h-1.064c-1.064 0-2.659 0.177-2.659 1.596-0.089 0.798 0.621 1.152 1.507 1.152z"></path><path fill="#6faa46" style="fill: var(--color16, #6faa46)" d="M42.903 19.856c-0.886 0.177-1.95 0.355-2.837 0.355-4.078 0-6.914-2.039-6.914-6.294 0-4.343 2.659-6.737 6.914-6.737 0.798 0 1.95 0.177 2.837 0.532l-0.177 2.127c-0.975-0.532-1.773-0.709-2.748-0.709-2.571 0-4.166 1.95-4.166 4.521s1.596 4.521 4.255 4.521c0.975 0 2.127-0.177 2.748-0.532l0.089 2.216z"></path><path fill="#6faa46" style="fill: var(--color16, #6faa46)" d="M44.942 11.258c0.975-0.443 2.216-0.709 3.191-0.709 2.837 0 3.989 1.152 3.989 3.9v1.152c0 0.975 0 1.596 0 2.305s0.089 1.33 0.089 2.039h-2.127c-0.089-0.443-0.089-1.064-0.089-1.418v0c-0.532 1.064-1.773 1.596-2.837 1.596-1.596 0-3.28-0.975-3.28-2.748 0-1.418 0.709-2.216 1.596-2.659s2.127-0.532 3.102-0.532h1.33c0-1.507-0.709-2.039-2.127-2.039-1.064 0-2.039 0.355-2.837 0.975v-1.861zM47.778 18.526c0.709 0 1.33-0.355 1.684-0.798 0.355-0.532 0.532-1.152 0.532-1.95h-1.064c-1.064 0-2.659 0.177-2.659 1.596 0 0.798 0.709 1.152 1.507 1.152z"></path><path fill="#6faa46" style="fill: var(--color16, #6faa46)" d="M54.604 6.56h2.393v13.474h-2.393v-13.474z"></path><path fill="#6faa46" style="fill: var(--color16, #6faa46)" d="M67.014 19.501c-0.886 0.443-1.862 0.709-3.191 0.709-3.102 0-4.875-1.773-4.875-4.787 0-2.659 1.418-4.875 4.343-4.875 3.457 0 4.432 2.393 4.432 5.584h-6.382c0.089 1.507 1.152 2.305 2.659 2.305 1.152 0 2.216-0.443 3.103-0.975v2.039zM65.418 14.537c-0.089-1.152-0.621-2.216-1.95-2.216s-2.039 0.975-2.127 2.216h4.078z"></path><path fill="#6faa46" style="fill: var(--color16, #6faa46)" d="M69.585 10.814h2.305v1.241c0.798-1.064 1.773-1.507 3.014-1.507 2.216 0 3.191 1.507 3.191 3.634v5.85h-2.393v-4.964c0-1.152 0-2.659-1.596-2.659-1.773 0-2.127 1.861-2.127 3.103v4.521h-2.393v-9.219z"></path><path fill="#6faa46" style="fill: var(--color16, #6faa46)" d="M86.781 18.97v0c-0.798 0.886-1.773 1.241-2.837 1.241-2.837 0-3.9-2.305-3.9-4.875s1.064-4.787 3.9-4.787c1.241 0 2.039 0.443 2.748 1.33v0-5.319h2.393v13.474h-2.305v-1.064zM84.565 18.349c1.596 0 2.127-1.684 2.127-3.014s-0.621-2.925-2.127-2.925c-1.596 0-2.039 1.684-2.039 2.925 0 1.33 0.443 3.014 2.039 3.014z"></path><path fill="#6faa46" style="fill: var(--color16, #6faa46)" d="M92.011 11.258c0.975-0.443 2.216-0.709 3.191-0.709 2.837 0 3.989 1.152 3.989 3.9v1.152c0 0.975 0 1.596 0 2.305s0.089 1.33 0.089 2.039h-2.127c-0.089-0.443-0.089-1.064-0.089-1.418v0c-0.532 1.064-1.773 1.596-2.837 1.596-1.596 0-3.28-0.975-3.28-2.748 0-1.418 0.709-2.216 1.596-2.659s2.127-0.532 3.103-0.532h1.33c0-1.507-0.709-2.039-2.127-2.039-1.064 0-2.039 0.355-2.837 0.975v-1.861zM94.848 18.526c0.709 0 1.33-0.355 1.684-0.798 0.355-0.532 0.532-1.152 0.532-1.95h-1.064c-1.064 0-2.659 0.177-2.659 1.596-0.089 0.798 0.621 1.152 1.507 1.152z"></path><path fill="#8ebc23" style="fill: var(--color17, #8ebc23)" d="M16.044 32c5.319 0.177 10.46-2.925 12.676-8.066 0 0 0 0 0 0-7.003-0.443-12.499 6.825-12.676 8.066z"></path><path fill="#8ebc23" style="fill: var(--color17, #8ebc23)" d="M0 20.388c5.319 0.089 10.371 3.28 12.321 8.598 0 0 0 0 0 0-7.003 0.089-12.055-6.028-12.321-8.598z"></path><path fill="#8ebc23" style="fill: var(--color17, #8ebc23)" d="M14.183 17.285c-3.634-1.507-5.319-4.787-4.166-7.712 0.975-2.482 3.723-3.634 5.939-2.748 2.571 1.064 3.634 3.9 2.659 6.205-0.443 1.152-1.418 2.127-2.393 2.837 3.634 1.33 7.801 0.089 9.13-1.861 1.596-2.482-0.355-7.357-0.355-7.357-1.152-2.482-3.102-4.609-6.116-5.85-6.116-2.393-12.942 0.532-15.424 6.56-2.393 6.028 0.532 12.942 6.56 15.335 0.886 0.355 1.773 0.62 2.748 0.709l0.798 8.51h1.507l0.798-8.51c4.078-0.532 7.801-3.191 9.485-7.269 0 0 0 0 0 0-2.748 1.773-6.914 2.837-11.169 1.152z"></path> </symbol> <symbol id="icon-logo_hypothesesorg" viewbox="0 0 140 32"> <title>Hypothèses</title> <path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M33.941 6.353h2.765v5.529h5.471v-5.529h2.765v13.706h-2.765v-6h-5.471v6h-2.765v-13.706z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M52.059 17.353v0l2.471-7.353h2.647l-3.765 10c-0.824 2.235-1.471 4.412-4.176 4.412-0.647 0-1.235-0.118-1.882-0.294l0.176-1.941c0.353 0.118 0.706 0.176 1.353 0.176 1.059 0 1.706-0.706 1.706-1.824l-3.882-10.588h2.882l2.471 7.412z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M58.765 9.941h2.529v1.412h0.059c0.588-1 1.588-1.647 3.118-1.647 3.118 0 4.235 2.471 4.235 5.235s-1.118 5.294-4.294 5.294c-1.118 0-2.059-0.294-2.941-1.412h-0.059v5.294h-2.647v-14.176zM61.412 15c0 1.412 0.588 3.294 2.294 3.294s2.235-1.882 2.235-3.294c0-1.353-0.471-3.235-2.176-3.235s-2.353 1.824-2.353 3.235z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M75.353 9.706c3 0 5.294 2 5.294 5.353 0 2.882-1.941 5.235-5.294 5.235s-5.294-2.294-5.294-5.235c0-3.294 2.294-5.353 5.294-5.353zM75.353 18.235c2 0 2.529-1.824 2.529-3.471 0-1.529-0.824-3-2.529-3s-2.529 1.471-2.529 3c0 1.647 0.529 3.471 2.529 3.471z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M83.588 11.882h-1.941v-1.941h1.941v-2l2.647-0.824v2.882h2.353v1.941h-2.353v4.706c0 0.882 0.235 1.647 1.235 1.647 0.471 0 0.941-0.118 1.176-0.294l0.059 2.059c-0.529 0.176-1.176 0.235-1.941 0.235-2.059 0-3.176-1.294-3.176-3.294v-5.118z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M90.353 5.353h2.647v6h0.059c0.647-1 1.824-1.588 3.176-1.588 2.412 0 3.412 1.706 3.412 3.941v6.353h-2.647v-5.412c0-1.235 0-2.882-1.706-2.882-1.882 0-2.294 2.059-2.294 3.353v4.941h-2.647v-14.706z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M110.412 19.471c-0.941 0.529-2.059 0.824-3.471 0.824-3.353 0-5.294-1.941-5.294-5.235 0-2.941 1.529-5.353 4.706-5.353 3.765 0 4.824 2.588 4.824 6.118h-7c0.118 1.647 1.235 2.529 2.882 2.529 1.294 0 2.353-0.471 3.353-1v2.118zM108.647 14c-0.059-1.294-0.647-2.353-2.118-2.353s-2.235 1-2.353 2.353h4.471z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M119.176 12.059c-0.824-0.294-1.412-0.412-2.353-0.412-0.706 0-1.529 0.235-1.529 1.118 0 1.588 4.588 0.588 4.588 4.235 0 2.353-2.118 3.294-4.235 3.294-1 0-2-0.176-3-0.412l0.176-2.176c0.824 0.412 1.706 0.647 2.588 0.647 0.647 0 1.706-0.235 1.706-1.235 0-2-4.588-0.647-4.588-4.294 0-2.176 1.882-3.118 3.941-3.118 1.235 0 2.059 0.176 2.882 0.353l-0.176 2z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M130 19.471c-0.941 0.529-2.059 0.824-3.471 0.824-3.353 0-5.294-1.941-5.294-5.235 0-2.941 1.529-5.353 4.706-5.353 3.765 0 4.824 2.588 4.824 6.118h-7c0.118 1.647 1.235 2.529 2.882 2.529 1.294 0 2.353-0.471 3.353-1v2.118zM128.235 14c-0.059-1.294-0.647-2.353-2.118-2.353s-2.235 1-2.353 2.353h4.471z"></path><path fill="#cc071e" style="fill: var(--color18, #cc071e)" d="M138.824 12.059c-0.824-0.294-1.412-0.412-2.353-0.412-0.706 0-1.529 0.235-1.529 1.118 0 1.588 4.588 0.588 4.588 4.235 0 2.353-2.118 3.294-4.235 3.294-1 0-2-0.176-3-0.412l0.176-2.176c0.824 0.412 1.706 0.647 2.588 0.647 0.647 0 1.706-0.235 1.706-1.235 0-2-4.588-0.647-4.588-4.294 0-2.176 1.882-3.118 3.941-3.118 1.235 0 2.059 0.176 2.882 0.353l-0.176 2z"></path><path fill="#ec5a4f" style="fill: var(--color19, #ec5a4f)" d="M16.059 32c5.353 0.176 10.471-2.882 12.706-8.118 0 0 0 0 0 0-7.059-0.412-12.588 6.882-12.706 8.118z"></path><path fill="#ec5a4f" style="fill: var(--color19, #ec5a4f)" d="M0 20.353c5.353 0.059 10.353 3.294 12.353 8.588 0 0 0 0 0 0-7.059 0.176-12.118-5.941-12.353-8.588z"></path><path fill="#ec5a4f" style="fill: var(--color19, #ec5a4f)" d="M14.176 17.294c-3.647-1.471-5.353-4.824-4.176-7.765 1-2.529 3.706-3.647 5.941-2.706 2.588 1.059 3.647 3.882 2.706 6.235-0.471 1.176-1.412 2.059-2.412 2.824 3.647 1.353 7.765 0.118 9.118-1.882 1.647-2.471-0.353-7.294-0.353-7.294-1.118-2.529-3.118-4.647-6.176-5.824-6.059-2.412-12.941 0.471-15.353 6.529-2.412 6 0.529 12.882 6.529 15.353 0.882 0.353 1.824 0.588 2.706 0.765l0.824 8.471h1.529l0.824-8.471c4.118-0.529 7.824-3.176 9.529-7.294 0 0 0 0 0 0-2.824 1.706-7 2.765-11.235 1.059z"></path> </symbol> <symbol id="icon-logo_wwwrevuesorg" viewbox="0 0 125 32"> <title>OpenEdition Journals</title> <path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M39.669 1.41c3.438 0 5.377 2.292 5.377 5.642s-1.939 5.73-5.377 5.73c-3.526 0-5.377-2.38-5.377-5.73s1.851-5.642 5.377-5.642zM39.669 11.019c2.292 0 3.085-2.028 3.085-3.967s-0.882-3.967-3.085-3.967c-2.204 0-3.085 2.028-3.085 3.967 0 2.028 0.793 3.967 3.085 3.967z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M46.898 4.496h2.028v1.146c0.441-0.793 1.322-1.322 2.556-1.322 2.468 0 3.438 2.028 3.438 4.231s-0.882 4.231-3.438 4.231c-0.882 0-1.675-0.176-2.38-1.146v0 4.231h-2.116v-11.372zM49.014 8.551c0 1.146 0.441 2.645 1.851 2.645s1.763-1.499 1.763-2.645c0-1.058-0.353-2.556-1.763-2.556-1.322-0.088-1.851 1.41-1.851 2.556z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M63.030 12.165c-0.793 0.441-1.675 0.617-2.821 0.617-2.645 0-4.231-1.587-4.231-4.231 0-2.38 1.234-4.32 3.791-4.32 2.997 0 3.879 2.028 3.879 4.937h-5.642c0.088 1.322 0.97 2.028 2.292 2.028 1.058 0 1.939-0.353 2.733-0.793v1.763zM61.62 7.758c-0.088-1.058-0.529-1.939-1.675-1.939s-1.763 0.793-1.851 1.939h3.526z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M65.234 4.496h2.028v1.146c0.705-0.97 1.587-1.322 2.645-1.322 1.939 0 2.733 1.322 2.733 3.174v5.113h-2.116v-4.32c0-0.97 0-2.292-1.41-2.292-1.499 0-1.851 1.675-1.851 2.733v3.967h-2.028v-8.198z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M75.107 1.587h6.523v1.763h-4.32v2.645h3.879v1.763h-3.879v3.085h4.32v1.763h-6.523z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M89.124 11.636v0c-0.705 0.793-1.499 1.146-2.556 1.146-2.468 0-3.438-2.028-3.438-4.231s0.882-4.231 3.438-4.231c1.058 0 1.763 0.353 2.468 1.146v0-4.672h2.116v11.813h-2.028v-0.97zM87.185 11.107c1.41 0 1.851-1.499 1.851-2.645s-0.529-2.556-1.851-2.556c-1.41 0-1.763 1.499-1.763 2.556-0.088 1.146 0.353 2.645 1.763 2.645z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M93.355 0.97h2.116v2.028h-2.116v-2.028zM93.355 4.496h2.116v8.11h-2.116v-8.11z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M98.38 5.995h-1.587v-1.499h1.587v-1.675l2.116-0.705v2.292h1.851v1.587h-1.851v3.791c0 0.705 0.176 1.322 0.97 1.322 0.353 0 0.705-0.088 0.97-0.176l0.088 1.675c-0.441 0.088-0.97 0.176-1.587 0.176-1.675 0-2.556-1.058-2.556-2.645v-4.143z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M103.846 0.97h2.116v2.028h-2.116v-2.028zM103.846 4.496h2.116v8.11h-2.116v-8.11z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M111.956 4.32c2.38 0 4.231 1.587 4.231 4.32 0 2.292-1.587 4.231-4.231 4.231s-4.231-1.851-4.231-4.231c0-2.733 1.851-4.32 4.231-4.32zM111.956 11.107c1.587 0 2.028-1.41 2.028-2.821 0-1.234-0.705-2.38-2.028-2.38-1.41 0-2.028 1.234-2.028 2.38 0 1.41 0.353 2.821 2.028 2.821z"></path><path fill="#0089b5" style="fill: var(--color20, #0089b5)" d="M117.862 4.496h2.028v1.146c0.705-0.97 1.587-1.322 2.645-1.322 1.939 0 2.733 1.322 2.733 3.174v5.113h-2.116v-4.32c0-0.97 0-2.292-1.41-2.292-1.499 0-1.851 1.675-1.851 2.733v3.967h-2.116v-8.198z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M16.044 32c5.377 0.176 10.49-2.909 12.694-8.11 0 0 0 0 0 0-6.964-0.441-12.518 6.964-12.694 8.11z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M0 20.364c5.377 0.088 10.314 3.35 12.342 8.639 0 0 0 0 0 0-7.052 0.088-12.077-5.995-12.342-8.639z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M14.193 17.278c-3.702-1.499-5.377-4.848-4.143-7.758 1.058-2.556 3.702-3.614 5.995-2.733 2.556 1.058 3.614 3.879 2.733 6.259-0.441 1.146-1.41 2.116-2.38 2.821 3.702 1.322 7.758 0.088 9.080-1.851 1.675-2.468-0.353-7.317-0.353-7.317-1.146-2.468-3.174-4.584-6.171-5.818-6.171-2.468-13.047 0.441-15.427 6.523-2.468 6.083 0.529 12.959 6.523 15.339 0.882 0.353 1.851 0.617 2.733 0.705l0.793 8.551h1.499l0.793-8.463c4.143-0.529 7.846-3.174 9.521-7.317 0 0 0 0 0 0-2.821 1.675-6.964 2.821-11.196 1.058z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M36.849 18.953c0-1.675-0.176-1.851-1.058-1.851h-0.353c-0.088-0.088-0.088-0.353 0-0.353 0.882 0 1.322 0.088 1.939 0.088s1.058 0 1.675-0.088c0.088 0.088 0.088 0.353 0 0.353h-0.264c-0.882 0.088-0.882 0.353-0.882 1.851v5.466c0 1.146-0.088 2.204-0.353 2.821-0.529 1.146-1.499 2.116-2.909 2.116-0.176 0-0.617 0-0.617-0.264s0.176-0.705 0.529-0.705c0.176 0 0.353 0 0.529 0.088s0.441 0.088 0.617 0.088c0.353 0 0.529-0.176 0.617-0.353 0.353-0.705 0.353-2.909 0.353-3.702v-5.554z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M46.017 23.449c0 1.851-1.234 3.174-3.085 3.174-1.675 0-2.997-1.146-2.997-2.997s1.41-3.174 3.174-3.174c1.587-0.088 2.909 1.146 2.909 2.997zM42.843 20.804c-0.97 0-1.675 0.97-1.675 2.556 0 1.322 0.617 2.821 1.939 2.821s1.675-1.322 1.675-2.468c0-1.322-0.529-2.909-1.939-2.909z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M48.837 24.242c0 1.058 0.264 1.675 1.41 1.675 0.441 0 0.882-0.176 1.234-0.441 0.176-0.176 0.264-0.353 0.264-0.882v-2.38c0-0.97-0.088-0.97-0.529-1.146l-0.176-0.088c-0.088-0.088-0.088-0.264 0-0.353 0.617 0 1.41-0.088 1.763-0.264 0.088 0 0.088 0.088 0.176 0.088 0 0.264-0.088 0.705-0.088 1.322v2.468c0 1.146 0.088 1.587 0.441 1.587 0.176 0 0.353 0 0.617-0.088 0.088 0.088 0.088 0.353 0 0.441-0.529 0.088-1.41 0.264-1.939 0.529-0.088 0-0.176 0-0.176-0.088v-0.617c0-0.176-0.088-0.176-0.088-0.176-0.441 0.264-1.146 0.793-2.028 0.793-1.322 0-1.763-0.617-1.763-1.851v-2.468c0-0.882 0-1.058-0.441-1.234l-0.176-0.088c-0.088-0.088-0.088-0.264 0-0.353 0.705 0 1.234-0.176 1.587-0.264 0.088 0 0.088 0.088 0.176 0.088 0 0.264-0.088 0.529-0.088 1.322v2.468z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M55.537 22.127c0-0.529 0-0.617-0.441-0.882l-0.088-0.088c-0.088-0.088-0.088-0.264 0-0.264 0.353-0.088 1.146-0.529 1.499-0.705 0.088 0 0.088 0.088 0.088 0.088v0.882c0 0.088 0 0.088 0.088 0.176 0.529-0.441 1.058-0.882 1.587-0.882 0.353 0 0.705 0.264 0.705 0.617 0 0.529-0.353 0.705-0.617 0.705-0.176 0-0.176 0-0.353-0.088-0.176-0.176-0.441-0.264-0.617-0.264-0.264 0-0.441 0.176-0.529 0.264-0.176 0.176-0.176 0.617-0.176 1.146v2.028c0 1.058 0 1.234 0.617 1.322l0.529 0.088c0.088 0.088 0.088 0.353 0 0.353-0.705 0-1.146 0-1.675 0s-0.97 0-1.322 0c-0.088 0-0.088-0.264 0-0.353l0.264-0.088c0.529-0.088 0.529-0.176 0.529-1.322v-2.733z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M60.386 22.127c0-0.529 0-0.617-0.441-0.882l-0.088-0.088c-0.088-0.088-0.088-0.264 0-0.264 0.353-0.088 1.146-0.529 1.499-0.705 0.088 0 0.088 0 0.176 0.088 0 0.353 0 0.529 0 0.705 0 0.088 0.088 0.176 0.176 0.176 0.617-0.353 1.322-0.793 2.028-0.793 1.234 0 1.763 0.882 1.763 1.851v2.556c0 1.058 0 1.234 0.529 1.322l0.353 0.088c0.088 0.088 0.088 0.353 0 0.353-0.441 0-0.882 0-1.41 0s-0.97 0-1.41 0c-0.088 0-0.176-0.264 0-0.353l0.264-0.088c0.529-0.088 0.529-0.176 0.529-1.322v-2.204c0-0.882-0.353-1.499-1.41-1.499-0.529 0-1.058 0.264-1.234 0.529s-0.264 0.441-0.264 0.882v2.292c0 1.058 0 1.234 0.529 1.322l0.264 0.088c0.088 0.088 0.088 0.353 0 0.353-0.353 0-0.793 0-1.322 0s-0.97 0-1.41 0c-0.088 0-0.176-0.264 0-0.353l0.353-0.088c0.529-0.088 0.529-0.176 0.529-1.322v-2.645z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M70.171 23.361c0.176-0.088 0.264-0.176 0.264-0.441v-0.705c0-0.529-0.176-1.322-1.058-1.322-0.441 0-0.882 0.176-0.97 0.705 0 0.264 0 0.441-0.176 0.529-0.176 0.176-0.617 0.264-0.793 0.264s-0.176-0.088-0.176-0.176c0-0.793 1.675-1.851 2.733-1.851s1.587 0.617 1.499 1.763l-0.088 2.556c0 0.705 0.088 1.322 0.705 1.322 0.176 0 0.264 0 0.353-0.088 0.088 0 0.176-0.088 0.176-0.088 0.088 0 0.088 0.088 0.088 0.176s-0.529 0.617-1.234 0.617c-0.353 0-0.705-0.088-0.97-0.441-0.088-0.088-0.176-0.176-0.264-0.176s-0.264 0.176-0.529 0.264c-0.353 0.176-0.617 0.353-1.058 0.353s-0.793-0.088-1.058-0.353c-0.264-0.264-0.441-0.617-0.441-1.058 0-0.529 0.264-0.882 1.234-1.234l1.763-0.617zM69.201 25.917c0.264 0 0.793-0.176 0.882-0.353 0.176-0.176 0.176-0.353 0.176-0.705v-0.882c0-0.176-0.088-0.176-0.176-0.176s-0.353 0.088-0.617 0.176c-0.882 0.264-1.322 0.529-1.322 1.058 0.176 0.264 0.353 0.882 1.058 0.882z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M74.931 24.771c0 1.058 0 1.234 0.529 1.322l0.353 0.088c0.088 0.088 0.088 0.353 0 0.353-0.441 0-0.882 0-1.41 0s-0.97 0-1.41 0c-0.088 0-0.088-0.264 0-0.353l0.353-0.088c0.529-0.088 0.529-0.176 0.529-1.322v-6.612c0-0.882 0-0.97-0.441-1.234l-0.176-0.176c-0.088-0.088-0.088-0.264 0-0.264 0.353-0.088 1.058-0.353 1.587-0.617 0.088 0 0.088 0 0.176 0.088 0 0.441 0 1.146 0 1.851v6.964z"></path><path fill="#0ab7d9" style="fill: var(--color21, #0ab7d9)" d="M80.22 20.628c0.176 0.353 0.264 0.793 0.264 1.234-0.088 0.088-0.264 0.088-0.353 0-0.264-0.617-0.705-1.058-1.322-1.058s-0.97 0.353-0.97 0.882c0 0.617 0.617 0.97 1.146 1.234 0.793 0.441 1.499 0.97 1.499 2.028 0 1.146-1.058 1.675-2.116 1.675-0.705 0-1.234-0.176-1.587-0.441-0.088-0.353-0.176-1.058-0.088-1.499 0.088-0.088 0.264-0.088 0.353 0 0.264 0.793 0.705 1.499 1.587 1.499 0.529 0 0.97-0.353 0.97-0.97 0-0.705-0.617-1.058-1.146-1.322-0.882-0.441-1.499-0.97-1.499-1.851 0-1.058 0.882-1.675 2.028-1.675 0.617 0 1.146 0.176 1.234 0.264z"></path> </symbol> <symbol id="icon-logo_wwwopeneditionorg" viewbox="0 0 152.7 34.8"> <title>OpenEdition</title> <path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M42.4,8.4c4.4,0,6.9,3,6.9,7.3s-2.5,7.4-6.9,7.4-6.9-3-6.9-7.4S37.9,8.4,42.4,8.4Zm0,12.4c2.9,0,4-2.6,4-5.1s-1.2-5.1-4-5.1-4,2.6-4,5.1S39.5,20.8,42.4,20.8Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M51.7,12.3h2.6v1.5h0a3.47,3.47,0,0,1,3.2-1.7c3.2,0,4.4,2.6,4.4,5.4S60.7,23,57.5,23a3.75,3.75,0,0,1-3.1-1.4h0V27H51.7Zm2.7,5.2c0,1.5.6,3.4,2.4,3.4s2.3-1.9,2.3-3.4-.5-3.3-2.3-3.3S54.4,16.1,54.4,17.5Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M72.5,22.2a7.67,7.67,0,0,1-3.6.8c-3.5,0-5.5-2-5.5-5.4,0-3,1.6-5.5,4.9-5.5,3.9,0,5,2.7,5,6.3H66A2.69,2.69,0,0,0,69,21a6.9,6.9,0,0,0,3.5-1.1Zm-1.8-5.7c-.1-1.3-.7-2.5-2.2-2.5a2.39,2.39,0,0,0-2.4,2.5Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M75.4,12.3H78v1.4h0A4,4,0,0,1,81.4,12c2.5,0,3.6,1.7,3.6,4.1v6.6H82.3V17.1c0-1.3,0-3-1.8-3-2,0-2.4,2.1-2.4,3.5v5.1H75.4Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M88,8.6h8.4v2.2H90.9v3.5H96v2.2H90.9v4h5.6v2.2H88Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M106,21.6h0a4.12,4.12,0,0,1-3.2,1.4c-3.2,0-4.4-2.6-4.4-5.5s1.2-5.4,4.4-5.4a3.62,3.62,0,0,1,3.1,1.5h0v-6h2.7V22.8H106Zm-2.4-.7c1.8,0,2.4-1.9,2.4-3.4s-.7-3.3-2.4-3.3-2.3,1.9-2.3,3.3S101.8,20.9,103.6,20.9Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M111.6,7.8h2.7v2.6h-2.7Zm0,4.5h2.7V22.8h-2.7Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M118,14.3h-2v-2h2V10.2l2.7-.9v3h2.4v2h-2.4v4.9c0,.9.2,1.7,1.3,1.7a1.92,1.92,0,0,0,1.2-.3l.1,2.2a6.17,6.17,0,0,1-2,.2,3.08,3.08,0,0,1-3.3-3.4Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M125.1,7.8h2.7v2.6h-2.7Zm0,4.5h2.7V22.8h-2.7Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M135.5,12.1a5.25,5.25,0,0,1,5.5,5.5,5.5,5.5,0,0,1-11,0A5.25,5.25,0,0,1,135.5,12.1Zm0,8.8c2.1,0,2.6-1.9,2.6-3.6s-.9-3.1-2.6-3.1-2.6,1.5-2.6,3.1S133.4,20.9,135.5,20.9Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M143.1,12.3h2.6v1.4h0a4,4,0,0,1,3.4-1.7c2.5,0,3.6,1.7,3.6,4.1v6.6H150V17.1c0-1.3,0-3-1.8-3-2,0-2.4,2.1-2.4,3.5v5.1h-2.7Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M42.4,8.4c4.4,0,6.9,3,6.9,7.3s-2.5,7.4-6.9,7.4-6.9-3-6.9-7.4S37.9,8.4,42.4,8.4Zm0,12.4c2.9,0,4-2.6,4-5.1s-1.2-5.1-4-5.1-4,2.6-4,5.1S39.5,20.8,42.4,20.8Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M51.7,12.3h2.6v1.5h0a3.47,3.47,0,0,1,3.2-1.7c3.2,0,4.4,2.6,4.4,5.4S60.7,23,57.5,23a3.75,3.75,0,0,1-3.1-1.4h0V27H51.7Zm2.7,5.2c0,1.5.6,3.4,2.4,3.4s2.3-1.9,2.3-3.4-.5-3.3-2.3-3.3S54.4,16.1,54.4,17.5Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M72.5,22.2a7.67,7.67,0,0,1-3.6.8c-3.5,0-5.5-2-5.5-5.4,0-3,1.6-5.5,4.9-5.5,3.9,0,5,2.7,5,6.3H66A2.69,2.69,0,0,0,69,21a6.9,6.9,0,0,0,3.5-1.1Zm-1.8-5.7c-.1-1.3-.7-2.5-2.2-2.5a2.39,2.39,0,0,0-2.4,2.5Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M75.4,12.3H78v1.4h0A4,4,0,0,1,81.4,12c2.5,0,3.6,1.7,3.6,4.1v6.6H82.3V17.1c0-1.3,0-3-1.8-3-2,0-2.4,2.1-2.4,3.5v5.1H75.4Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M88,8.6h8.4v2.2H90.9v3.5H96v2.2H90.9v4h5.6v2.2H88Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M106,21.6h0a4.12,4.12,0,0,1-3.2,1.4c-3.2,0-4.4-2.6-4.4-5.5s1.2-5.4,4.4-5.4a3.62,3.62,0,0,1,3.1,1.5h0v-6h2.7V22.8H106Zm-2.4-.7c1.8,0,2.4-1.9,2.4-3.4s-.7-3.3-2.4-3.3-2.3,1.9-2.3,3.3S101.8,20.9,103.6,20.9Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M111.6,7.8h2.7v2.6h-2.7Zm0,4.5h2.7V22.8h-2.7Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M118,14.3h-2v-2h2V10.2l2.7-.9v3h2.4v2h-2.4v4.9c0,.9.2,1.7,1.3,1.7a1.92,1.92,0,0,0,1.2-.3l.1,2.2a6.17,6.17,0,0,1-2,.2,3.08,3.08,0,0,1-3.3-3.4Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M125.1,7.8h2.7v2.6h-2.7Zm0,4.5h2.7V22.8h-2.7Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M135.5,12.1a5.25,5.25,0,0,1,5.5,5.5,5.5,5.5,0,0,1-11,0A5.25,5.25,0,0,1,135.5,12.1Zm0,8.8c2.1,0,2.6-1.9,2.6-3.6s-.9-3.1-2.6-3.1-2.6,1.5-2.6,3.1S133.4,20.9,135.5,20.9Z"/><path fill="#f74a00" style="fill: var(--color22, #f74a00)" d="M143.1,12.3h2.6v1.4h0a4,4,0,0,1,3.4-1.7c2.5,0,3.6,1.7,3.6,4.1v6.6H150V17.1c0-1.3,0-3-1.8-3-2,0-2.4,2.1-2.4,3.5v5.1h-2.7Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M17.5,34.8A14.55,14.55,0,0,0,31.3,26h0C23.6,25.5,17.6,33.5,17.5,34.8Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M0,22.2a14.52,14.52,0,0,1,13.4,9.4h0C5.8,31.7.2,25,0,22.2Z"/><path fill="#fc7c00" style="fill: var(--color13, #fc7c00)" d="M15.4,18.8c-4-1.6-5.8-5.2-4.5-8.4a5.07,5.07,0,1,1,9.4,3.8,8.64,8.64,0,0,1-2.6,3.1c4,1.4,8.5.1,9.9-2,1.8-2.7-.4-8-.4-8A11.91,11.91,0,0,0,20.5,1a12.79,12.79,0,1,0-9.6,23.7,11.14,11.14,0,0,0,3,.8l.9,9.2h1.6l.9-9.2a12.93,12.93,0,0,0,10.3-7.9h0A13.39,13.39,0,0,1,15.4,18.8Z"/> </symbol> <symbol id="icon-logo_search" viewbox="0 0 247 68"> <title>OpenEdition Search</title> <path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M80.3,6.6c6.5,0,10.1,4.4,10.1,10.6S86.9,28,80.3,28c-6.6,0-10.1-4.4-10.1-10.7C70.2,10.9,73.8,6.6,80.3,6.6z M80.3,24.7c4.2,0,5.8-3.8,5.8-7.5c0-3.6-1.7-7.4-5.8-7.4c-4.1,0-5.8,3.7-5.8,7.4C74.5,20.9,76.1,24.7,80.3,24.7z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M93.9,12.4h3.8v2.2h0.1c0.9-1.5,2.4-2.5,4.7-2.5c4.7,0,6.4,3.7,6.4,7.9c0,4.2-1.7,8-6.5,8c-1.7,0-3.1-0.4-4.5-2.1h-0.1v8h-4V12.4z M97.9,19.9c0,2.2,0.9,4.9,3.5,4.9c2.6,0,3.3-2.8,3.3-4.9c0-2-0.7-4.9-3.3-4.9C98.9,15.1,97.9,17.8,97.9,19.9z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M124.2,26.7c-1.4,0.8-3.1,1.2-5.2,1.2c-5,0-8-2.9-8-7.9c0-4.4,2.3-8,7.1-8c5.7,0,7.2,3.9,7.2,9.2h-10.5c0.2,2.5,1.9,3.8,4.3,3.8c1.9,0,3.6-0.7,5.1-1.5V26.7z M121.5,18.5c-0.1-1.9-1-3.6-3.2-3.6c-2.2,0-3.3,1.5-3.5,3.6H121.5z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M128.4,12.4h3.8v2.1h0.1c1.2-1.7,2.9-2.4,5-2.4c3.6,0,5.2,2.5,5.2,6v9.6h-4v-8.1c0-1.9,0-4.4-2.6-4.4c-2.9,0-3.5,3.1-3.5,5.1v7.5h-4V12.4z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M146.8,7H159v3.3h-8v5.1h7.4v3.3H151v5.8h8.1v3.3h-12.2V7z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M173.1,25.9L173.1,25.9c-1.2,1.5-2.9,2.1-4.7,2.1c-4.7,0-6.4-3.8-6.4-8c0-4.2,1.7-7.9,6.4-7.9c2,0,3.4,0.7,4.6,2.1h0.1V5.4h4v22.2h-3.8V25.9z M169.4,24.9c2.6,0,3.5-2.8,3.5-4.9c0-2.1-1-4.9-3.6-4.9c-2.6,0-3.3,2.8-3.3,4.9C166.1,22,166.8,24.9,169.4,24.9z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M181.1,5.8h4v3.8h-4V5.8z M181.1,12.4h4v15.2h-4V12.4z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M190.5,15.3h-2.9v-2.9h2.9v-3l4-1.3v4.3h3.5v2.9h-3.5v7.1c0,1.3,0.4,2.5,1.9,2.5c0.7,0,1.4-0.1,1.8-0.4l0.1,3.1c-0.8,0.2-1.7,0.4-2.9,0.4c-3.1,0-4.8-1.9-4.8-4.9V15.3z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M200.8,5.8h4v3.8h-4V5.8z M200.8,12.4h4v15.2h-4V12.4z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M215.9,12c4.5,0,8,3,8,8.1c0,4.4-2.9,7.9-8,7.9c-5,0-8-3.5-8-7.9C208,15.1,211.4,12,215.9,12z M215.9,24.9c3,0,3.8-2.7,3.8-5.3c0-2.3-1.2-4.5-3.8-4.5c-2.6,0-3.8,2.2-3.8,4.5C212.1,22.1,212.9,24.9,215.9,24.9z"/><path fill="#F74A00" style="fill: var(--color13, #F74A00)" d="M227,12.4h3.8v2.1h0.1c1.2-1.7,2.9-2.4,5-2.4c3.6,0,5.2,2.5,5.2,6v9.6h-4v-8.1c0-1.9,0-4.4-2.6-4.4c-2.9,0-3.5,3.1-3.5,5.1v7.5h-4V12.4z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M36.1,64c10,0.3,19.6-5.5,23.8-15.2c0,0,0,0,0-0.1C46.8,48,36.4,61.7,36.1,64z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M6,42.2c10,0.1,19.4,6.2,23.2,16.2c0,0,0,0,0,0.1C16,58.6,6.4,47.1,6,42.2z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M32.5,36.4c-6.9-2.8-10-9-7.8-14.5c1.9-4.7,7-6.8,11.2-5.1c4.8,2,6.8,7.3,5.1,11.7c-0.9,2.2-2.7,3.9-4.5,5.3c6.9,2.5,14.6,0.2,17.1-3.5c3.1-4.7-0.7-13.7-0.7-13.7C50.8,11.9,47,7.9,41.3,5.6C30,1,17.1,6.5,12.5,17.9C8,29.2,13.5,42.1,24.8,46.7c1.7,0.7,3.4,1.1,5.1,1.4L31.5,64h2.8l1.5-15.9c7.7-1,14.7-6,17.8-13.7c0,0,0,0,0,0C48.4,37.6,40.5,39.7,32.5,36.4z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M77.4,53.9c-2.3,0-3.8-0.7-4.4-1c-0.3-0.6-0.7-2.6-0.8-3.9c0.1-0.2,0.6-0.3,0.7-0.1c0.4,1.4,1.6,4.2,4.8,4.2c2.3,0,3.5-1.5,3.5-3.2c0-1.2-0.3-2.6-2.3-3.9l-2.7-1.7c-1.4-0.9-3-2.5-3-4.8c0-2.7,2.1-4.8,5.7-4.8c0.9,0,1.9,0.2,2.6,0.4c0.4,0.1,0.8,0.2,1,0.2c0.3,0.7,0.5,2.2,0.5,3.4c-0.1,0.2-0.6,0.3-0.7,0.1c-0.4-1.3-1.1-3.2-3.8-3.2c-2.7,0-3.3,1.8-3.3,3.1c0,1.6,1.3,2.8,2.4,3.4l2.2,1.4c1.8,1.1,3.5,2.7,3.5,5.4C83.3,51.8,81,53.9,77.4,53.9z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M88.1,46.3c-0.7,0-0.8,0.1-0.8,0.8c0,2.8,1.6,5.2,4.6,5.2c0.9,0,1.7-0.3,2.6-1.4c0.3-0.1,0.5,0.1,0.5,0.3c-0.9,1.9-2.9,2.6-4.4,2.6c-1.8,0-3.2-0.8-4-1.8c-0.8-1.1-1.2-2.4-1.2-3.6c0-3.4,2.3-6.3,5.6-6.3c2.4,0,4,1.6,4,3.3c0,0.4-0.1,0.6-0.1,0.7c-0.1,0.2-0.5,0.2-1.6,0.2H88.1z M89.8,45.4c2.1,0,2.7-0.1,2.9-0.3c0.1-0.1,0.2-0.2,0.2-0.5c0-0.8-0.5-1.8-2.2-1.8c-1.6,0-3.1,1.5-3.1,2.4c0,0.1,0,0.1,0.2,0.1H89.8z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M102.1,47.7c0.4-0.1,0.5-0.4,0.5-0.8l0-1.3c0-1-0.3-2.4-2-2.4c-0.8,0-1.7,0.4-1.8,1.3c0,0.4-0.1,0.8-0.3,0.9c-0.4,0.3-1.2,0.5-1.6,0.5c-0.3,0-0.4-0.1-0.4-0.4c0-1.5,3.2-3.4,5.2-3.4c2,0,3,1.2,2.9,3.3l-0.2,4.9c-0.1,1.3,0.2,2.4,1.3,2.4c0.3,0,0.5-0.1,0.7-0.2c0.1-0.1,0.3-0.2,0.4-0.2c0.1,0,0.2,0.2,0.2,0.4c0,0.1-1,1.2-2.3,1.2c-0.7,0-1.3-0.3-1.8-0.9c-0.1-0.2-0.3-0.4-0.4-0.4c-0.2,0-0.5,0.3-1.1,0.6c-0.6,0.3-1.2,0.7-2,0.7c-0.8,0-1.5-0.2-2-0.6c-0.5-0.5-0.9-1.2-0.9-2c0-1.1,0.5-1.7,2.3-2.4L102.1,47.7z M100.4,52.6c0.6,0,1.4-0.4,1.7-0.7c0.3-0.3,0.3-0.7,0.4-1.3l0.1-1.6c0-0.3-0.1-0.4-0.3-0.4c-0.2,0-0.6,0.1-1.1,0.3c-1.6,0.6-2.5,1-2.5,2.1C98.7,51.4,99,52.6,100.4,52.6z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M109.5,45.4c0-1.1,0-1.2-0.8-1.7l-0.3-0.2c-0.1-0.1-0.1-0.4,0-0.5c0.6-0.2,2.1-0.9,2.8-1.4c0.1,0,0.2,0.1,0.2,0.2v1.6c0,0.1,0,0.2,0.1,0.3c1-0.8,2-1.7,3.1-1.7c0.7,0,1.3,0.4,1.3,1.1c0,0.9-0.8,1.3-1.2,1.3c-0.3,0-0.4-0.1-0.6-0.2c-0.4-0.3-0.8-0.4-1.2-0.4c-0.4,0-0.8,0.3-1,0.6c-0.3,0.4-0.4,1.2-0.4,2.2v3.8c0,2,0.1,2.3,1.1,2.4l1,0.1c0.2,0.1,0.1,0.6-0.1,0.7c-1.3-0.1-2.1-0.1-3.1-0.1c-1,0-1.8,0-2.6,0.1c-0.2-0.1-0.3-0.6-0.1-0.7l0.5-0.1c1-0.2,1.1-0.4,1.1-2.4V45.4z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M126.2,42.5c0.2,0.2,0.4,0.6,0.4,1.1c0,0.5-0.3,1-0.6,1c-0.1,0-0.3-0.1-0.4-0.2c-0.6-0.8-1.6-1.5-2.8-1.5c-2,0-3.9,1.5-3.9,4.5c0,2.2,1.5,4.8,4.5,4.8c1.6,0,2.5-0.7,3.1-1.7c0.2-0.1,0.5,0.1,0.5,0.4c-0.9,2.1-3,2.8-4.7,2.8c-1.5,0-2.8-0.5-3.8-1.4c-1-0.9-1.6-2.3-1.6-4.1c0-3,2.1-6.2,6.8-6.2C124.3,42,125.4,42.2,126.2,42.5z"/><path fill="#FC7C00" style="fill: var(--color14, #FC7C00)" d="M129.5,37.7c0-1.6,0-1.8-0.9-2.3l-0.3-0.2c-0.1-0.1-0.1-0.5,0-0.6c0.7-0.2,2-0.6,3-1.2c0.1,0,0.2,0.1,0.3,0.2c0,0.8-0.1,2.2-0.1,3.5V43c0,0.3,0,0.5,0.1,0.5c1-0.8,2.3-1.5,3.8-1.5c2.7,0,3.6,1.6,3.6,3.6v4.7c0,2,0.1,2.3,1.1,2.4l0.8,0.1c0.2,0.1,0.1,0.6-0.1,0.7c-1-0.1-1.8-0.1-2.8-0.1c-1,0-1.8,0-2.6,0.1c-0.2-0.1-0.3-0.6-0.1-0.7l0.6-0.1c1-0.2,1.1-0.4,1.1-2.4v-4c0-1.8-0.9-3-2.7-3c-0.9,0-1.7,0.3-2.2,0.8c-0.5,0.4-0.6,0.6-0.6,1.5v4.7c0,2,0.1,2.3,1.1,2.4l0.6,0.1c0.2,0.1,0.1,0.6-0.1,0.7c-0.8-0.1-1.6-0.1-2.6-0.1c-1,0-1.8,0-2.7,0.1c-0.2-0.1-0.3-0.6-0.1-0.7l0.7-0.1c1-0.1,1.1-0.4,1.1-2.4V37.7z"/> </symbol> </defs> </svg> <style> .tiktok-embed.cmplz-placeholder-element > div { max-width: 100%;} </style> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/hal/js/cv-hal.js?ver=5.6.2" id="wp-hal-script4-js"></script> <script id="pdf-viewer-block-scripts-js-before"> var pdfViewerUrl = "https://web.archive.org/web/20211030161402/https://dhlab.hypotheses.org/wp-content/plugins/pdf-viewer-block/inc/pdfjs/web/viewer.html"; </script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/pdf-viewer-block/public/js/pdf-viewer-block.js?ver=5.6.2" id="pdf-viewer-block-scripts-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/wp-syntax/js/wp-syntax.js?ver=1.1" id="wp-syntax-js-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/js/skip-link-focus-fix.js?ver=20170530" id="twentysixteen-skip-link-focus-fix-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-includes/js/comment-reply.min.js?ver=5.6.2" id="comment-reply-js"></script> <script id="twentysixteen-script-js-extra"> var screenReaderText = {"expand":"Untermen\u00fc anzeigen","collapse":"Untermen\u00fc verbergen"}; </script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/themes/twentysixteen/js/functions.js?ver=20181217" id="twentysixteen-script-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/wp-featherlight/js/wpFeatherlight.pkgd.min.js?ver=1.3.4" id="wp-featherlight-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/complianz-gdpr-premium-multisite/assets/js/cookieconsent.min.js?ver=5.4.0.2" id="cmplz-cookie-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/complianz-gdpr-premium-multisite/assets/js/postscribe.min.js?ver=5.4.0.2" id="cmplz-postscribe-js"></script> <script id="cmplz-cookie-config-js-extra"> var complianz = {"static":"","is_multisite_root":"","set_cookies":[],"block_ajax_content":"0","banner_version":"2","version":"5.4.0.2","a_b_testing":"","do_not_track":"","consenttype":"optin","region":"eu","geoip":"1","categories":"<div class=\"cmplz-categories-wrap\"><label for=\"cmplz_functional\"><div class=\"cmplz-slider-checkbox\"><input id=\"cmplz_functional\" style=\"color:#191e23\" tabindex=\"0\" data-category=\"cmplz_functional\" class=\"cmplz-consent-checkbox cmplz-slider-checkbox cmplz_functional\" checked disabled size=\"40\" type=\"checkbox\" value=\"1\" \/><span class=\"cmplz-slider cmplz-round \" ><\/span><\/div><span class=\"cc-category\" style=\"color:#191e23\">Funktional<\/span><\/label><\/div><div class=\"cmplz-categories-wrap\"><label for=\"cmplz_marketing\"><div class=\"cmplz-slider-checkbox\"><input id=\"cmplz_marketing\" style=\"color:#191e23\" tabindex=\"0\" data-category=\"cmplz_marketing\" class=\"cmplz-consent-checkbox cmplz-slider-checkbox cmplz_marketing\" size=\"40\" type=\"checkbox\" value=\"1\" \/><span class=\"cmplz-slider cmplz-round \" ><\/span><\/div><span class=\"cc-category\" style=\"color:#191e23\">Marketing<\/span><\/label><\/div><style>\t\t\t\t\t.cmplz-slider-checkbox input:checked + .cmplz-slider {\t\t\t\t\t\tbackground-color: #21759b\t\t\t\t\t}\t\t\t\t\t.cmplz-slider-checkbox input:focus + .cmplz-slider {\t\t\t\t\t\tbox-shadow: 0 0 1px #21759b;\t\t\t\t\t}\t\t\t\t\t.cmplz-slider-checkbox .cmplz-slider:before {\t\t\t\t\t\tbackground-color: #ffffff;\t\t\t\t\t}.cmplz-slider-checkbox .cmplz-slider-na:before {\t\t\t\t\t\tcolor:#ffffff;\t\t\t\t\t}\t\t\t\t\t.cmplz-slider-checkbox .cmplz-slider {\t\t\t\t\t background-color: #F56E28;\t\t\t\t\t}\t\t\t\t\t<\/style><style>#cc-window.cc-window .cmplz-categories-wrap .cc-check svg {stroke: #191e23}<\/style>","position":"bottom","title":"bottom minimal","theme":"minimal","checkbox_style":"slider","use_categories":"hidden","use_categories_optinstats":"visible","header":"","accept":"Akzeptieren","revoke":"Zustimmung verwalten","dismiss":"Verwerfen","dismiss_timeout":"10","use_custom_cookie_css":"","custom_css":".cc-window \n\n \n\n \n\n \n\n \n\n\n\n#cmplz-consent-ui, #cmplz-post-consent-ui {} \n\n#cmplz-consent-ui .cmplz-consent-message {} \n\n#cmplz-consent-ui button, #cmplz-post-consent-ui button {}","readmore_optin":"Cookie-Richtlinie","readmore_impressum":"Impressum","accept_informational":"Akzeptieren","message_optout":"Wir verwenden Cookies, um unsere Website und unseren Service zu optimieren.","message_optin":"Wir verwenden Cookies, um unsere Website und unseren Service zu optimieren.","readmore_optout":"Cookie Policy","readmore_optout_dnsmpi":"Do Not Sell My Personal Information","hide_revoke":"","disable_cookiebanner":"","banner_width":"","soft_cookiewall":"","type":"opt-in","layout":"basic","dismiss_on_scroll":"","dismiss_on_timeout":"","cookie_expiry":"365","nonce":"1b3a8e863b","url":"https:\/\/web.archive.org\/web\/20211030161402\/https:\/\/dhlab.hypotheses.org\/wp-json\/complianz\/v1\/?lang=de&locale=de_DE","set_cookies_on_root":"1","cookie_domain":"hypotheses.org","current_policy_id":"1","cookie_path":"\/","tcf_active":"","colorpalette_background_color":"#f9f9f9","colorpalette_background_border":"#f9f9f9","colorpalette_text_color":"#191e23","colorpalette_text_hyperlink_color":"#191e23","colorpalette_toggles_background":"#21759b","colorpalette_toggles_bullet":"#ffffff","colorpalette_toggles_inactive":"#F56E28","colorpalette_border_radius":"0px 0px 0px 0px","border_width":"1px 1px 1px 1px","colorpalette_button_accept_background":"#21759b","colorpalette_button_accept_border":"#21759b","colorpalette_button_accept_text":"#ffffff","colorpalette_button_deny_background":"#f56e28","colorpalette_button_deny_border":"#f56e28","colorpalette_button_deny_text":"#ffffff","colorpalette_button_settings_background":"#f1f1f1","colorpalette_button_settings_border":"#21759b","colorpalette_button_settings_text":"#21759b","buttons_border_radius":"5px 5px 5px 5px","box_shadow":"","animation":"none","animation_fade":"","animation_slide":"","view_preferences":"Vorlieben","save_preferences":"Einstellungen speichern","accept_all":"Alle akzeptieren","readmore_url":{"eu":"https:\/\/web.archive.org\/web\/20211030161402\/https:\/\/www.openedition.org\/37235?lang=de"},"privacy_link":{"eu":""},"placeholdertext":"Bitte hier klicken, um die Marketing-Cookies zu akzeptieren und diesen inhalt zu aktivieren"}; </script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/complianz-gdpr-premium-multisite/assets/js/complianz.min.js?ver=5.4.0.2" id="cmplz-cookie-config-js"></script> <script src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-includes/js/wp-embed.min.js?ver=5.6.2" id="wp-embed-js"></script> <script async="async" src="https://web.archive.org/web/20211030161402js_/https://dhlab.hypotheses.org/wp-content/plugins/akismet/_inc/form.js?ver=4.1.8" id="akismet-form-js"></script> </body> </html> <!-- FILE ARCHIVED ON 16:14:02 Oct 30, 2021 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 01:03:19 Mar 13, 2025. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.404 exclusion.robots: 0.02 exclusion.robots.policy: 0.013 esindex: 0.009 cdx.remote: 146.874 LoadShardBlock: 333.865 (3) PetaboxLoader3.datanode: 136.183 (4) PetaboxLoader3.resolve: 289.535 (3) load_resource: 176.189 -->

Pages: 1 2 3 4 5 6 7 8 9 10