En supprimant les signes de ponctuation en forme de texte dans Scala - Spark
C'est un échantillon de mes données:
case time (especially it's purse), read manual care, follow care instructions make stays waterproof -- example, inspect rubber seals doors (especially battery/memory card door open time)
xm "life support" picture . flip part bit flimsy guessing won't long . sound great altec speaker dock it! chance back base (xm3020) . traveling bag connect laptop extra speaker . amount paid ($25).
Je veux enlever tous les signes de ponctuation à l'exception de point(.) et également supprimer des mots avec length < = 2
, par exemple, pour ma sortie attendue est :
case time especially its purse read manual care follow care instructions . make stays waterproof example inspect rubber seals doors especially batterymemory card door open time
life support picture . flip part bit flimsy guessing wont long . sound great altec speaker dock chance back base xm3020 . traveling bag connect laptop extra speaker . amount paid $25 .
et cela devrait être mis en œuvre en Scala ,
j'ai essayé :
replaceAll( """\\W\s""", "")
replaceAll(""""[^a-zA-Z\.]""", "")
mais ne fonctionne pas bien , quelqu'un Peut-il m'aider?
$25
a un caractère spécial, qui vous n'avez pas supprimé.
OriginalL'auteur Rozita | 2015-05-06
Vous devez vous connecter pour publier un commentaire.
En regardant les regex javadoc (http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html), nous voyons que le caractère de classe pour la ponctuation est
\p{Punct}
et que l'on peut supprimer un caractère à partir d'une classe de caractères à l'aide de quelque chose d'aussi[a-z&&[^def]]
. À partir de là il est facile de définir une expression régulière qui va supprimer tous les signes de ponctuation à l'exception de la dot:Supprimant des mots avec la taille de l' <= 2 pourrait être fait comme suit:
Combinant les deux, cela donne:
Noter que j'ai ajouté
\s*
pour supprimer les espaces redondants.Aussi, vous pouvez voir que le dessus de regex entièrement supprime '$', parce qu'il est un caractère de ponctuation (comme défini par unicode).
Si cela n'est pas souhaitable (comme semble l'indiquer vos sorties attendues), veuillez être plus précis dans ce que vous considérez comme des signes de ponctuation.
Par exemple, vous pourriez vouloir considérer que les caractères suivants comme signe de ponctuation:
?.!:()
:Alternativement, vous pouvez simplement ajouter " $ " à "pas-de ponctuation" personnage-liste, de même que la dot:
OriginalL'auteur Régis Jean-Gilles
Comment à ce sujet:
Ensuite, vous ajoutez simplement plus de signes de ponctuation à supprimer à l'aide de |, et assurez-vous pour échapper les caractères ( et ) avec doubles barres obliques inverses?
OriginalL'auteur Stefan Sigurdsson
Vous pouvez essayer de filtrage de la chaîne comme ceci:
OriginalL'auteur Duzzz
Essayer cela, il doit travailler:
De SORTIE:
OriginalL'auteur tuxdna