9
103
Fork
You've already forked web
30

gérer les caractères accentués lors de la recherche de catégories #1888

Open
opened 2026年03月26日 23:05:21 +01:00 by etienneJr · 14 comments

image

image

@pmiossec c'est toi qui connait le mieux cet algorithme, pourras tu regarder plus largement si les catégories définies avec des accents sont bien trouvées quand on ne met pas les accents ?

En attendant pour ce cas précis, j'ajoute karton dans le dictionnaire.

![image](/attachments/b12f7a0d-dbf4-4579-8b8b-ced8b428b0f4) ![image](/attachments/fc7aa09d-e287-45d6-a683-6383dfba16c4) @pmiossec c'est toi qui connait le mieux cet algorithme, pourras tu regarder plus largement si les catégories définies avec des accents sont bien trouvées quand on ne met pas les accents ? En attendant pour ce cas précis, j'ajoute `karton` dans le dictionnaire.
Author
Member
Copy link

un autre exemple, plus problématique

avec accent : OK sans accent : pas de hit
image image

idem avec la nouvelle catégorie papèterie : l'accent est obligatoire pour la trouver...

un autre exemple, plus problématique | avec accent : OK | sans accent : pas de hit | |-|-| | ![image](/attachments/3a515980-6474-42d0-b249-b8b602d5191f) | ![image](/attachments/4d92622e-4b2f-4fd1-acb1-0e8eaebe8dd5) | idem avec la nouvelle catégorie `papèterie` : l'accent est obligatoire pour la trouver...
Owner
Copy link

L'option ignoreDiacritics devrait gérer ça dans Fusejs. https://www.fusejs.io/api/options.html#ignorediacritics

https://codeberg.org/cartes/web/src/branch/master/app/QuickFeatureSearch.tsx#L80

Donc ce serait un bug à investiguer ?

L'option ignoreDiacritics devrait gérer ça dans Fusejs. https://www.fusejs.io/api/options.html#ignorediacritics https://codeberg.org/cartes/web/src/branch/master/app/QuickFeatureSearch.tsx#L80 Donc ce serait un bug à investiguer ?
Author
Member
Copy link

je me suis encore fait avoir hier en cherchant des vêtements.

avec accent : OK sans accent : pas de hit
image image

qui veut bien regarder ? @laem ? @pmiossec ? @severo ?

je me suis encore fait avoir hier en cherchant des vêtements. | avec accent : OK | sans accent : pas de hit | |-|-| |![image](/attachments/33ac27e2-08f5-4eb4-917a-54565695efcc)|![image](/attachments/b68199f6-4744-4161-8422-7e23ace030b5)| qui veut bien regarder ? @laem ? @pmiossec ? @severo ?
Member
Copy link

je regarde

je regarde
Member
Copy link

de ce que je peux tester, le souci c'est le seuil sur le score rendu par fuse qui est trop strict.

Quand on a une correspondance exacte, on a score=0 (ou 0.000000000001). Mais si on met "vetements" ou "vêtements" (même résultat, grâce à ignoreDiacritics qui marche comme prévu), la catégorie "vêtements et chaussures" a un score de 0.018, qui est supérieur au seuil de 0.0001. Donc : écarté.

MAIS

ce n'est pas la seule manière de trouver une correspondance, il y a trois tests en parallèle. Les deux autres sont des regex sur le nom de la catégorie et sur les termes reliés (dictionary), pour chercher une correspondance exacte. Et donc, pour "vêtements", on trouve une correspondance exacte avec "vêtements et chaussures".

Donc... à mon avis, remonter le seuil, genre à 0.05, ça a l'air de bien marcher. Pas sur qu'on ait besoin des autres tests (regex) pour être honnête (je n'ai pas vu d'exemples où ça serait le critère qui inclut un résultat dans la liste).

de ce que je peux tester, le souci c'est le seuil sur le score rendu par fuse qui est trop strict. Quand on a une correspondance exacte, on a score=0 (ou 0.000000000001). Mais si on met "vetements" ou "vêtements" (même résultat, grâce à ignoreDiacritics qui marche comme prévu), la catégorie "vêtements et chaussures" a un score de 0.018, qui est supérieur au seuil de 0.0001. Donc : écarté. MAIS ce n'est pas la seule manière de trouver une correspondance, il y a trois tests en parallèle. Les deux autres sont des regex sur le nom de la catégorie et sur les termes reliés (dictionary), pour chercher une correspondance exacte. Et donc, pour "vêtements", on trouve une correspondance exacte avec "vêtements et chaussures". Donc... à mon avis, remonter le seuil, genre à 0.05, ça a l'air de bien marcher. Pas sur qu'on ait besoin des autres tests (regex) pour être honnête (je n'ai pas vu d'exemples où ça serait le critère qui inclut un résultat dans la liste).
Member
Copy link

