Trova parole ripetute in un text

Uno dei più comuni errori è quello di ripetere la stessa parola due volte, come qui. Ho bisogno di una procedura automatica per rimuovere tutte le parole ripetute in un file di text. Questo non dovrebbe essere una caratteristica strana per un editor moderno o ortografico, per esempio ricordo che MS Word ha introdotto questa funzionalità diversi anni fa! A quanto pare, il controllo di ortografia predefinito sul mio OS (hun-spell) non può farlo, in quanto trova solo parole non nel dictionary.

Sarebbe giusto avere una soluzione valida per un editor di editor di text per linux (pluma / gedit2 o Sublime-text) e una soluzione basata su uno script bash.

Con GNU grep:

echo 'Hi! Hi, same word twice twice, as as here here! ! ,123 123 need' | grep -Eo '(\b.+) \1\b' 

Produzione:

 due volte due volte
 così come
 qui qui
 123 123

Opzioni :

-E : Interpretare (\b.+) \1\b come espressione regolare estesa.

-o : Stampa solo le parti corrispondenti (non vuote) di una linea corrispondente, con ciascuna di queste parti su una linea di output separata.

Regex :

\b : È un limite di parola zero.

.+ : Corrisponde a uno o più caratteri.

\1 : Le parentesi () segnano un gruppo di cattura e \1 significa utilizzare qui il valore dal primo gruppo di cattura.


Riferimento: Le FAQ di Regular Express Overflow Regular Expressions

Perlishly, pensavo:

 use strict; use warnings; local $/; my $slurp = <DATA>; $slurp =~ s/\b(\w+)\W\1/$1/go; print $slurp; __DATA__ Hi! Hi, same same? word twice twice, as as here here! ! ,123 123 need need as here 

Tenga presente, però, un sacco di corrispondenza di pattern è orientata alla linea, per cui devi essere attento se si attraversano i confini della linea. Se puoi escludere quel caso, hai un lavoro più facile perché puoi analizzare una row alla volta. Non lo faccio, quindi fininetworking a leggere l'integer file nella memory.