Vés al contingut

Tema de Viquipèdia:La taverna/Tecnicismes

Amadalvarez (discussiócontribucions)

Context:

  • Al peu de la {{Infotaula competició esportiva}} s'enllaça amb l'article de l'edició anterior i posterior del mateix campionat, temporada, etc.
  • per evitar els llargs noms que tenen, es mostra un enllaç tipus [[campionat de primera divisió d'argentina 2001|2001]] només quan la part de text coincideix amb la mateixa part del nom de l'article que estem tractant. Altrament, es mostra el nom sencer, ja que no podem estar segurs que es tracti del mateix campionat o d'un altre que l'hagi succeït.
  • El codi actual no preveu altres valors numèrics diferents a l'any (aaaa), com ara les temporades aaaa-aaaa o aaaa-aa, ja sigui amb guió curt o llarg.

Em cal:

Una expressió regular que, a partir de DUES cadenes em retornés el text per construir l'enllaç.

P. Ex. 1924–25 Coupe de France vs 1923–24 Coupe de France, n'hauriem d'obtindre: 1923–24 Coupe de France i 1923–24
però si fos: Copa de França de 1924–25 vs 1923–24 Coupe de France, n'hauriem d'obtindre: 1923–24 Coupe de France i 1923–24 Coupe de France, ja que no és pot fer un enllaç curt en trcatar-se de noms diferents.

A continuació descric les condicions a complir.

  • Considerem que tenim una cadena a tractar formada per una part numèrica i tota la resta l'anomenarem "textual" (és el valor de l'article anterior/posterior que volem enllaçar). Els resultats a retornar sempre surten d'aquesta cadena.
  • Tenim una segona cadena que ens fa de patró d'on obtenir la seva part "textual de referència" (és el nom de l'article actual d'on només ens interessa la seva part "textual" per veure si és igual).
  • la "part numèrica" és qualsevol combinació de xifres (anys) amb els patterns: aaaa, aaaa-aa aaaa-aaaa (guió curt), aaaa–aa aaaa–aaaa (guió llarg) aïllats i situats en qualsevol punt de la cadena (habitualment inici o final)
  • la "part textual" és la resta de la cadena després d'extreure la part numèrica.
  • qualsevol xifra que no compleixi els patterns, cal considerar-la com a part textual.
  • Si no hi ha part numèrica en qualsevol de les dues cadenes cal retornar la "cadena a tractar", tal qual, ja que no aplica cap transformació.
  • Si les parts textuals d'ambdues cadenes són iguals, cal retornar la "part numèrica" de la cadena a tractar, per poder construir un enllaç conduit.
  • Si les parts textuals són diferents, cal retornar la "cadena a tractar" sense cap intervenció.

Casos per fer test:

item Patró a tractar resultat cas
 wd:Q535351 Primera divisió espanyola de futbol 1971-72 Primera divisió espanyola de futbol 1970-71 1970-71 vàlid amb guió curt
 wd:Q291741 Lliga de Campions de l'AFC 2008 2007 AFC Champions League 2007 AFC Champions League text desigual
 wd:Q316285 2000–01 Fußball-Bundesliga 1999–2000 Fußball-Bundesliga 1999–2000 pattern númeric diferent (correcte)
 wd:Q457437 1999–2000 Deutsche Eishockey Liga season 1998–99 Deutsche Eishockey Liga season 1998–99 pattern númeric diferent (correcte)
 wd:Q314398 1925 German football championship 1924 German football championship 1924 pattern vàlid al començament
 wd:Q325606 Campionat del món de ciclisme en pista de 1902 Campionat del món de ciclisme en pista de 1901 1901 pattern vàlid al final
 wd:Q425774 1946–47 Serie A 1945–46 Serie A–B 1945–46 Serie A–B text desigual
 wd:Q69893 Temporada 2006 de Fórmula 1 Temporada 2005 de Fórmula 1 2005 pattern vàlid al mig
 wd:Q165753 2014 UEFA Women's U-19 Championship 2013 UEFA Women's U-19 Championship 2013 xifres dins el text
 wd:Q187376 FA Premier League 2007-08 2006–07 FA Premier League 2006–07 pattern vàlid en diferent posició
 wd:Q317240 1987–88 2. Fußball-Bundesliga 1986–87 2. Fußball-Bundesliga 1986–87 xifres dins el text
 wd:Q370996 1915–16 Swiss Serie A 1914–15 Swiss Serie A 1914–15 vàlid amb guió llarg
 wd:Q372009 2008–09 Lebanese Premier League 2007–08 Lebanese Premier League 2007–08 vàlid amb guió llarg
 wd:Q581465 Campionat d'Europa de Natació en Piscina Curta 2009 2008 European Short Course Swimming Championships 2008 European Short Course Swimming Championships text desigual
 wd:Q319483 1976–77 2. Fußball-Bundesliga 1975–76 2. Fußball-Bundesliga 1975–76 xifres dins el text
 wd:Q614186 Italian Cup 1979/80 Italian Cup 1978-1979 Italian Cup 1978-1979 pattern numèric no vàlid
 wd:Q467768 2. Bundesliga 1998-1999 2. Bundesliga 1997-1998 1997-1998 xifres dins el text

Més casos rels a https://w.wiki/BZHB

Gràcies !

Pere prlpz (discussiócontribucions)

Els meus coneixements de regex són força limitats, però sospito que això no es pot fer amb un sol regex. El que sí que es deu poder fer amb regex és, per una banda, extreure els anys del títol, i per l'altra, extreure el text pelat (sense anys). Amb això, el codi que fos podria comparar els textos i, si són iguals, fer servir els anys, i si no fer servir el títol complet. Ara bé, això ja és fora del regex.

Amadalvarez (discussiócontribucions)

Gràcies, @Pere prlpz. Sabries fer aquesta part preparatòria?. Perquè si no hi ha més remei , la "preparació" i l'acció corresponent les podria encapsular en una plantilla. El motiu de demanar tot en una peça és perquè aquesta construcció apareix diverses vegades dins un immens IF niuat que cada cop és més barroc, però si tingués aquesta part que dius, em seria més fàcil fer una plantilla amb la funció complerta.

Vriullop (discussiócontribucions)

El problema no és la regexp, o el regexp, sinó que pensar l'estructura que hauria de tenir en wikitext em provoca mal de cap. La lògica és més senzilla amb Lua: Especial:Permalink/34120802. En la primera línia tens la regexp, suposant any de 4 xifres amb extensió opcional. Si et repenses el cas "Italian Cup 1979/80" s'hi pot afegir també la barra inclinada. Si ho vols refer amb plantilla, tu mateix.

Amadalvarez (discussiócontribucions)

Gràcies, @Vriullop pel regexp i pel mòdul.

Vaig mirar de fer servir la teva obra (tan neta i polida que vaig entendre com funciona). Però llavors em vaig adonar que la meva petició d'un regexp era correcta, però no havia considerat que la preparació dels valors que intervenen al regexp i de com tractar el resultat eren la part dura (fa les comparacions amb un text net: editicon=no i format=label, però la presentació manté el format que retorna WIkidades per tenir enllaç conduït, llapis i la llengua si no està traduït). El problema real era que el codi que tenia era llarg perquè la informació sobre les dates de la sèrie poden estar en diferents propietats i, per tractar-les tenia repetit el codi i quan s'havia de fer un canvi era pesat i delicat.

Solucióː fer allò que tocava fer des del primer dia: una funció comuna, {{Infobox sports competition/format series}}, què treballa amb les propietats i qualificadors que li passin per paràmetre, recupera WD, fa les comparacions i munta el resultat.

Ara el tinc en proves, el codi s'ha aprimat en 8.300 bytes i serà més fàcil afegir altres casos que tenia pendents.

Gràcies !.

Resposta a «Una REGEX, porfa !»