j'ai créé #2190. Je vous laisse vérifier et merger si ça vous va.

j'ai créé #2190. Je vous laisse vérifier et merger si ça vous va.
Author
Member
Copy link

On avait changé le seuil parce qu'on avait le pb inverse : trop de hits.
Faudrait retrouver la PR de @pmiossec je crois me souvenir qu'il avait galéré à trouver un bon compromis, ça doit être tracé dans la pr ou le ticket correspondant.

On avait changé le seuil parce qu'on avait le pb inverse : trop de hits. Faudrait retrouver la PR de @pmiossec je crois me souvenir qu'il avait galéré à trouver un bon compromis, ça doit être tracé dans la pr ou le ticket correspondant.

@etienneJr wrote in #1888 (comment):

qu'il avait galéré à trouver un bon compromis,

Oui, effectivement mais je garantie pas que c'était le bon et cet exemple montre qu'il faut ajuster la valeur.

Par contre, je suis contre de retirer la regex car c'est un backup au cas où.

Mais je me demande si il ne faudrait pas traiter les accents d'une façon particulière par augmenter le score de matching et donc pouvoir réduire la valeur limite...

@etienneJr wrote in https://codeberg.org/cartes/web/issues/1888#issuecomment-15370814: > qu'il avait galéré à trouver un bon compromis, Oui, effectivement mais je garantie pas que c'était le bon et cet exemple montre qu'il faut ajuster la valeur. Par contre, je suis contre de retirer la regex car c'est un backup au cas où. Mais je me demande si il ne faudrait pas traiter les accents d'une façon particulière par augmenter le score de matching et donc pouvoir réduire la valeur limite...
Author
Member
Copy link

Tant qu'on est là dessus, y'a un autre bug qui m'embête : le fait que la catégorie "vélo en libre service" sorte super souvent. C'est un pb de regexp ?

Tant qu'on est là dessus, y'a un autre bug qui m'embête : le fait que la catégorie "vélo en libre service" sorte super souvent. C'est un pb de regexp ?

@etienneJr wrote in #1888 (comment):

Tant qu'on est là dessus, y'a un autre bug qui m'embête : le fait que la catégorie "vélo en libre service" sorte super souvent. C'est un pb de regexp ?

Non, c'est quand j'ai fait la catégorie, j'ai pas voulu faire de discrimination et j'ai mis les noms de tous les vélo en libre service de France et du coup, ça match un peu trop souvent.

Le truc, c'est que je ne sais pas trop quoi enlever car je trouve beaucoup plus pratique de taper 'velib' par exemple et que ça doit être sensiblement pareil pour les autres....

@etienneJr wrote in https://codeberg.org/cartes/web/issues/1888#issuecomment-15377849: > Tant qu'on est là dessus, y'a un autre bug qui m'embête : le fait que la catégorie "vélo en libre service" sorte super souvent. C'est un pb de regexp ? Non, c'est quand j'ai fait la catégorie, j'ai pas voulu faire de discrimination et j'ai mis les noms de tous les vélo en libre service de France et du coup, ça match un peu trop souvent. Le truc, c'est que je ne sais pas trop quoi enlever car je trouve beaucoup plus pratique de taper 'velib' par exemple et que ça doit être sensiblement pareil pour les autres....
severo removed their assignment 2026年05月20日 14:32:35 +02:00
Owner
Copy link

Oui c'est un sujet complexe. On touche au coeur de ce qui fait que Google est apprécié, une recherche perfectionnée.

Idéalement, il faudrait qu'on écrive un jeu de tests. Car changer le paramètre a des conséquences sur d'autres requêtes. Il se peut aussi que Fuse ne soit pas le meilleur moteur...

Oui c'est un sujet complexe. On touche au coeur de ce qui fait que Google est apprécié, une recherche perfectionnée. Idéalement, il faudrait qu'on écrive un jeu de tests. Car changer le paramètre a des conséquences sur d'autres requêtes. Il se peut aussi que Fuse ne soit pas le meilleur moteur...
Owner
Copy link

