0
votes

Prétraitement pour se débarrasser de Not Hyhen mais Dash dans des phrases

Ce que je voudrais faire

Je voudrais me débarrasser de non trait d'un trait d'union, mais je tire des phrases en phrases pour le prétraitement du PNL. P>

Entrée forte> p>

samples = [
    'A former employee of the accused company, — — —, offered a statement off the record.', #dash
    'He is afraid of two things—spiders and senior prom.' #dash
    'Fifty-six bottles of pop on the wall, fifty-six bottles of pop.' #hyphen
]

ignore_symbol = ['-']
for i in range(len(samples)):
    text = samples[i]
    ret = []
    for word in text.split(' '):
        ignore = len(word) <= 0 
        for iw in ignore_symbol:
            if word == iw:
                ignore = True
                break
        if not ignore:
            ret.append(word)

    text = ' '.join(ret)
    samples[i] = text
print(samples)

#output
['A former employee of the accused company, — — —, offered a statement off the record.', 
'He is afraid of two things—spiders and senior prom.
Fifty-six bottles of pop on the wall, fifty-six bottles of pop.']

for i in range (len(samples)):
    list_temp = []
    text = samples[i]
    list_temp.extend([x.strip() for x in text.split(',') if not x.strip() == ''])
    samples[i] = list_temp
print(samples)

#output
[['A former employee of the accused company',
  '— — —',
  'offered a statement off the record.'],
 ['He is afraid of two things—spiders and senior prom.Fifty-six bottles of pop on the wall',
  'fifty-six bottles of pop.']]


2 commentaires

Distinguer un trait d'union et Dash - Pouvez-vous décrire en mots la différence entre un trait d'union et un tiret? Connaissez-vous des expressions régulières?


Dans votre exemple de texte, les HYHENS sont le point de code Unicode 45 et les tirets sont un point de code unicode 8212 - est votre exemple une copie et coller de votre texte réel? .. pour C en s: impression (c, ord (c)) .


3 Réponses :


1
votes

Essayer d'utiliser une fente de regex (expression régulière) avec re.split . String.Split de Python () est trop limité dans la fonctionnalité pour cela. Vous aurez ensuite besoin de passer la version Unicode d'un personnage "d'un trait d'union".

Quelque chose comme: xxx


0 commentaires

2
votes

Si vous recherchez une solution non-regex, Unicode Point pour Dash est 8212 , vous pouvez donc remplacer ceux avec ',' , puis divisé par ',' puis ajoutez des phrases non-espaces: < Pré> xxx


0 commentaires

1
votes

Tout d'abord, les 2e et 3ème phrase ont été combinées car il n'y a pas de virgule séparant les deux cordes. En Python, écrire tmp = 'A''B' code> est équivalent à TMP = 'AB' code>, c'est pourquoi il n'y a que 2 chaînes dans les échantillons (2e et 3ème et 3ème ont été fusionnés).

sur votre question: Fonction supprimer_dash_preserve_hypshen code> ci-dessous supprime tous les tirets dans le paramètre str_sentence code> et renvoie un Str_Sentence CODE>. La fonction est ensuite appliquée à tous les éléments de chaîne dans la liste code> code>, générant ainsi le samples_without_dash code>. P>

samples = [
    'A former employee of the accused company, ———, offered a statement off the record.', #three dashes
    'He is afraid of two things — spiders and senior prom.',#**(COMMA HERE)** #dash
    'Fifty-six bottles of pop on the wall, fifty-six bottles of pop.' #hyphen
]

def remove_dash_preserve_hyphen(str_sentence, dash_signatures=['—']):
    for dash_sig in dash_signatures:
        str_sentence = str_sentence.replace(dash_sig, '')
    return str_sentence

samples_without_dash = [remove_dash_preserve_hyphen(sentence) for sentence in samples]


0 commentaires