Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/11/2025, à 21:12

sputnick

[Tuto] Récupérer le texte d'une page web sans le bruit + écouter

Salut,

de mon coté, étant en veille très très active sur les LLM/embedding/RAG/agents, le besoin se fait sentir d'afficher une page web avec juste le texte, sans les menus, les entêtes (headers) le pied de page (footer) et autres bruits.

Du coup, c'est super intéressant, car on comprend comment les LLM font pour ne pas être pollués par ce bruit.

C'est finalement plus simple que je pensais,

trafilatura -u https://gnu.org --output-format txt
What is GNU?
GNU is an operating system that is free software—that is, it respects users' freedom. The GNU operating system consists of GNU packages (programs specifically released by the GNU Project) as well as free software released by third parties. The development of GNU made it possible to use a computer without software that would trample your freedom.
We recommend installable versions of GNU (more precisely, GNU/Linux distributions) which are entirely free software. More about GNU below.

Nécessite l'installation de paquet pip install trafilatura

Version code, fichier fetcher.py:

#!/usr/bin/env python3

import sys, re, trafilatura

def fetch_text(url: str) -> str:
    html = trafilatura.fetch_url(url)
    if not html:
        raise RuntimeError("Fetch failed")
    txt = trafilatura.extract(html, output_format="txt")  # texte propre
    if not txt:
        raise RuntimeError("Extraction failed")
    # petit ménage: compacter les espaces/lignes
    txt = re.sub(r"\n{3,}", "\n\n", txt).strip()
    return txt

if __name__ == "__main__":
    for u in sys.argv[1:]:
        print(fetch_text(u))

Dernière modification par sputnick (Le 17/11/2025, à 10:58)


Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne

#2 Le 14/11/2025, à 19:06

k3c

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

Sympa

En plus on a whisper qui sort un texte honorable d’un audio ou vidéo

Ou ffmpeg 8.0


Debian 12 sur Thinkpad reconditionné

Hors ligne

#3 Le 14/11/2025, à 19:19

krodelabestiole

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

sputnick a écrit :

on comprend comment les LLM font pour ne pas être pollués par ce bruit.

le html est censé être sémantique (sur un site bien conçu en tout cas), donc justement facile à parser, avec les éléments d'importance qui ressortent, et devraient effectivement être simples à extraire (différents niveaux de titres, paragraphes, etc.).
le "bruit" ça peut être du javascript, des metas, du CSS...
tout ce dont on peut aussi se débarasser en travaillant sur le DOM.

pour python : https://docs.python.org/fr/3/library/xml.dom.html
peut-être aussi : https://www.crummy.com/software/BeautifulSoup/ (plus haut niveau)

Hors ligne

#4 Le 14/11/2025, à 19:41

sputnick

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

Il faut aller voir le github du projet, c'est hyper bien foutu: https://github.com/adbar/trafilatura?tab=readme-ov-file

Extrait traduit: Ce travail a commencé comme un projet de doctorat au croisement de la linguistique et du NLP, cette expertise a été déterminante pour façonner Trafilatura au fil des ans. Initialement lancé pour créer des bases de données textuelles à des fins de recherche à l'Académie des sciences de Berlin-Brandebourg (unités DWDS et ZDL), ce paquetage continue d'être maintenu mais son avenir dépend du soutien de la communauté..

