BigQuery: convertissez les caractères accentués en leurs équivalents ASCII simples


Felipe Carlo

J'ai la chaîne suivante:

brasília

Et j'ai besoin de me convertir en:

brasilia

Sans l'accent ´!

Comment puis-je faire sur BigQuery?

Merci!

Mikhail Berlyant

Essayez ci-dessous comme option rapide et simple pour vous:

#standardSQL
WITH lookups AS (
  SELECT 
  'ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,ø,Ø,Å,Á,À,Â,Ä,È,É,Ê,Ë,Í,Î,Ï,Ì,Ò,Ó,Ô,Ö,Ú,Ù,Û,Ü,Ÿ,Ç,Æ,Œ,ñ' AS accents,
  'c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,o,O,A,A,A,A,A,E,E,E,E,I,I,I,I,O,O,O,O,U,U,U,U,Y,C,AE,OE,n' AS latins
),
pairs AS (
  SELECT accent, latin FROM lookups, 
    UNNEST(SPLIT(accents)) AS accent WITH OFFSET AS p1, 
    UNNEST(SPLIT(latins)) AS latin WITH OFFSET AS p2
  WHERE p1 = p2
),
yourTableWithWords AS (
  SELECT word FROM UNNEST(
        SPLIT('brasília,ångström,aperçu,barège, beau idéal, belle époque, béguin, bête noire, bêtise, Bichon Frisé, blasé, blessèd, bobèche, boîte, bombé, Bön, Boötes, boutonnière, bric-à-brac, Brontë Beyoncé,El Niño')
    ) AS word
)
SELECT 
  word AS word_with_accent, 
  (SELECT STRING_AGG(IFNULL(latin, char), '')
    FROM UNNEST(SPLIT(word, '')) char
    LEFT JOIN pairs
    ON char = accent) AS word_without_accent
FROM yourTableWithWords   

La sortie est

word_with_accent word_without_accent     
blessèd         blessed  
El Niño         El Nino  
belle époque    belle epoque     
boîte           boite    
Boötes          Bootes   
blasé           blase    
ångström        angstrom     
bobèche         bobeche  
barège          barege   
bric-à-brac     bric-a-brac  
bête noire      bete noire   
Bichon Frisé    Bichon Frise     
Brontë Beyoncé  Bronte Beyonce   
bêtise          betise   
beau idéal      beau ideal   
bombé           bombe    
brasília        brasilia     
boutonnière     boutonniere  
aperçu          apercu   
béguin          beguin   
Bön             Bon   

MISE À JOUR

Vous trouverez ci-dessous comment intégrer cette logique dans SQL UDF - ainsi accent2latin(word)peut être appelé pour faire une "magie"

#standardSQL
CREATE TEMP FUNCTION accent2latin(word STRING) AS
((
  WITH lookups AS (
    SELECT 
    'ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,ø,Ø,Å,Á,À,Â,Ä,È,É,Ê,Ë,Í,Î,Ï,Ì,Ò,Ó,Ô,Ö,Ú,Ù,Û,Ü,Ÿ,Ç,Æ,Œ,ñ' AS accents,
    'c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,o,O,A,A,A,A,A,E,E,E,E,I,I,I,I,O,O,O,O,U,U,U,U,Y,C,AE,OE,n' AS latins
  ),
  pairs AS (
    SELECT accent, latin FROM lookups, 
      UNNEST(SPLIT(accents)) AS accent WITH OFFSET AS p1, 
      UNNEST(SPLIT(latins)) AS latin WITH OFFSET AS p2
    WHERE p1 = p2
  )
  SELECT STRING_AGG(IFNULL(latin, char), '')
  FROM UNNEST(SPLIT(word, '')) char
  LEFT JOIN pairs
  ON char = accent
));

WITH yourTableWithWords AS (
  SELECT word FROM UNNEST(
        SPLIT('brasília,ångström,aperçu,barège, beau idéal, belle époque, béguin, bête noire, bêtise, Bichon Frisé, blasé, blessèd, bobèche, boîte, bombé, Bön, Boötes, boutonnière, bric-à-brac, Brontë Beyoncé,El Niño')
    ) AS word
)
SELECT 
  word AS word_with_accent, 
  accent2latin(word) AS word_without_accent
FROM yourTableWithWords 

Articles connexes


Convertir les petites capitales unicode en leurs équivalents ASCII

Appelant Singh J'ai le jeu de données suivant 'Fʀɪᴇɴᴅ', 'ᴍᴏᴍ', 'ᴍᴀᴋᴇs', 'ʜᴏᴜʀʟʏ', 'ᴛʜᴇ', 'ᴄᴏᴍᴘᴜᴛᴇʀ', 'ʙᴇᴇɴ', 'ᴏᴜᴛ', 'ᴀ', 'ᴊᴏʙ', 'ғᴏʀ', 'ᴍᴏɴᴛʜs', 'ʙᴜᴛ', 'ʟᴀsᴛ', 'ᴍᴏɴᴛʜ', 'ʜᴇʀ', 'ᴄʜᴇᴄᴋ', 'ᴊᴜsᴛ', 'ᴡᴏʀᴋɪɴɢ', 'ғᴇᴡ', 'ʜᴏᴜʀs', 'sᴏᴜʀᴄᴇ', Je veux

MySQL aplatit les caractères latins à leurs équivalents non latins

mère Je cherche une MySQLfonction pour convertir chaque caractère latin spécial (à ne pas confondre avec latin1charset - j'utilise utf8) en son équivalent non latin de la A-Zgamme de lettres standard . Voici ce que je veux littéralement réaliser: 'Zażółć gęślą

Comment gérer les caractères accentués en python?

Zeno Dalla Valle Je sais qu'il y a beaucoup de matériel à ce sujet, mais je ne peux pas trouver de solution à mon problème. J'ai ce texte écrit dans un fichier txt que je dois manipuler, etc. et il contient beaucoup de caractères accentués. Je ne peux pas les

Convertir les caractères Unicode latins en équivalents japonais

vware La traduction des caractères Unicode vers leurs homologues latins à des fins de comparaison peut être réalisée avec la normalisation. Cependant, si je veux passer du standard 'A' au 'A' (japonais 0xEF,0xBC,0xA1) ? Existe-t-il un moyen de translittérer ce

Regex interdit les caractères accentués

NoDachi Je souhaite que l'utilisateur ne puisse saisir que des caractères anglais, le code ci-dessous fonctionne mais sur un mac si vous maintenez la lettre "a" par exemple, vous pouvez insérer des caractères accentués tels que "á". J'ai essayé quelques approc