From ee3c4434645bada44df5f46b6cc4931b6b77f92a Mon Sep 17 00:00:00 2001 From: adrien Date: Sat, 17 Jan 2026 23:49:13 +0100 Subject: [PATCH] =?UTF-8?q?synth=C3=A8se=20vocale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fra_mixed_2009_10K-sentences.txt | 3 +- index.html | 206 +++++++++++++++++++++++++++++++ index.php | 88 ------------- markov.py | 22 ---- question.php | 67 ++++++++-- 5 files changed, 262 insertions(+), 124 deletions(-) create mode 100644 index.html delete mode 100644 index.php delete mode 100644 markov.py diff --git a/fra_mixed_2009_10K-sentences.txt b/fra_mixed_2009_10K-sentences.txt index b8146f7..e06ece0 100644 --- a/fra_mixed_2009_10K-sentences.txt +++ b/fra_mixed_2009_10K-sentences.txt @@ -15,7 +15,8 @@ C’est la relation à la parole et l’aliénation du sujet en tant que nous y av Tout est très différent. Les arbres longeant la caserne, seront éclairés, pour déboucher la perspective montante dans l'avenue Robert Schuman. La jeune femme, belle voix, beaux gestes, débute par J'ai un faible pour les forts (1932), un classique souvent traité en marche de cavalerie. -Le premier film de la série était tout de même regardable, mais on dirait que cela va en s'empirant d'un film à l'autre.Je ne veux plus rien savoir de cette série que je trouve de moins en moins drôle et de plus en plus prétentieuse. +Le premier film de la série était tout de même regardable, mais on dirait que cela va en s'empirant d'un film à l'autre. +Je ne veux plus rien savoir de cette série que je trouve de moins en moins drôle et de plus en plus prétentieuse. Le nouveau complexe de jeux rêvé par Loto-Québec comprendrait un hôtel de luxe de 350 chambres et le casino serait souterrain. Dwight Freeney et ses coéquipiers en défensive veulent prouver qu'ils peuvent stopper la course. Avec l'arrivée de Paul Painlevé à la présidence du Conseil, le sous-secrétariat d'Etat passe sous la tutelle du ministère de la guerre, à la tête duquel se trouve Painlevé, et est rattaché à la section technique du génie. diff --git a/index.html b/index.html new file mode 100644 index 0000000..861d664 --- /dev/null +++ b/index.html @@ -0,0 +1,206 @@ + + + + + + + Chatβeta* + + + + + + + + + + + +
+ +
+
+

Posez-moi toutes vos questions !

+
+ + +
+
+ +

+ 🕨 Synthèse vocale +

+
+
+
+ + +
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/index.php b/index.php deleted file mode 100644 index 735e443..0000000 --- a/index.php +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - ChatEB - - - - - - -
-

ChatEB

-
-

😸 Posez-moi toutes vos questions !

-
-
- - -
-
- - - - \ No newline at end of file diff --git a/markov.py b/markov.py deleted file mode 100644 index 9e02982..0000000 --- a/markov.py +++ /dev/null @@ -1,22 +0,0 @@ -from collections import defaultdict -from random import choice, randrange - -suivants = defaultdict(list) - -with open("fra_mixed_2009_10K-sentences.txt", "r", encoding="utf-8") as fichier: - for phrase in fichier: - antepenultieme, penultieme = "", "" - for word in phrase.split(): - suivants[(antepenultieme, penultieme)].append(word) - antepenultieme, penultieme = penultieme, word - -phrases = [] -for _ in range(randrange(1, 4)): - antepenultieme, penultieme = "", "" - phrase = [] - while mots_possibles := suivants[(antepenultieme, penultieme)]: - mot_suivants = choice(mots_possibles) - phrase.append(mot_suivants) - antepenultieme, penultieme = penultieme, mot_suivants - phrases.append(" ".join(phrase)) -print("\n".join(phrases)) diff --git a/question.php b/question.php index 6c468a9..5f50cad 100644 --- a/question.php +++ b/question.php @@ -3,18 +3,59 @@ header('Content-Type: text/plain; charset=utf-8'); header('Cache-Control: no-cache'); // pour éviter le buffering du navigateur header('X-Accel-Buffering: no'); // si nginx, pour désactiver le buffering -$reponse = `python markov.py`; +$suivants = []; +$total = []; -// désactiver le buffering PHP -@ini_set('output_buffering', 'off'); -@ini_set('zlib.output_compression', 'off'); -while (ob_get_level()) ob_end_flush(); -flush(); +// Lire le fichier fra_mixed_2009_100K-sentences.txt +$fichier = fopen("fra_mixed_2009_10K-sentences.txt", "r"); +if ($fichier) { + while (($phrase = fgets($fichier)) !== false) { + $antepenultieme = ""; + $penultieme = ""; + $mots = explode(" ", trim($phrase)); + foreach ($mots as $mot) { + $cle = $antepenultieme . " " . $penultieme; + if (!isset($suivants[$cle])) { + $suivants[$cle] = []; + } + if (!isset($suivants[$cle][$mot])) { + $suivants[$cle][$mot] = 0; + } + $suivants[$cle][$mot]++; + if (!isset($total[$cle])) { + $total[$cle] = 0; + } + $total[$cle]++; + $antepenultieme = $penultieme; + $penultieme = $mot; + } + } + fclose($fichier); +} else { + http_response_code(500); + die("Impossible d'ouvrir le fichier fra_mixed_2009_10K-sentences.txt\n"); +} -// envoyer chaque lettre avec un délai -$len = strlen($reponse); -for ($i = 0; $i < $len; $i++) { - echo $reponse[$i]; - flush(); // forcer l'envoi immédiat - usleep(40000); // 40ms = 40000 microsecondes -} \ No newline at end of file +$phrases = []; +for ($i = 0; $i < rand(1, 3); $i++) { + $antepenultieme = ""; + $penultieme = ""; + $phrase = []; + while (isset($suivants[$antepenultieme . " " . $penultieme]) && !empty($suivants[$antepenultieme . " " . $penultieme])) { + $cle = $antepenultieme . " " . $penultieme; + $choix = rand(1, $total[$cle]); + foreach ($suivants[$cle] as $mot => $occurences) { + if ($choix <= $occurences) { + $suivant = $mot; + break; + } + $choix -= $occurences; + } + $phrase[] = $suivant; + $antepenultieme = $penultieme; + $penultieme = $suivant; + } + $phrases[] = implode(" ", $phrase); +} + +echo implode("\n", $phrases) . "\n";