Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignorar els accents, dièresis, trencs i punts volats en la cerca i autocompleció #8

Closed
jmontane opened this issue Apr 28, 2020 · 17 comments

Comments

@jmontane
Copy link
Contributor

jmontane commented Apr 28, 2020

La cerca requereix haver d'escriure els diacrítics correctament. Caldria ignorar els diacrítics (accents, dièresis, punts volats, trencs de la ce trencada).
Un tema relacionat però que segur requeriria tractament ad hoc seria reconèixer grafies de la ela geminada alternatives. Per exemple l'IEC reconeix L.L.

Els caràcters que caldria considerar són, almenys: àèéíòóúïüç· (i també en majúscula). Potser amb l'opció Accent Folding de Whoosh? Sembla que permetria tractar tots els caràcters base de l'alfabet llatí [a-z] i tots els possibles diacrítics. El punt volat potser sí que necessitaria un tractament més específic.

Per exemple:

  • Si l'usuari cerca "coneixer" ha de trobar la flexió de "conèixer"
  • Si l'usuari cerca "alcar" ha de trobar la flexió d'"alçar"
  • Si l'usuari cerca "arguir" ha de trobar la flexió d'"argüir"
  • Si l'usuari cerca "pullular" ha de trobar la flexió de "pul·lular" (és el que fem amb els slugs del Wordpress, i encaixa amb l'ús del punt volat com a diacrític)
  • Si l'usuari cerca "pul.lular" ha de trobar la flexió de "pul·lular" (és la grafia alternativa per a la ela geminada que accepta el web del DIEC)
@jordimas
Copy link
Contributor

Hola Joan. Ignorar els diacrítics per mi voldria dir només els verbs que el diacrític serveix per diferenciar-los d'altres paraules. Vols dir que només verbs com "sé" o vols dir tots els accents en general? Gràcies

@jmontane
Copy link
Contributor Author

jmontane commented Apr 29, 2020

No, em refereixo al diacrítics en sentit ampli (accents, dièresis, el trenc de la ç i el punt volat).

És l'experiència que esperen els usuaris. Si cerquen "coneixer", "arguir", "alcar" o "pul.lular" haurien d'obtenir la flexió de "conèixer", "argüir", "alçar" o "pul·lular", respectivament.

@jordimas
Copy link
Contributor

jordimas commented Apr 30, 2020

Hola Joan,

Podem anar editant el primer comentari per anar-lo polint amb aquesta discussió i que reflecteixi el que volem fer? Gràcies

De fet no parlem de diacrítics ja que un diacrític és "Un signe diacrític és un signe que s'afegeix a una lletra per a alterar la pronunciació d'una paraula, o per a distingir-la entre paraules similars". Intentaria ser el més precís possible per no caure en interpretaccions incorrectes de la necessitat.

Alguns comentaris / qüestions per aclarir la necessitat:

  • Podem llistar exactament quins caràcters volem impactar amb aquesta funcionalitat? Per exemple, és parla de "l.l", "ç", etc
  • Quan diem "en la cerca" (al títol d'aquest informe d'error) entenc que esperem aquest comportament en l'autocomplecció i la cerca, en les dues funcionalitats. Correcte? Caldria especificar-ho si és així.
  • Imaginem que l'usuari en l'autocomplecció tecleja "cantà", llavors amb aquesta lògica li suggeria "cantà" i "canta". Caldria un ordre específic? (primer amb els caràcters especials?)

@jmontane
Copy link
Contributor Author

Gràcies. Modifico el text perquè sigui més clar. El significat del terme "diacrític" depèn força del context. En ortografia catalana és el que indiques, però en codificació de text s'entén per diacrític qualsevol signe gràfic que s'afegeix a un caràcter base (habitualment A-Z)

@jaumeortola
Copy link
Member

jaumeortola commented Apr 30, 2020

Jordi: el terme diacrític és absolutament precís (en anglès: diacritical mark). Del mateix lloc on has tret tu la definició (la Viquipèdia):
imatge

@jordimas
Copy link
Contributor

jordimas commented Apr 30, 2020

D'acord, gràcies. No ho sabia. Jo sempre l'havia interpretat com un accent que ajuda a desambiguar la funció d'un paraula que s'escriu igual (bé vs be). El més important doncs es tenir la llista exacta de caràcters als quals volem incidir

@jmontane jmontane changed the title Ignorar diacrítics en la cerca Ignorar els accents, trens i punts volats en la cerca i autocompleció Apr 30, 2020
@jaumeortola jaumeortola changed the title Ignorar els accents, trens i punts volats en la cerca i autocompleció Ignorar els accents, dièresis, trencs i punts volats en la cerca i autocompleció Apr 30, 2020
@jaumeortola
Copy link
Member

