je suis à la recherche d'une classe me permettant de créer un glossaire
simple. La seule chose qui m'intéresse est la création automatique des
liens dans le contenu des articles vers les autres mots qui possèdent
également une définition.
Avez-vous qq chose à me conseiller ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Masson
Bonjour,
je suis à la recherche d'une classe me permettant de créer un glossaire simple. La seule chose qui m'intéresse est la création automatique des liens dans le contenu des articles vers les autres mots qui possèdent également une définition. Avez-vous qq chose à me conseiller ?
Merci.
Bon, ok, pas de réponse, tout le monde s'en fout : je formule autrement :)
Qu'y-a-t-il de plus rapide pour remplacer dans un texte un mot par son lien hypertexte, si ce mot existe dans la base de données (toujours dans le cadre d'un glossaire d'une centaine de mot) ?
- Je regarde si chaque mot possède une définition dans la base
- Idem mais uniquement les mots de plus de n et moins de m lettres avec n et m fonction du plus long et plus court mot de la base (est-ce que ça sert à qq chose ?)
- Je regarde si chaque mot de la base est présent dans le texte.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Merci.
Bonjour,
je suis à la recherche d'une classe me permettant de créer un glossaire
simple. La seule chose qui m'intéresse est la création automatique des
liens dans le contenu des articles vers les autres mots qui possèdent
également une définition.
Avez-vous qq chose à me conseiller ?
Merci.
Bon, ok, pas de réponse, tout le monde s'en fout : je formule autrement :)
Qu'y-a-t-il de plus rapide pour remplacer dans un texte un mot par son
lien hypertexte, si ce mot existe dans la base de données (toujours dans
le cadre d'un glossaire d'une centaine de mot) ?
- Je regarde si chaque mot possède une définition dans la base
- Idem mais uniquement les mots de plus de n et moins de m lettres avec
n et m fonction du plus long et plus court mot de la base (est-ce que ça
sert à qq chose ?)
- Je regarde si chaque mot de la base est présent dans le texte.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace
les tags par des espaces ?
je suis à la recherche d'une classe me permettant de créer un glossaire simple. La seule chose qui m'intéresse est la création automatique des liens dans le contenu des articles vers les autres mots qui possèdent également une définition. Avez-vous qq chose à me conseiller ?
Merci.
Bon, ok, pas de réponse, tout le monde s'en fout : je formule autrement :)
Qu'y-a-t-il de plus rapide pour remplacer dans un texte un mot par son lien hypertexte, si ce mot existe dans la base de données (toujours dans le cadre d'un glossaire d'une centaine de mot) ?
- Je regarde si chaque mot possède une définition dans la base
- Idem mais uniquement les mots de plus de n et moins de m lettres avec n et m fonction du plus long et plus court mot de la base (est-ce que ça sert à qq chose ?)
- Je regarde si chaque mot de la base est présent dans le texte.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Merci.
Thierry
"Olivier Masson" a écrit dans le message de news: 460a1df7$0$21188$
- Je regarde si chaque mot de la base est présent dans le texte.
C'est le plus rapide puisque je suppose que tu as moins de mots dans ton glossaire que dans le texte où tu veux remplacer les mots par leurs defs. En gros : pour chaque mot de ta base tu fais un preg replace dans le texte du mot par son lien.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>. Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
"Olivier Masson" <sisemen@laposte.net> a écrit dans le message de news:
460a1df7$0$21188$426a74cc@news.free.fr...
- Je regarde si chaque mot de la base est présent dans le texte.
C'est le plus rapide puisque je suppose que tu as moins de mots dans ton
glossaire que dans le texte où tu veux remplacer les mots par leurs defs.
En gros : pour chaque mot de ta base tu fais un preg replace dans le texte
du mot par son lien.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace
les tags par des espaces ?
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé
comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a
substituer. Donc ne pas substituer ce qui est entre des <>.
Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien
:-)
"Olivier Masson" a écrit dans le message de news: 460a1df7$0$21188$
- Je regarde si chaque mot de la base est présent dans le texte.
C'est le plus rapide puisque je suppose que tu as moins de mots dans ton glossaire que dans le texte où tu veux remplacer les mots par leurs defs. En gros : pour chaque mot de ta base tu fais un preg replace dans le texte du mot par son lien.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>. Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
Thief13
- Idem mais uniquement les mots de plus de n et moins de m lettres avec n et m fonction du plus long et plus court mot de la base (est-ce que ça sert à qq chose ?)
à toi de nous le dire...
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
un strip_tags() ne serait-il pas mieux ?
En tout cas, ça m'a l'air super lourd...
bon alor, on dit que ton texte est dans $texte et que $db_connexion est la connection à la base de donnée
function truc_chelou ($texte, $db_connexion) {
$liste_mots = explode(' ', strip_tags($texte));
foreach ($liste_mots as $clef => $mot) {
$sql = " SELECT definition FROM table_des_definitions WHERE mot='".$mot."' LIMIT 1 ";
$resultat = mysql_query($sql, $db_connexion);
if (mysql_num_rows($resultat_2) == 1) {
$definition = mysql_fetch_assoc($resultat);
$liste_mots['$clef'] = '<a href="'./*Lien vers ton mot*/.'." title="'.$definition['definition'].'"'>$mot</a>;
}
return implode(' ', $liste_mots)
}
}
Je te raconte pas le carnage pour un petit texte de 500 mots, ta base, elle va pété un cable ^^
- Idem mais uniquement les mots de plus de n et moins de m lettres avec n et m
fonction du plus long et plus court mot de la base (est-ce que ça sert
à qq chose ?)
à toi de nous le dire...
Et si mon texte est en HTML, je fais simplement une regexp qui remplace
les tags par des espaces ?
un strip_tags() ne serait-il pas mieux ?
En tout cas, ça m'a l'air super lourd...
bon alor, on dit que ton texte est dans $texte et que $db_connexion est
la connection à la base de donnée
function truc_chelou ($texte, $db_connexion) {
$liste_mots = explode(' ', strip_tags($texte));
foreach ($liste_mots as $clef => $mot) {
$sql = "
SELECT definition
FROM table_des_definitions
WHERE mot='".$mot."'
LIMIT 1
";
$resultat = mysql_query($sql, $db_connexion);
if (mysql_num_rows($resultat_2) == 1) {
$definition = mysql_fetch_assoc($resultat);
$liste_mots['$clef'] = '<a href="'./*Lien vers ton mot*/.'."
title="'.$definition['definition'].'"'>$mot</a>;
}
return implode(' ', $liste_mots)
}
}
Je te raconte pas le carnage pour un petit texte de 500 mots, ta base,
elle va pété un cable ^^
- Idem mais uniquement les mots de plus de n et moins de m lettres avec n et m fonction du plus long et plus court mot de la base (est-ce que ça sert à qq chose ?)
à toi de nous le dire...
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
un strip_tags() ne serait-il pas mieux ?
En tout cas, ça m'a l'air super lourd...
bon alor, on dit que ton texte est dans $texte et que $db_connexion est la connection à la base de donnée
function truc_chelou ($texte, $db_connexion) {
$liste_mots = explode(' ', strip_tags($texte));
foreach ($liste_mots as $clef => $mot) {
$sql = " SELECT definition FROM table_des_definitions WHERE mot='".$mot."' LIMIT 1 ";
$resultat = mysql_query($sql, $db_connexion);
if (mysql_num_rows($resultat_2) == 1) {
$definition = mysql_fetch_assoc($resultat);
$liste_mots['$clef'] = '<a href="'./*Lien vers ton mot*/.'." title="'.$definition['definition'].'"'>$mot</a>;
}
return implode(' ', $liste_mots)
}
}
Je te raconte pas le carnage pour un petit texte de 500 mots, ta base, elle va pété un cable ^^
Thief13
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>. Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
Personelement, je trouve que striptag() est bien mieux qu'une regexp pour virer les tags html, mais ça n'engage que moi...
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé
comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a
substituer. Donc ne pas substituer ce qui est entre des <>.
Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien
:-)
Personelement, je trouve que striptag() est bien mieux qu'une regexp
pour virer les tags html, mais ça n'engage que moi...
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>. Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
Personelement, je trouve que striptag() est bien mieux qu'une regexp pour virer les tags html, mais ça n'engage que moi...
Olivier Miakinen
Le 28/03/2007 17:00, Thierry répondait à Olivier Masson :
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>.
Oui, et c'est très difficile à faire. Par exemple, alors que "<" est un caractère réservé, ">" ne l'est pas et on pourrait avoir : <un_element value=">" class="bidule">
Pour peu que « bidule » soit un mot-clé, une regexp trop simple n'y verra que du feu et le remplacera. Et pour une regexp plus compliquée il ne faut pas oublier que l'on peut avoir des valeurs d'attributs entre guillemets simples (pouvant contenir des guillemets doubles) et d'autres entre guillemets doubles (pouvant contenir des guillemets simples).
Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
:-)
Ce serait possible à condition d'avoir des restrictions très fortes sur le format effectif du fichier HTML. Sinon, il doit exister des fonctions qui analysent un code HTML et en font un arbre DOM, ce qui permet de séparer vraiment le texte des éléments HTML, mais je ne suis pas sûr que ce soit très rapide.
Le 28/03/2007 17:00, Thierry répondait à Olivier Masson :
Et si mon texte est en HTML, je fais simplement une regexp qui remplace
les tags par des espaces ?
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé
comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a
substituer. Donc ne pas substituer ce qui est entre des <>.
Oui, et c'est très difficile à faire. Par exemple, alors que "<" est un
caractère réservé, ">" ne l'est pas et on pourrait avoir :
<un_element value=">" class="bidule">
Pour peu que « bidule » soit un mot-clé, une regexp trop simple n'y
verra que du feu et le remplacera. Et pour une regexp plus compliquée
il ne faut pas oublier que l'on peut avoir des valeurs d'attributs
entre guillemets simples (pouvant contenir des guillemets doubles) et
d'autres entre guillemets doubles (pouvant contenir des guillemets
simples).
Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien
:-)
:-)
Ce serait possible à condition d'avoir des restrictions très fortes sur
le format effectif du fichier HTML. Sinon, il doit exister des fonctions
qui analysent un code HTML et en font un arbre DOM, ce qui permet de
séparer vraiment le texte des éléments HTML, mais je ne suis pas sûr que
ce soit très rapide.
Le 28/03/2007 17:00, Thierry répondait à Olivier Masson :
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>.
Oui, et c'est très difficile à faire. Par exemple, alors que "<" est un caractère réservé, ">" ne l'est pas et on pourrait avoir : <un_element value=">" class="bidule">
Pour peu que « bidule » soit un mot-clé, une regexp trop simple n'y verra que du feu et le remplacera. Et pour une regexp plus compliquée il ne faut pas oublier que l'on peut avoir des valeurs d'attributs entre guillemets simples (pouvant contenir des guillemets doubles) et d'autres entre guillemets doubles (pouvant contenir des guillemets simples).
Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
:-)
Ce serait possible à condition d'avoir des restrictions très fortes sur le format effectif du fichier HTML. Sinon, il doit exister des fonctions qui analysent un code HTML et en font un arbre DOM, ce qui permet de séparer vraiment le texte des éléments HTML, mais je ne suis pas sûr que ce soit très rapide.
Olivier Miakinen
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>. Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
Personelement, je trouve que striptag() est bien mieux qu'une regexp pour virer les tags html, mais ça n'engage que moi...
S'il s'agit de virer les tags HTML, je suis entièrement d'accord avec toi. Mais j'avais supposé qu'Olivier cherchait au contraire à conserver tous les tags HTML existants, se contentant de *rajouter* des éléments <a>. Dans cette hypothèse, il me semblerait encore plus difficile de remettre les balises après les avoir virées que de faire le changement sans les virer.
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé
comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a
substituer. Donc ne pas substituer ce qui est entre des <>.
Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien
:-)
Personelement, je trouve que striptag() est bien mieux qu'une regexp
pour virer les tags html, mais ça n'engage que moi...
S'il s'agit de virer les tags HTML, je suis entièrement d'accord avec
toi. Mais j'avais supposé qu'Olivier cherchait au contraire à conserver
tous les tags HTML existants, se contentant de *rajouter* des éléments
<a>. Dans cette hypothèse, il me semblerait encore plus difficile de
remettre les balises après les avoir virées que de faire le changement
sans les virer.
Le plus chiant dans cette substition c'est de ne pas modifier des mots clé comme par exemple le nom d'une classe CSS qui s'appellerait comme un mot a substituer. Donc ne pas substituer ce qui est entre des <>. Avec un peu de chance Olivier M. (l'autre) va donner la regexp qui va bien :-)
Personelement, je trouve que striptag() est bien mieux qu'une regexp pour virer les tags html, mais ça n'engage que moi...
S'il s'agit de virer les tags HTML, je suis entièrement d'accord avec toi. Mais j'avais supposé qu'Olivier cherchait au contraire à conserver tous les tags HTML existants, se contentant de *rajouter* des éléments <a>. Dans cette hypothèse, il me semblerait encore plus difficile de remettre les balises après les avoir virées que de faire le changement sans les virer.
Olivier Masson
Oui, et c'est très difficile à faire. Par exemple, alors que "<" est un caractère réservé, ">" ne l'est pas et on pourrait avoir : <un_element value=">" class="bidule">
Je tiens d'abord à dire que je n'ai pas besoin de ça : c'est simplement de la curiosité (ou cas où, un jour...)
Je n'avais pas du tout pensé à ce qu'il puisse y avoir > comme valeur car je pensais que c'était également réservé. Sinon, effectivement, tout le problème est dans le fait de rencontrer un mot de la base entre <>.
J'avais pensé à une regexp simple mais j'avais surtout oublié que des balises non fermantes existaient... Sans parler du fait qu'il soit possible de mettre < et > dans un texte.
Bref, striptags est la meilleure idée. Pourquoi ? Parce que c'est très rapidement que l'on saura déjà s'il y a des mots qui conviennent, bien avant d'avoir fait une (très) lourde regexp.
Là, on peut partir sur des trucs très complexes encore. Mais le bon sens me fait penser à un truc tout simple : regarder le mot qu'il y a avant et après (mot ou caractère(s)) dans le texte dénudé.
Ainsi, on élimine simplement les possibilités de class et id sauf à avoir (mais faut pas pousser, d'autant que c'est nous qui contrôlons ces noms) des classes qui se suivent comme dans la phrase (class="la paronomase est").
Aucune lourde regexp nécessaire. Bon, ce n'est pas tout léger non plus :)
Y voyez-vous une bourde ?
Oui, et c'est très difficile à faire. Par exemple, alors que "<" est un
caractère réservé, ">" ne l'est pas et on pourrait avoir :
<un_element value=">" class="bidule">
Je tiens d'abord à dire que je n'ai pas besoin de ça : c'est simplement
de la curiosité (ou cas où, un jour...)
Je n'avais pas du tout pensé à ce qu'il puisse y avoir > comme valeur
car je pensais que c'était également réservé.
Sinon, effectivement, tout le problème est dans le fait de rencontrer un
mot de la base entre <>.
J'avais pensé à une regexp simple mais j'avais surtout oublié que des
balises non fermantes existaient...
Sans parler du fait qu'il soit possible de mettre < et > dans un texte.
Bref, striptags est la meilleure idée. Pourquoi ? Parce que c'est très
rapidement que l'on saura déjà s'il y a des mots qui conviennent, bien
avant d'avoir fait une (très) lourde regexp.
Là, on peut partir sur des trucs très complexes encore. Mais le bon sens
me fait penser à un truc tout simple : regarder le mot qu'il y a avant
et après (mot ou caractère(s)) dans le texte dénudé.
Ainsi, on élimine simplement les possibilités de class et id sauf à
avoir (mais faut pas pousser, d'autant que c'est nous qui contrôlons ces
noms) des classes qui se suivent comme dans la phrase (class="la
paronomase est").
Aucune lourde regexp nécessaire. Bon, ce n'est pas tout léger non plus :)
Oui, et c'est très difficile à faire. Par exemple, alors que "<" est un caractère réservé, ">" ne l'est pas et on pourrait avoir : <un_element value=">" class="bidule">
Je tiens d'abord à dire que je n'ai pas besoin de ça : c'est simplement de la curiosité (ou cas où, un jour...)
Je n'avais pas du tout pensé à ce qu'il puisse y avoir > comme valeur car je pensais que c'était également réservé. Sinon, effectivement, tout le problème est dans le fait de rencontrer un mot de la base entre <>.
J'avais pensé à une regexp simple mais j'avais surtout oublié que des balises non fermantes existaient... Sans parler du fait qu'il soit possible de mettre < et > dans un texte.
Bref, striptags est la meilleure idée. Pourquoi ? Parce que c'est très rapidement que l'on saura déjà s'il y a des mots qui conviennent, bien avant d'avoir fait une (très) lourde regexp.
Là, on peut partir sur des trucs très complexes encore. Mais le bon sens me fait penser à un truc tout simple : regarder le mot qu'il y a avant et après (mot ou caractère(s)) dans le texte dénudé.
Ainsi, on élimine simplement les possibilités de class et id sauf à avoir (mais faut pas pousser, d'autant que c'est nous qui contrôlons ces noms) des classes qui se suivent comme dans la phrase (class="la paronomase est").
Aucune lourde regexp nécessaire. Bon, ce n'est pas tout léger non plus :)
Y voyez-vous une bourde ?
Thief13
S'il s'agit de virer les tags HTML, je suis entièrement d'accord avec toi.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Pour moi c'est clair, il semble vouloir virer les tags... Apres, j'ai peut être mal saisi le sens...
S'il s'agit de virer les tags HTML, je suis entièrement d'accord avec
toi.
Et si mon texte est en HTML, je fais simplement une regexp qui
remplace les tags par des espaces ?
Pour moi c'est clair, il semble vouloir virer les tags... Apres, j'ai
peut être mal saisi le sens...
S'il s'agit de virer les tags HTML, je suis entièrement d'accord avec toi.
Et si mon texte est en HTML, je fais simplement une regexp qui remplace les tags par des espaces ?
Pour moi c'est clair, il semble vouloir virer les tags... Apres, j'ai peut être mal saisi le sens...
Olivier Masson
Je te raconte pas le carnage pour un petit texte de 500 mots, ta base, elle va pété un cable ^^
En fait, c'est sur le groupe de sql que j'aurais du poster car mon questionnement est davantage sur l'optimisation de la requête. Je ne sais pas du tout comment fonctionne MySQL (car il est question de ça, mais pourquoi pas Postgre).
N'y aura-t-il pas un cache du côté SQL qui ferait aller plus vite dans un cas que dans l'autre ? Ne serait-il pas opportun de créer une base temporaire type MEMORY uniquement avec les mots ? Etc.
Je te raconte pas le carnage pour un petit texte de 500 mots, ta base,
elle va pété un cable ^^
En fait, c'est sur le groupe de sql que j'aurais du poster car mon
questionnement est davantage sur l'optimisation de la requête.
Je ne sais pas du tout comment fonctionne MySQL (car il est question de
ça, mais pourquoi pas Postgre).
N'y aura-t-il pas un cache du côté SQL qui ferait aller plus vite dans
un cas que dans l'autre ? Ne serait-il pas opportun de créer une base
temporaire type MEMORY uniquement avec les mots ? Etc.
Je te raconte pas le carnage pour un petit texte de 500 mots, ta base, elle va pété un cable ^^
En fait, c'est sur le groupe de sql que j'aurais du poster car mon questionnement est davantage sur l'optimisation de la requête. Je ne sais pas du tout comment fonctionne MySQL (car il est question de ça, mais pourquoi pas Postgre).
N'y aura-t-il pas un cache du côté SQL qui ferait aller plus vite dans un cas que dans l'autre ? Ne serait-il pas opportun de créer une base temporaire type MEMORY uniquement avec les mots ? Etc.