On est pas sur un Jean-Kevin qui bricole dans sa chambre wink (Je n'ai rien contre les Jean-Kevin hein ^^)

Donc, pas besoin de réinventer la roue, puisque trafilatura fait déjà tout le taf de façon brillante, rapide et efficace.

C'est le vainqueur des benchmarks, catégorie Open Source des spiders pour LLM: https://github.com/scrapinghub/article- … -benchmark.


Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne

#5 Le 16/11/2025, à 11:55

sputnick

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

k3c a écrit :

Sympa

En plus on a whisper qui sort un texte honorable d’un audio ou vidéo

Ou ffmpeg 8.0

Salut @k3c,

merci pour cette piste.

En cherchant, ça m'a permis de découvrir que whisper ne fait pas de TTS: Text To Speach, mais STS: Speach To Text

Pour faire du TTS moderne, j'ai trouvé piper qui est vraiment bon, même sur une config sans GPU et pas un foudre de guerre.
En Anglais US, la voix Bryce est la plus claire, posée, audible.

Il y a 5 ans, avoir une telle qualité était encore de la science fiction!

Pour installer:

mkdir piper_TTS
cd piper_TTS
sudo apt install python3-virtualenv python3-pip
virtualenv .
bin/pip install piper-tts
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/bryce/medium/en_US-bryce-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/bryce/medium/en_US-bryce-medium.onnx.json

Voici comment écouter une page web avec trafilatura et piper

bin/python3 -m piper -m en_US-bryce-medium --raw  -- "$(trafilatura -u https://gnu.org --output-format txt | head -n3)" | mplayer /dev/stdin

Pour plutôt générer un .wav:

bin/python3 -m piper -m en_US-bryce-medium-f GNU.wav -- "$(trafilatura -u https://gnu.org --output-format txt | head -n3)"

Retirer | head -n3 quand vous voulez aller plus loin que de tester.

Pour choisir d'autre voix, on peut les tester: https://rhasspy.github.io/piper-samples

Avec ça, non seulement on fait de la veille, mais en plus on améliore son Anglais oral tongue

Dernière modification par sputnick (Le 16/11/2025, à 18:09)


Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne

#6 Le 16/11/2025, à 16:26

k3c

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

excellent ton idée !

sinon je viens de réaliser qu'il est possible de lire une page web sans plein de pub au milieu, exemple

trafilatura -u https://www.torquenews.com/17995/teslas-model-c-dilemma-peoples-car-or-porsche-914-mistake --output-format txt]

si tu vas direct sur le site web c'est quasi illisible

oui je sais, il y a les bloqueurs de pub... qui sont souvent de moins en moins efficaces

il y a aussi NoScript, je sais, mais pour Mme Michu, bof


Debian 12 sur Thinkpad reconditionné

Hors ligne

#7 Le 16/11/2025, à 16:34

k3c

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

il faut modifier une config de mplayer ?

j'ai

$ bin/python3 -m piper -m en_US-bryce-medium --raw  -- "$(trafilatura -u https://gnu.org --output-format txt | head -n3)" | mplayer /dev/stdin
Creating config file: /home/gg/.mplayer/config
MPlayer 1.5+svn38674-2 (Debian)do_connect: could not connect to socket
connect: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing /dev/stdin.
libavformat version 61.7.100 (external)
bash: bin/python3: Aucun fichier ou dossier de ce nom


Exiting... (End of file)

Debian 12 sur Thinkpad reconditionné

Hors ligne

#8 Le 16/11/2025, à 17:26

sputnick

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

On dirait que ta config contient quelque chose qui empêche le pipe de fonctionner dans /home/gg/.mplayer/config.

Tu peux contourner via:

bin/python3 -m piper -m en_US-bryce-medium -f GNU.wav -- "$(trafilatura -u https://gnu.org --output-format txt | head -n3)"
mplayer GNU.wav

Ceux qui le veulent peuvent aussi traduire via l'API Deepl.com et faire le TTS en Français tongue


Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne

#9 Le 16/11/2025, à 17:51

k3c

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

c'est étrange, je n'y arrive pas

$ bin/python3 -m piper -m en_US-bryce-medium -f GNU.wav -- "$(trafilatura -u https://gnu.org --output-format txt | head -n3)"
bash: bin/python3: Aucun fichier ou dossier de ce nom
$ python3 -m piper -m en_US-bryce-medium -f GNU.wav -- "$(trafilatura -u https://gnu.org --output-format txt | head -n3)"
/usr/bin/python3: No module named piper

sinon comme tu peux le voir le fichier de config de mplayer a été créé lors de ma commande précédente, vu que j'avais installé mplayer juste avant (j'utilise mpv)

Perso j'ai un script qui télécharge des vidéos Youtube qui m'intéressent, et range dans le répertoire de l'auteur le texte des vidéos

vu que je lis beaucoup plus vite que j'écoute, et que je saute le baratin sans intérêt

#!/bin/bash

# Paramètres par défaut
lang="${2:-fr}"
extract="${3:-api}"
api_key="abc123def456"

# Vérification du paramètre obligatoire
if [ -z "$1" ]; then
    echo "Usage: $0 URL [langue] [api|w]"
    echo "  - URL: l'URL de la vidéo à télécharger"
    echo "  - langue: code de langue (défaut: fr)"
    echo "  - mode: api pour LemonFox ou w pour Whisper (défaut: api)"
    exit 1
fi

