Trouver une chaine dans une phrase [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 23-07-2020 à 13:02:53
Je te recommande d'implémenter un algo de type LSA : https://fr.wikipedia.org/wiki/Analy [...] ue_latente
Pour la phase de lemnisation, tu peux utiliser la BD Lexique3.org.
Moi, j'ai codé cet algo pour détecter des tickets identiques, similaires ou corrélés pour mon outil de help-desk Astres (cf ma signature). Par contre, mon implémentation n'est pas sous licence GPL. Tu ne la trouveras donc pas dans mon projet.
Marsh Posté le 23-07-2020 à 21:37:17
Salut,
Code :
|
Ce serait plutôt l'inverse :
Code :
|
Non ?
Par contre, niveau pertinence, ça ne va pas casser des briques :
Sans aller jusqu'à "réinventer la roue", il n'y a pas moyen de se baser sur un fulltext search ? Faire un MATCH AGAINT post_prediction_chaine et prendre la ligne avec le plus gros score de pertinence (si celui-ci dépasse un score minimal pré-établi) ? Je ne dis pas que ce sera 100 % accurate non plus mais je pense que ce serait déjà au moins 1000 fois mieux qu'une solution à base de LIKE (autant pour les performances que pour la pertinence).
Marsh Posté le 23-07-2020 à 22:11:32
D'où ma proposition d'une implémentation de l'algo LSA. Lemnisation des textes, normalisation des valeurs avec un TF-Idf puis un calcul de la matrice des covariances pour avoir le taux de corrélation entre chacun des vecteurs.
C'est 1000 fois mieux que le Like et moins hasardeux que le match against
Marsh Posté le 24-07-2020 à 08:08:22
Bonjour a tous,
@rufo : ok, je vais regarder tout ca de plus près merci pour l'idée
@pluj : La requette fonctionne bien merci !
Je n'ai pas le niveau, je pense ecrire dans la bdd les phrases avec les fautes d'orthographe a la main s'il le faut.
Citation : Sans aller jusqu'à "réinventer la roue", il n'y a pas moyen de se baser sur un fulltext search ? Faire un MATCH AGAINT post_prediction_chaine et prendre la ligne avec le plus gros score de pertinence (si celui-ci dépasse un score minimal pré-établi) ? Je ne dis pas que ce sera 100 % accurate non plus mais je pense que ce serait déjà au moins 1000 fois mieux qu'une solution à base de LIKE (autant pour les performances que pour la pertinence). |
Je vais regarder cela en profondeur. Comme mon niveau n'est pas élevé, je n'y ai pas pensé.
Merci de m'avoir aidé
Marsh Posté le 24-07-2020 à 08:54:11
C'est sûr que match against est à privilégier par rapport au LIKE ou dès qu'une seule différence de caractères va être présente, la requête renverra rien.
L'algo LSA est une sorte de match against en beaucoup plus élaboré. En plus, il permet si on le souhaite de supprimer les stop-words (petits mots de liaison qui ont peu d'importance, genre les le, la, les, l', n', d', à...). Mais si ton niveau en BD et dév est faible, ça risque d'être hors de ta portée
Marsh Posté le 23-07-2020 à 00:11:34
Bonjour a tous
J'ai un petit site codé a la main qui permet aux visiteurs de poster ce qu'ils veulent.
Je souhaite qu'a chaque post, la chaine soit analysée et comparée a une liste de chaines dans une base de donnée, et attribuer ainsi une catégorie au post.
Voici ma structure de tables :
Table : categorie
categorie_id | categorie_denomination
1 | blagues de toto a la plage
2 | blagues de toto a la montagne
Table : post_prediction
post_prediction_id | post_prediction_chaine | post_prediction_categorie_id
1 | mets son maillot de bain | 1
2 | regarde la montagne | 2
Table : post
post_id | post | post_categorie_id
1 | on est lundi, c'est toto qui mets son maillot de bain et qui plonge dans l'eau | Null
2 | quelle belle journée pour toto il regarde la montagne | Null
L'utilisateur va donc poster la chaine suivante : "on est lundi, c'est toto qui mets son maillot de bain et qui plonge dans l'eau". Et ainsi j'aimerai automatiquement le classer dans "toto a la plage".
Mon fichier php va recupérer le post et faire une requette SQL
SELECT * FROM `post_prediction` WHERE `post_prediction_chaine` LIKE '%on est lundi, c'est toto qui mets son maillot de bain et qui plonge dans l'eau%'
Sauf que je me rends compte que l'operateur like ne trouve pas de résultat.
D'où ma question, comment trouver une chaine dans une phrase via mysql
En vous remerciant par avance
ps : ca ne me dérange pas d'avoir dans post_prediction des chaines avec des tirets si cela est plus simple pour la recherche. exemple : mets-son-maillot-de-bain car je renverai mon post avec des tirets si necessaire.
Message édité par tomware le 23-07-2020 à 00:27:24