¿Cómo eliminar todas las palabras duplicadas en cada línea usando Notepad ++?

11

Estoy trabajando en un archivo que contiene líneas con palabras clave y algunas líneas contienen palabras clave duplicadas.

Por ejemplo:

dangerous,dangerous,hazardous,perilous

Quiero decirle a Notepad ++ que quiero eliminar cada palabra duplicada por línea. Para este ejemplo dangerous,se eliminaría:

dangerous,hazardous,perilous

Tengo un montón de líneas como esa y es por eso que estoy buscando una forma automatizada de hacer esto.

Gabriel
fuente
1
¿Qué hay de dangerous,hazardous,dangerous,perilous? En otras palabras, ¿las palabras duplicadas siempre están una al lado de la otra?
Daniel Beck

Respuestas:

11

Puede usar una expresión regular para eliminar palabras duplicadas consecutivas en una línea, sin embargo, no creo que sea posible eliminar palabras duplicadas que no son consecutivas (por ejemplo dangerous, hazardous, dangerous).

Use esta expresión regular en la ventana de reemplazo en Notepad ++, y no olvide seleccionar "Expresión regular" como la opción Modo de búsqueda a continuación:

Esta expresión regular eliminará todas las palabras duplicadas consecutivos - ya sea 2 palabras duplicadas o 10 palabras duplicadas de forma consecutiva: \b(\w+)(?:,\s+\1\b)+ .

La misma expresión regular sin comas sería: \b(\w+)(?:\s+\1\b)+(podría ser útil para otros usuarios).

Si desea una expresión regular específicamente para sólo dos palabras duplicadas (dobles), utilice esta expresión regular: (\b\w+\b)\W+\1.

Coloque esta expresión regular en el Reemplazar con caja para guardar una ocurrencia de la palabra (palabras de lo contrario todo repetidos serán eliminados): ${1} .

Estas expresiones regulares solucionarán una situación como la que describiste en tu pregunta como ejemplo. La primera expresión regular funcionará para cada número de palabras duplicadas (por ejemplo dangerous, dangerous, dangerous, dangerous, hazardous), mientras que la segunda versión solo funcionará para dos palabras duplicadas (por ejemplo dangerous, dangerous, hazardous).

Nota: La expresión regular sólo se aplicará en el formato descrito en la pregunta, lo que significa que formatos como two words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordno será cambiado debido a la expresión regular no se aplicará a ellos.

amiregelz
fuente
¡Gracias por la ayuda! Sin embargo, estoy obteniendo 0 apariciones, intenté hacer esto con palabras clave separadas como sugirió y no funcionó, también intenté como estaban antes y nada, compruebe mi captura de pantalla: goo.gl/eZ7Kp
Gabriel
Esta expresión regular debería funcionar: (\b\w+\b)\W+\1para dos palabras duplicadas. Editaré mi respuesta. Las comas explican por qué la otra expresión regular no funciona.
amiregelz
Intenté todas las combinaciones posibles, sin comas, solo espacios, sin espacios y comas, y sin embargo nada. Ilumíneme, aquí está el archivo de texto: goo.gl/sP20z
Gabriel
El problema es que la expresión regular que escribí en mi respuesta sólo se aplica al formato (pensé) que solicitó: word, word, anotherword. Sin embargo, tiene muchas instancias que son un poco diferentes, como came across, came acrossalgunas y con 3 o 4 palabras. También hay palabras con 'like don'ty hace las cosas más complicadas en el sistema Notege ++ regex . El sistema Notege ++ regex también es bastante molesto y limitado, por lo que la solución es usar regex en python (u otro idioma) o hacer expresiones regulares específicas del formato para Notepad ++.
amiregelz
Otro problema es que la mayoría de las palabras que están duplicadas también aparecen en la línea anterior, lo que dificulta el logro de su objetivo. Si desea eliminar todas las palabras duplicadas, entonces no fue tan difícil. Podrías hacer algo como esto y esto . Le sugiero que use expresiones regulares específicas en Notepad ++ (puedo ayudarlo, solo dígame todos los formatos de las palabras duplicadas) o considere un enfoque diferente para su problema.
amiregelz
1

Aquí hay una manera de hacer el trabajo, esto reemplazará todas las palabras duplicadas, incluso si no son contiguas:

  • Ctrl+H
  • Encontrar que: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Reemplazar con: LEAVE EMPTY
  • comprobar Ajustar
  • comprobar expresión regular
  • NO COMPROBAR . matches newline
  • Replace all

Explicación:

(?:^|\G)    : non capture group, beginning of line or position of last match
(\b\w+\b)   : group 1, 1 or more word character (ie. [a-zA-Z0-9_]), surrounded by word boundaries
,?          : optional comma
(?=.*\1)    : positive lookahead, check if thhere is the same word (contained in group 1) somewhere after

Dada una entrada como: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Tenemos:

dangerous,hazardous,perilous
Toto
fuente