9
votes

Supprimer les caractères répétés des mots

Je me demandais quelle est la meilleure façon de convertir quelque chose comme "haaaaappppyyy" à "haaappyy".

Fondamentalement, lors de l'analyse d'argot, les gens répètent parfois des personnages pour l'accent ajouté.

Je me demandais quelle est la meilleure façon de faire c'est? Utilisation de SET () ne fonctionne pas car l'ordre des lettres est évidemment important.

Des idées? J'utilise Python + NLTK.


3 commentaires

Essentiellement, je ne fais que cela si une lettre est répétée> 2 fois de suite dans le même mot, de manière réaliste que le mot serait de manière concrète de cette logique. Cependant, je pourrais utiliser enchanter une vérification orthographique.


oh désolé, j'ai oublié que j'ai répété le "y", oui, ce serait "haonyy"


Correspondant à un dictionnaire est également un problème agréable: trouver le mot vrai le plus court que vous pouvez obtenir en laissant tomber des répétitions. Ce n'est pas trivial puisque certains mots ont deux ou plusieurs lettres doubles (pensez "comptable").


4 Réponses :


0
votes

C'est une façon de le faire (limité à la contrainte évidente que Python ne parle pas anglais).

>>> s="haaaappppyy"
>>> reduce(lambda x,y: x+y if x[-2:]!=y*2 else x, s, "")
'haappyy'


0 commentaires

32
votes

On peut faire en utilisant des expressions régulières: xxx

(.) \ 1 + remplace n'importe quel caractère (. ) suivi de Un ou plusieurs du même caractère (en raison de la backref \ 1 il doit être identique) par deux fois le caractère.


3 commentaires

J'utiliserais r '(.) \ 1 {2,}' . Cela devrait vous donner une autre vitesse.


@Timpietzcker n'accélère pas vraiment la substitution. Ma première pensée était la même chose que les larsmans 'que l'expression régulière devrait être beaucoup plus rapide que le groupe / rejoindre, mais cela ne semble pas être le cas.


@HOWARD: Ce sera si la chaîne contient de nombreuses doubles lettres. Pas sur cette chaîne de test, évidemment.



8
votes

Vous pouvez écraser plusieurs occurrences de lettres avec itheroTools.groupby : xxx

De même, vous pouvez obtenir hayappyy de groupeby avec xxx


0 commentaires

1
votes

Vous devriez le faire sans réduction ni réégygops: xxx

Le nombre de répétitions est codé en dur à > 1 et -2 ci-dessus . Le cas général: xxx


0 commentaires