Au sujet de "vetement" : remarquons que c'est le s en moins qui casse la recherche ici.

Fuse n'a pas l'intelligence d'un moteur de recherche qui enlèverait le s dans les chaines de caractères à comparer.

Ce que je pige pas, c'est que "vêtement" déclenche bien le résultat. Donc c'est le combo accent et pas de s qui casse. Or ignoreDiacritics devrait marcher... Y a une couille dans le pâté...

Au sujet de "vetement" : remarquons que c'est le s en moins qui casse la recherche ici. Fuse n'a pas l'intelligence d'un moteur de recherche qui enlèverait le s dans les chaines de caractères à comparer. Ce que je pige pas, c'est que "vêtement" déclenche bien le résultat. Donc c'est le combo accent *et* pas de s qui casse. Or ignoreDiacritics devrait marcher... Y a une couille dans le pâté...
Owner
Copy link

Trois choses à considérer :

  • fuse a été MAJ en version 7.3 récemment, avec plein de nouveautés, on est sur la 7.1
  • la 7.4 est en beta, elle devrait pas améliorer les résultats de recherche, mais sa fonctionnalité web workers devrait nous permettre d'ajouter plus d'éléments (dicos) sans ralentir la recherche
  • j'avais déjà fait un ticket sur les embeddings, très prometteurs. Il se trouve que Fuse a écrit un petit article sur ça !

Clairement pour notre problème, les embeddings pourraient être utiles. Ils rempliraient de base ce qu'on essaie de reproduire avec nos dictionnaires. Un hybride serait sûrement la meilleure solution.

Et gardons en tête la possibilité d'avoir une LLM qui va encore plus loin en créant la requête overpass si aucune n'est trouvée.

