From f1c1e11d50b7c84b6dc0e0eaefc041f354d87f46 Mon Sep 17 00:00:00 2001 From: Tykayn Date: Tue, 11 Apr 2023 14:35:16 +0200 Subject: [PATCH] add demo markov tree --- markov-tree/index.mjs | 71 +++++++++++++++++++++++++++++++++++ markov-tree/package-lock.json | 63 +++++++++++++++++++++++++++++++ markov-tree/package.json | 6 +++ 3 files changed, 140 insertions(+) create mode 100644 markov-tree/index.mjs create mode 100644 markov-tree/package-lock.json create mode 100644 markov-tree/package.json diff --git a/markov-tree/index.mjs b/markov-tree/index.mjs new file mode 100644 index 00000000..a894c287 --- /dev/null +++ b/markov-tree/index.mjs @@ -0,0 +1,71 @@ +import {MarkovChain} from 'acausal'; + +// Sample Data +const phrases = ['Voici quelques astuces pour bien prendre en main le mammouth' + +'Si vous êtes un artiste en quête de succès mondial ' + +'Pensez à vous présenter publiquement pour que tout le monde sache un peu plus qui vous êtes. ' + +'Pensez aussi à mettre un avatar sur votre profil!', + "Oui il paraît. Chez les gens qui font de l'it aussi, " + + 'Bienvenue a la maison sur #cipherbliss' + + "y'a probablement pas assez de gens compétents pour remplir des programmes quotidiens j'imagine." + + "ce qui est assez exceptionnel de mon point de vue", + "ou alors les gens compétents n'aiment pas la corruption", + "j'envisage de m'offrir une remorque à vélo pour trimballer la fille qui grandit bien et donc fait un brin tanguer le vélo dans son siège sur le porte bagage." + + ' encore faut il qu\'elle ait un réel pouvoir sur la mise en place.\n' + + "si vous avez de recommandations de remorque #vélo pour ça je suis preneur.", + 'enjoy! :)', 'Une assemblée citoyenne c\'est bien,' + + 'aujourd\'hui 820 mille sur 4 millions) soient difficiles à obtenir par design' + + 'Ou alors c\'est de l\'enfumage comme avec ripadp ou tout est fait pour que les soutiens ' + + "faut essayer d'abord avec des petits trucs" + + "avant de te lancer dans la sauvegarde de ton tera de bazar.\n" + + "si tu veux je peux faire un live audio ou partage d'écran un de ces jours pour te montrer.\n" + + "\n" + + "Le concept de base c'est que borg travaille dans un dossier qu'on lui demande," + + "c'est un peu comme si tu faisais une archive zip de tes trucs à sauvegarder.\n" + + "tu n'as plus qu'à synchroniser ce zip avec d'autres serveurs et disques.\n" + + "se faire attaquer par des billets de banque de moins de 100 balles," + + "c'est ce qui s'appelle subir des petites coupures.", + "et tu peux extraire des dossiers de ton zip pour restaurer tes sauvegardes.", + 'même en cas de soutien réussi on ne garantit pas que ça sera adopté et respecté.']; + +let article1 = ["’ai animé un atelier au cours du premier camp CHATONS qui a eu lieu le week-end dernier." + +"(Le Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires vise à rassembler des structures proposant des services en ligne libres, éthiques et décentralisés" + +"afin de permettre aux utilisateur⋅ices de trouver rapidement des alternatives respectueuses de leurs données et de leur vie privée)\n" + +"Pas de compte rendu du camp en lui même pour tout de suite, cependant voici un résumé de l’atelier qui aura duré près d’une heure.\n" + +"https://libreto.sans-nuage.fr/camps-chatons/programme\n" + +"Comment se protéger des pertes de données et ne pas perdre la confiance et les précieuses données des membres de son CHATONS?\n" + +"L’atelier aborde la définition d’un modèle de menace pour savoir contre quoi se prémunir" + +"et quels critères de qualité utiliser pour réaliser automatiquement ses sauvegardes en tant que particulier" + +"ou en tant que CHATONS.\n" + +"On y voit de la façon la plus « grand public » à la façon la plus « techno geek » " + +"comment récupérer ses données éparpillées en ligne, historiser, chiffrer, dédupliquer, compresser, répliquer, partager les clés d’accès, et prévoir des restaurations périodiques," + +"de sorte que les données les plus cruciales survivent à leurs administrateurs et administratrices."] +// article1 = article1.map(name => name.split(',')) + +const names = [...phrases, ...article1]; + +const caractères_par_proposition = 15; +const propositions_generated = 3; + +// Prepare Data Source - the class expects an array of arrays. +const src = names.map(name => name.split(' ')); + +// console.log('src', src) +// Create the Markov Chain from the source data. +const chain = new MarkovChain({ + // seed: 33, // Random Seed - if this is empty it will be generated. + maxOrder: caractères_par_proposition, // Maximum Order - Chain will generate orders up to this value. + sequences: src, // Source data, expects an array of arrays. +}); + +// Generate 5 picks. +for (let i = 0; i < propositions_generated; i += 1) { + const pick = chain.generate({ + min: 4, // Min Picks - This will force the model to pick at least 4 times. + max: caractères_par_proposition, // Max Picks - Stops generation after 10 picks if no end has been reached. + order: 2, // Order - The largest gram size used to calculate the next pick. + // strict: false // Strict Order - Dynamically adjusts order up or down each pick if false. + }); + console.log(pick.join(' ')); +} + diff --git a/markov-tree/package-lock.json b/markov-tree/package-lock.json new file mode 100644 index 00000000..1827f110 --- /dev/null +++ b/markov-tree/package-lock.json @@ -0,0 +1,63 @@ +{ + "name": "markov-tree", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "acausal": "^2.0.3", + "js-markov": "^3.0.3" + } + }, + "node_modules/acausal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/acausal/-/acausal-2.0.3.tgz", + "integrity": "sha512-vQfdg4+TiS3sKqMcYpDmMFcfAAUH4rhbZW/KBxDg1o2d0xx+inDCEsu/xFEyzCwxOnSc9XjaPrmxDTRLTNoafQ==", + "dependencies": { + "random-js": "2.1.0", + "scalr": "1.1.4" + } + }, + "node_modules/js-markov": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/js-markov/-/js-markov-3.0.3.tgz", + "integrity": "sha512-UgKhwGn5G2XgPr13VK73ExrMVsZCrr7XbH34mKAD96qwjMg+3w0wgUDeJg6g9YqMhabLElFm3Kr8P5Ej9KKFyg==" + }, + "node_modules/random-js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/random-js/-/random-js-2.1.0.tgz", + "integrity": "sha512-CRUyWmnzmZBA7RZSVGq0xMqmgCyPPxbiKNLFA5ud7KenojVX2s7Gv+V7eB52beKTPGxWRnVZ7D/tCIgYJJ8vNQ==" + }, + "node_modules/scalr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/scalr/-/scalr-1.1.4.tgz", + "integrity": "sha512-eLMDJaFrI8o8V7q4IIdzZIV5T8U/+GziIkyIRkPP1hdTHWkz6Ln4zLvLs0oaiqN/4nGeDsI0GrjO/f8UMkVK6g==" + } + }, + "dependencies": { + "acausal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/acausal/-/acausal-2.0.3.tgz", + "integrity": "sha512-vQfdg4+TiS3sKqMcYpDmMFcfAAUH4rhbZW/KBxDg1o2d0xx+inDCEsu/xFEyzCwxOnSc9XjaPrmxDTRLTNoafQ==", + "requires": { + "random-js": "2.1.0", + "scalr": "1.1.4" + } + }, + "js-markov": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/js-markov/-/js-markov-3.0.3.tgz", + "integrity": "sha512-UgKhwGn5G2XgPr13VK73ExrMVsZCrr7XbH34mKAD96qwjMg+3w0wgUDeJg6g9YqMhabLElFm3Kr8P5Ej9KKFyg==" + }, + "random-js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/random-js/-/random-js-2.1.0.tgz", + "integrity": "sha512-CRUyWmnzmZBA7RZSVGq0xMqmgCyPPxbiKNLFA5ud7KenojVX2s7Gv+V7eB52beKTPGxWRnVZ7D/tCIgYJJ8vNQ==" + }, + "scalr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/scalr/-/scalr-1.1.4.tgz", + "integrity": "sha512-eLMDJaFrI8o8V7q4IIdzZIV5T8U/+GziIkyIRkPP1hdTHWkz6Ln4zLvLs0oaiqN/4nGeDsI0GrjO/f8UMkVK6g==" + } + } +} diff --git a/markov-tree/package.json b/markov-tree/package.json new file mode 100644 index 00000000..135288b5 --- /dev/null +++ b/markov-tree/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "acausal": "^2.0.3", + "js-markov": "^3.0.3" + } +}