72 lines
4.6 KiB
JavaScript
72 lines
4.6 KiB
JavaScript
|
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(' '));
|
|||
|
}
|
|||
|
|