Trois choses à considérer : - fuse a été MAJ en version [7.3 récemment](https://github.com/krisk/Fuse/releases/tag/v7.3.0), avec plein de nouveautés, on est sur la 7.1 - la 7.4 est en beta, elle devrait pas améliorer les résultats de recherche, mais sa fonctionnalité web workers devrait nous permettre d'ajouter plus d'éléments (dicos) sans ralentir la recherche - j'avais déjà fait un ticket sur les [embeddings](https://codeberg.org/cartes/web/issues/947), très prometteurs. Il se trouve que Fuse a écrit [un petit article](https://www.fusejs.io/articles/vs-semantic-search.html) sur ça ! Clairement pour notre problème, les embeddings pourraient être utiles. Ils rempliraient de base ce qu'on essaie de reproduire avec nos dictionnaires. Un [hybride serait sûrement la meilleure solution](https://www.fusejs.io/articles/vs-semantic-search.html#using-both-together). Et gardons en tête la possibilité d'avoir une LLM qui va encore plus loin en créant la requête overpass si aucune n'est trouvée.
Owner
Copy link

Je MAJ fuse #2191 et je tente un fix pour vetement.

Je MAJ fuse https://codeberg.org/cartes/web/pulls/2191 et je tente un fix pour vetement.
Sign in to join this conversation.
No Branch/Tag specified
master
log-overpass
abostats
SynchroM-master
gps
embeddings
lysios-patch-5
lysios-patch-4
lysios-patch-3
lysios-patch-2
lysios-patch-1
abo-serveur2
clim
zone-en-favori
categories_toujours_visibles
rechercher_ici_avant_resultats
test-2365
panoramax-contribution
add-categories-validations
gel-bug-prod
osm-note-2
broken
wikidata_booking
fuse7.3
lysios-patrimoine-3
gps2
atproto-fix-2
styles-secondaires-mais-maison
atproto-scopes
itineraire-printemps-2026
modal-sheet-5.6
nlnet-cost-climate-perf
pb-icones-religieux
couvoiture
etiennejr-patch-2
meteo-fainéante
logo-static-url
poc-page-vitrine
remove-compass
test-reproduce-1795
display-cycleway-lanes-2
poc-image
add-media-condition
mapterhorn
test-indoor-equal
outdoors-VS-indoorEqual
hiking-colors
fix-blog-typing
poc-next-international
fix-map-style-modal-not-closing
i18n
hide-odd-zoom-levels
filter_categories
resume_wikipedia
deplacement_bouttons
fix-1095
mobile_permettre_selection
position-carte-initiale
dégradé-icônes
better_wikipedia
affichage_donnees_wikidata
mobile-permettre-selection
avis-details
perf-seo
modal-sheet-5
plans-novembre
display-cycleway-lanes
fix-1227
fix-1234
etiennejr-patch-1
update-1240
fix-1236
fix-1131
photon-search-street
fix-1221
article-avis
net-haut-zoom
baies-moins-visibles
belles-fiches-lieu
fix-1157
bug-page-vie-privée
use-watername
fix-1176
carte-du-onde
fix-1166
page-news
tchou
add-icon-alias
vitesse
photon-opensearch
private-in-italic
bâtiments-3D
merge-categories
handle-private-highway
improve-findcategory
injection-pmtiles
fix-1128
check-icons
update-readme
category-rugby
bug-position-carte-vs-lieu
limites-vitesse
improve-find-category-from-tags-v2
integrer
document-osmfeature
translate-document
velo-fin-aout-25
velo-ete-2025
moins-de-maptiler
planet-pmtiles-tilemaker
fix-1048
panoramax-leger
plume
horaires-i18n
planet
maj-deps-juillet-2025
improve-find-category-from-tags
bug-encart
interactions-encart-mobile
clic-on-station
fix-1028
fix-1014
edit
add-big-rivers
add-shortbread-tiles
handle-deleted-osm-elements-v2
codeberg
improve-useEffect
immoloc
update-dashboard
analyze
terradraw
sombre2
calendar
poi-sprites-using-svg
style-sombre
sprites
annuaire
motis-gtfs-attributes
next-styled-components
dev
cool2
cool
panoramax-angle
env-static-urls
borders-only
panoramax2
intelligence
debug-iles
nouveau-serveur
france-protomaps
turbo
fouss/cartes-#338
blog2
legislatives
presentation
pas-de-geoloc-si-hash-different
protomaps
vaul
carte-trains
citiz
maj-paquets
icones
ui2
bblog
voyagevoyage
test-image-origine
bugimagefin
searchParams
voyage
avion
perf
studio
piscine
journée
année
journée-transition
score-dès-acceuil
fix-space-problem
rebase-5août
correspondance
règles-séparées
indeps-acre
demo
indeps
indeps-cachés
indication-temps-plein
indeps-refactor-simulations
indeps-vue-comparaison
indeps-inversion
barème-continu
indeps-démo
textes-branches-sécu
engine-enum
2019
transport
publicodes
as
infrance-nouvelle-landing
better-translation
co2
simplifATMP
controle-SMIC
webi18n
bug-avantages-en-nature
revert-352-infrance-navigation-v2
laem-patch-1
robots.txt
improve-perf
iframe-bugfix
quickfixes
lib
irsimple
hiringinfrance.com
dégradé
refstate
johan
zrr
logo-interactif
revert-216-improve-tracking
redesign2
zrr2
fixtrad
correction-salaire-brut
petit-state
alien-consolidate
translate-ui
npm
alien-brut-net
translatable
différent
ir18
fix-typo
add-tracking
fix-collect-missing
défauts-partout
fix-double-unfold-three
fix-double-unfold
versement-transport
blocker-questions
v3
v2.1
v2
v1
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
0.7.0
v0.5.1
v0.5.0
v0.4.2
v0.4.1
v0.4.0
v0.3.3
v0.3.2
v0.3.1
v0.3
v0.2
v0.1-cdd-alpha
v0-démo-tag-nav
Labels
Clear labels
🎨 Design
À propos de l'interface et de l'UX
💡 Idée
Nouvelle feature à intégrer
question
Further information is requested
🌍 OSM
À propos de l'affichage et l'édition des éléments OSM
🌱 Amélioration
Amélioration/fix de l'existant
🐞 Bug
Something isn't working
📊 SEO
📋 Catégories
À propos des catégories de recherche et de l'annuaire
📖 Wiki
📝Avis
A propos de la fonction avis et de bluesky
📢 Oyez
📷 Photos
A propos des photos (sources, affichage)
🔍Recherche
A propos de la barre de recherche et de photon
🔥 Actuel
🔧 tech
🖌 Styles
Styles de la carte
🧝i18n
🧪 R&D
🚍 Transports
🚙 Voiture
🚨Prioritaire
Ticket à traiter rapidement
🚲Vélo
Cartes
climat
Communication
demo
Cette branche doit être déployée comme une démo
dependencies
Pull requests that update a dependency file
javascript
Pull requests that update javascript code
Pas urgent
Plein-air
Tuiles
Verso
Vieux
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cartes/web#1888
Reference in a new issue
cartes/web
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?