Ja hi ha funcions que fan això, la del mateix Whoosh que esmenta Joan, o altres en Python.
Així i tot, la ela geminada segurament necessitarà un tractament especial (que de totes maneres caldria si volem admetre grafies errònies: l.l, etc.):

>>> import unidecode
>>> print(unidecode.unidecode("acaçar, argüir, dèiem, il·luminar, il·lustrar"))
acacar, arguir, deiem, il*luminar, il*lustrar

@jordimas
Copy link
Contributor

jordimas commented May 1, 2020

@jmontane Entenc que això ha de funcionar per l'autocomplete i la cerca, les dues funcions? Si és així, si us plau comentau en el primer comentari

@jordimas
Copy link
Contributor

jordimas commented May 1, 2020

He pujat una versió amb la feina que hi ha a la branca:

https://github.com/Softcatala/conjugador/commits/search_diatritics

El primer problema que veig era el que feia referència abans. Per exemple, cerquem "plaçar" però ara surten les formes de placar en c i tot just el que has escrit "plaçar" no apareix a l'autocomplete malgrat existeix. El problema que veig a l'accent folding aquest és que llavors no es dóna prioritat a la forma que estàs buscant ja que s'equiparà amb altres que coincideix.

Els canvis que està fent en @xavivars no solucionaran això ja que només es prioritiza l'infinitiu i el seu canvi no està pensat per adreçar aquest problema.

@jaumeortola
Copy link
Member

Amb el que s'ha fet veig un petit problema. Quan l'usuari cerca "vénc" (o un cas semblant: vénen) dóna això:
imatge
I aquí: https://www.softcatala.org/api/conjugadorsearch/v%C3%A9nc
Els "vénc" de vendre i vèncer són erronis, no existeixen. Caldria mantenir la forma que s'ha trobat, que és diferent en cada cas, i posar-la en un camp nou de l'API que no tenim:

  • venc (vendre)
  • vénc (venir) [balear, i diacrítics tradicionals]
  • venç (vèncer)

Hauríem d'aplicar aquesta lògica:

  • Si hi ha una forma que coincideix i és única, mostrar aquesta i punt. No cerquem coincidències ignorant diacrítics. Seria el cas de "vénc" (només "venir").
  • Si no hi ha coincidències exactes, llavors sí que provem de cercar ignorant diacrítics.
  • Em sembla que cal un camp nou de l'API que digui exactament la forma que s'ha trobat, perquè si no podríem estar donant formes errònies (quan ignorem els diacrítics).

(Tot això és filar molt prim, i segurament passa en molt pocs casos.)

@jordimas
Copy link
Contributor

jordimas commented May 1, 2020

La meva proposta és:

  • Deixar l'autocomplete com estava abans. Busca exacta nomes
  • Per la cerca, fer el que suggereix el Jaume

Per implementar això caldrà tenir dos índexos (un amb diàtrics i altre sense) ja que això es fa en temps d'indexació.

@xavivars
Copy link
Member

xavivars commented May 1, 2020

Jo, com a usuari, el que esperaria és que si busque sense accents, em torne coses amb accents i sense (perquè potser només sé com s'escriu).

Si busque amb accents, només esperaria coincidències amb accent.

@jordimas
Copy link
Contributor

jordimas commented May 2, 2020

D'acord. Ara ha producció tenim que en la cerca, si la cerca normal torna 0 resultats fa una sense diacritics. Veure: https://github.com/Softcatala/conjugador/tree/search_diatritics

Encara no he tingut temps de fer que la coincidència s'inclogui al resultat de la cerca (últim punt de la proposta del Jaume)

@jordimas
Copy link
Contributor

jordimas commented May 2, 2020

Jaume, caldria veure el comportament que té això en producció ara:

https://web2015.softcatala.org/conjugador-de-verbs

Perquè el cas de "venc" ja no es dóna ja que en la primera cerca exata ja el troba com a part de "vendre" i llavors ja no fa la cerca amb diácritics (ja que només la fa si la primera cerca no troba res).

@jaumeortola
Copy link
Member

jaumeortola commented May 2, 2020

Jo ara veig bé el comportament de la cerca.

Només falta, com ja havies dit, els casos de la ela geminada.

@jordimas
Copy link
Contributor

jordimas commented May 2, 2020

Si, el tema de la ela geminada no el farem de moment.

@jordimas
Copy link
Contributor

jordimas commented May 2, 2020

Ho tanco, si hi ha alguna cosa més re-obrim-ho

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants