From 237d5fd519d983a62c3a8b2ddb75b59ff0e0fc87 Mon Sep 17 00:00:00 2001 From: camilo Date: Thu, 5 May 2022 16:54:02 +0200 Subject: [PATCH] notebook --- Glossary_making.ipynb | 397 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 397 insertions(+) create mode 100644 Glossary_making.ipynb diff --git a/Glossary_making.ipynb b/Glossary_making.ipynb new file mode 100644 index 0000000..249438b --- /dev/null +++ b/Glossary_making.ipynb @@ -0,0 +1,397 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Glossary Making Tool" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a Work-in-progress experiment tool to make living glossaries Webpages using simple Python, Javascript, and CSS from an markdown file written in a Etherpad instance.\n", + "\n", + "**What makes it living?** \n", + "\n", + "* The glossary structure uses the idea of 'gloss' that means annottation and layer. It makes the glossary a layering of anotations rather than a list of definitions. The pad template uses each word as a card with multiple annotations. See the example.\n", + "\n", + "* This tool also offers the option of add properties to each word in order to find connections and multiple types of organization. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## Words\n", + "Communicating via **API** with the glossary **Pad** and translating the text written in **Markdown** format using **Pandoc** library." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import json, pypandoc\n", + "from urllib.request import urlopen\n", + "from urllib.parse import urlencode\n", + "\n", + "\n", + "with open(\"/opt/etherpad/APIKEY.txt\") as f:\n", + " api_key = f.read().strip()\n", + "\n", + "api_url = \"https://hub.xpub.nl/soupboat/pad/api/1.2.15/\"\n", + "\n", + "# wrap in a convenient function (APICALL)\n", + "def ep (api_fn, api_url, api_key, **data):\n", + " data['apikey'] = api_key\n", + " return json.load(urlopen(f\"{api_url}{api_fn}\", data=urlencode(data).encode()))\n", + "\n", + "\n", + "glossary = ep(\"getText\", api_url, api_key, padID=\"binding_glossary\")\n", + "\n", + "text = glossary[\"data\"][\"text\"]\n", + "\n", + "words = pypandoc.convert_text(text, 'html', format='md')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From a local markdown text file" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "import pypandoc\n", + "\n", + "text = open('glossary.txt', 'r')\n", + "\n", + "with text as f:\n", + " text = f.read()\n", + " \n", + "words = pypandoc.convert_text(text, 'html', format='md')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## Properties" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following is a word property dictionary " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "properties = [\n", + "\t{\n", + "\t\t'title':'fact',\n", + "\t\t'symbol':'A',\n", + " 'color': 'green'\n", + "\t},\n", + "\t{\n", + "\t\t'title':'process',\n", + "\t\t'symbol':'S',\n", + "\t\t'color': 'aqua'\n", + "\t},\n", + "\t{\n", + "\t\t'title':'love',\n", + "\t\t'symbol':'L',\n", + "\t\t'color': 'orange'\n", + "\t},\n", + " \t{\n", + "\t\t'title':'tool',\n", + "\t\t'symbol':'T',\n", + "\t\t'color': 'blue'\n", + "\t}\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing the Website" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Write properties legend" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "description = ''\n", + "\n", + "i = 0\n", + "\n", + "for title, symbol, color in properties:\n", + " title = properties[i]['title']\n", + " description += (f''' {title}s,''')\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "legend = ''\n", + "\n", + "i = 0\n", + "\n", + "for title, symbol, color in properties:\n", + " title = properties[i]['title']\n", + " legend += f'''\\n'''\n", + " i += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Write Script that will add properties to each word" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "script = ''\n", + "\n", + "i = 0 \n", + "\n", + "for title, symbol, color in properties:\n", + " title = properties[i]['title']\n", + " symbol = properties[i]['symbol']\n", + " script += (f\"\"\"const {title} = document.getElementsByClassName(\"{title}\");\n", + " for (let i = 0; i < {title}.length; i++)\"\"\"'{\\n' \n", + " f\"\"\"{title}[i].innerHTML += \"{symbol}\";\"\"\" \n", + " '\\n}\\n\\n')\n", + " i += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assign a different color for each property " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "style = ''\n", + "\n", + "i = 0 \n", + "\n", + "for title, symbol, color in properties:\n", + " title = properties[i]['title']\n", + " color = properties[i]['color']\n", + " style += f'''.{title}-s''' + '{' + f'''color:{color};''''}'\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "body = f'''\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Binding GLossary\n", + " \n", + " \n", + " \n", + "\n", + "
\n", + "

Glossary for a Diffractive Publishing Practice

\n", + "
\n", + "
\n", + "
\n", + "

This glossary gathers words around bookbiding. It was made as an example to use the tool living-glossary.

\n", + "

{description} are the properties that organize and make connections between words.

\n", + "
\n", + "
\n", + " {legend}\n", + "
\n", + "
\n", + "
\n", + " {words} \n", + "
\n", + " \n", + " \n", + " \n", + " '''\n", + "\n", + "website = open('index.html','w')\n", + "\n", + "website.write(body)\n", + "website.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(words)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from time import sleep\n", + "\n", + "while True:\n", + " print('hey')\n", + " sleep(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}