[Python] Rimuovi la punteggiatura dalle stringhe formattate Unicode


Answers

Se vuoi usare la soluzione di JF Sebastian in Python 3:

import unicodedata
import sys

tbl = dict.fromkeys(i for i in range(sys.maxunicode)
                      if unicodedata.category(chr(i)).startswith('P'))
def remove_punctuation(text):
    return text.translate(tbl)
Question

Ho una funzione che rimuove la punteggiatura da un elenco di stringhe:

def strip_punctuation(input):
    x = 0
    for word in input:
        input[x] = re.sub(r'[^A-Za-z0-9 ]', "", input[x])
        x += 1
    return input

Ho recentemente modificato il mio script per utilizzare le stringhe Unicode in modo da poter gestire altri caratteri non occidentali. Questa funzione si interrompe quando incontra questi caratteri speciali e restituisce solo stringhe Unicode vuote. Come posso rimuovere in modo affidabile la punteggiatura dalle stringhe formattate Unicode?




Una versione più breve basata sulla risposta di Daenyth

import unicodedata

def strip_punctuation(text):
    """
    >>> strip_punctuation(u'something')
    u'something'

    >>> strip_punctuation(u'something.,:else really')
    u'somethingelse really'
    """
    punctutation_cats = set(['Pc', 'Pd', 'Ps', 'Pe', 'Pi', 'Pf', 'Po'])
    return ''.join(x for x in text
                   if unicodedata.category(x) not in punctutation_cats)

input_data = [u'somehting', u'something, else', u'nothing.']
without_punctuation = map(strip_punctuation, input_data)



Links