Stampare correttamente caratteri

di il
16 risposte

Stampare correttamente caratteri

Sto cercando di stampare correttamente caratteri come è,à,ù ect dopo averli recuperati tramite un api Twitter.
Ho provato ad utilizzare testo.encode('utf-8') ma vengono sempre riportati in fase di stampa e scrittura nel file diciture come questa \c3\xa8 oppure \xc3\xa0.
COME POSSO FARE PER RISOLVERE QUESTO PROBLEMA?

16 Risposte

  • Re: Stampare correttamente caratteri

    Cosa ti dice l'API di twitter? Come codifica il testo?
  • Re: Stampare correttamente caratteri

    Scusami se non sarò preciso nella risposta ma sono alle prime armi.
    L'api di Twitter mi restituisce tweet attraverso questo ciclo
    for tweet in tweepy.Cursor(api.search,q="plastica",tweet_mode="extended",count=5,
                               lang="it",
                               since="2019-04-23").items():
                                
    (anche se vorrei cambiare prelevando i tweet attraverso StreamListener)
    un risultato del ciclo è per esempio:
    Scoperta plastica incastonata nelle rocce di un\xe2\x80\x99isola portoghese https://t.co/Vi4JSx3ah https://t.co/kekrSNIFb'
    Dove questo risultato è dato dalla scrittura del testo in file
    csvWriter.writerow(testo.encode('utf-8'))
    Per quanto riguarda il link non è un problema in quanto nella fase successiva di sentiment lo avrei ad eliminare. Il problema sta nel fatto che mi salva in questo modo il testo nel file
  • Re: Stampare correttamente caratteri

    La documentazione di tweety è un po' scarna... Hai provato a scrivere il testo raw, poi ad aprirlo con un editor utf-8?
  • Re: Stampare correttamente caratteri

    Quindi intende che dovrei scrivere il testo senza effettuare encode('utf-8') per poi aprirlo non con excel ma con un altro editor?
  • Re: Stampare correttamente caratteri

    Comunque \xe2\x80\x99 in binario è 11100010 10000000 10011001 che corrisponde ad un carattere UTF-8 a 3 byte:
    'RIGHT SINGLE QUOTATION MARK' (U+2019) ’
    Il che fa supporre che ci sia una conversione di troppo. Scrivere raw significa scrivere (di solito in binario) quello che viene letto senza nessuna conversione in mezzo. Ovvero tu leggi una stringa dall'api, e la scrivi direttamente su file senza processarla. Poi con un editor in grado di leggere anche file binari vai a leggere che cosa hai scritto.
  • Re: Stampare correttamente caratteri

    Simone3 ha scritto:


    Quindi intende che dovrei scrivere il testo senza effettuare encode('utf-8') per poi aprirlo non con excel ma con un altro editor?
    Credo che excel usi la codifica utf-16le, ma dipende dalla versione. Il file è meglio se lo leggi con un editor multi codifica.
  • Re: Stampare correttamente caratteri

    Guardi ho provato a non effettuare la codifica attraverso l'encode e processandolo ora sembra stampare correttamente quei caratteri come per esempio per il tweet: "Il #Seabin di Genova in soli 20 giorni ha già raccolto 70 kg di plastica "
    Ora però il programma mi restituisce questo errore:
    UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f389' in position 200: character maps to <undefined>
  • Re: Stampare correttamente caratteri

    A me questi dati servirebbero per poi effettuare una analisi del sentiment,quindi poco mi importa della stampa ma è importante come vengono salvati sul file di destinazione per poi riutilizzarli in quella fase che è il cuore del mio progetto
  • Re: Stampare correttamente caratteri

    Simone3 ha scritto:


    Ora però il programma mi restituisce questo errore:
    UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f389' in position 200: character maps to <undefined>
    Significa che un carattere che è arrivato da twitter, interpretato come utf-8, non ha una corrispondenza con le tabelle Unicode di Python. Poco male, è un carattere 'PARTY POPPER', ovvero fa parte di una tabella di simboli per feste ed altro, probabilmente un tweet era pieno di faccine ed altro.
    Metti un try..except dove viene generato l'errore, così non lo vedi.
  • Re: Stampare correttamente caratteri

    Non ci avevo pensato,grazie mille ho risolto
  • Re: Stampare correttamente caratteri

    Scusami ma ho riscontrato un errore, sul lato codice mettendo try except l'eseguzione è ok ma ora ho problemi durante il salvataggio nel file in quanto mi scrive una parte del messaggio per poi passare all'altro prelevamento del tweet. Come posso sistemare il problema anche nella scrittura del file?
  • Re: Stampare correttamente caratteri

    Intendi che dopo aver gestito l'eccezione, scrive solo il tweet fino al carattere non gestito? Se è così devi rivedere la gestione del ciclo di lettura (senza avere il codice sottomano non posso fare predizioni sulle cause).
  • Re: Stampare correttamente caratteri

    
    import tweepy
    import csv
    import pandas as pd
    import sys
    from textblob import TextBlob
    
    
    #Inserisco le mie crdeziali
    consumer_key = 
    consumer_secret = 
    access_token =
    access_token_secret = 
    
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth,wait_on_rate_limit=True)
    
    # Open/Create a file to append data
    csvFile = open('ua.csv', 'a')
    #Use csv Writer
    csvWriter = csv.writer(csvFile)
    
    
    categorie=["text","sentiment"]
    csvWriter.writerow(categorie)
    
    for tweet in tweepy.Cursor(api.search,q="plastica",tweet_mode="extended",count=5,
                               lang="it",
                               since="2019-04-23").items():
    
        try:
            
            if tweet.retweet_count<2:
                testo=tweet.full_text
            
                analysis = TextBlob(testo)
                # classifico il sentimento riguardante quel tweet
                if analysis.sentiment.polarity > 0: 
                     sentimento_tweet ='positive'
                else: 
                    sentimento_tweet ='negative'
                
                csvWriter.writerow([testo,sentimento_tweet])
                print(testo)
                
        except UnicodeEncodeError:
            print("Errore")
        
    csvFile.close()
    
    
    Questo è il codice che ho effettuato e si nei casi di eccezione mi stampa solo una parte del testo per poi passare alla successiva.
    Quello che vorrei sarebbe riuscire ugualmente a riportare correttamente le emotion insieme al testo in quanto successivamente dovrei fare un analisi del sentimento(ora il mio intento è solo prelevare i tweet e averli in un formato a me congeniale e correttamente codificato)
  • Re: Stampare correttamente caratteri

    Purtroppo non sono in grado di aiutarti oltre. Quando copi il testo del tweet dentro 'testo', quel carattere non viene riconosciuto (anche se esiste), e genera l'eccezione. Devo dire che se dentro l'ide di Python (3.5 su Linux debian) scrivo
    "\N{PARTY POPPER}"
    mi ritorna correttamente l'encoding:
    '\U0001f389'
    quindi potrebbe essere un problema più complesso, che tira in mezzo Twitter e la libreria che stai usando.
Devi accedere o registrarti per scrivere nel forum
16 risposte