# Téléchargement audio avec capture directe du nom de fichier
echo "Téléchargement audio en cours..."
outfile=$(yt-dlp --restrict-filenames -o "%(channel)s-%(title)s.%(ext)s" -x --audio-format mp3 "$1" |
          grep -Po '(?<=ExtractAudio] Destination: ).*(?=\.mp3)')".mp3"

# Vérification que le téléchargement a fonctionné
if [ ! -f "$outfile" ]; then
    echo "Erreur: Le téléchargement a échoué ou le fichier n'a pas été trouvé."
    exit 1
fi

# Création du répertoire de sortie basé sur le canal
download_dir="${outfile%%-*}"
output="${outfile%.mp3}.txt"
output_path="${download_dir}/$(basename "$output")"

# Création du répertoire s'il n'existe pas
if [ ! -d "${download_dir}" ]; then
  mkdir "${download_dir}"
fi

echo "Fichier téléchargé: $outfile"
echo "Dossier de sortie: $download_dir"
echo "Fichier de transcription: $output_path"

# Transcription du fichier audio
echo "Transcription en cours via ${extract}..."

if [ "$extract" = "w" ]; then
    # Utiliser Whisper localement
    whisper "$outfile" > "$output_path" || {
        echo "Erreur lors de la transcription avec Whisper"
        exit 1
    }
else
    # Utiliser l'API LemonFox
    curl -s https://api.lemonfox.ai/v1/audio/transcriptions \
        -H "Authorization: $api_key" \
        -F "file=@$outfile" \
        -F "language=$lang" \
        -F "response_format=json" > "$output_path" || {
        echo "Erreur lors de la transcription avec l'API LemonFox"
        exit 1
    }
fi

# Vérification de la transcription
if [ ! -s "$output_path" ]; then
    echo "Attention: Le fichier de transcription semble vide."
else
    echo "Transcription terminée avec succès."
fi

# Nettoyage
rm -v "$outfile"

echo "Traitement terminé. Transcription enregistrée dans: $output_path"

j'utilise plus l'API payante de lemonfox, mais ça a son intérêt

genre 5 s chez eux
20 à 30 minutes chez moi sur mon vieux PC qui est au max de CPU pendant tout ce temps


Debian 12 sur Thinkpad reconditionné

Hors ligne

#10 Le 16/11/2025, à 18:10

sputnick

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

La création du virtualenv a du échouer, j'ai mis à jour le tuto:

mkdir piper_TTS
cd piper_TTS
sudo apt install python3-virtualenv python3-pip
virtualenv .
bin/pip install piper-tts
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/bryce/medium/en_US-bryce-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/bryce/medium/en_US-bryce-medium.onnx.json

Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne

#11 Le 16/11/2025, à 20:01

k3c

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

merci, ça marche impeccable


Debian 12 sur Thinkpad reconditionné

Hors ligne

#12 Le 17/11/2025, à 12:03

sputnick

Re : [Tuto] Récupérer le texte d'une page web sans le bruit + écouter

Pour le français:

cd piper_TTS
wget https://huggingface.co/rhasspy/piper-voices/blob/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/blob/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx.json

Je me suis fais des wrappers en bash pour appeller simplement:

#!/bin/bash

cd ~/sources/piper_TTS
. venv/bin/activate

if [[ $1 == http*://* ]]; then
    arg="$(trafilatura -u "$1" --output-format txt)"
else
    arg="$1"
fi
venv/bin/python -m piper -m fr_FR-upmc-medium -- "$arg" | mplayer -quiet /dev/stdin

Dans un fichier de prises de notes sur le sens de certains mots/expression Anglais-e-s, j'ai ce format:

wackadoodle: farfelu
Is it worth the hassle: est-ce que ca en vaut vraiment la peine?
rant: diatribe
Pull over to the right: rangez vous à droite
throw up: vomir
subtle: subtil
My hunch was right: mon intuition était bonne 
The purpose of life: le but de la vie
hoochies: femmes attirantes mais vulgaires en argot américain
You'r so Cringe: vous êtes tellement bizarre
That's not likely: c'est peu probable

Du coup, plutôt que de relire le texte et de ne pas forcement connaitre la prononciation et me lasser au bout de 3 secondes, j'apprends en m'amusant:

while IFS=: read -r en fr; do
    echo "$en: $fr"
    TTS_en_us "$en." &>/dev/null
    TTS_fr "Ca veut dire: $fr..." &>/dev/null
done < <(shuf Anglais.txt)

Dernière modification par sputnick (Le 17/11/2025, à 12:09)


Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne