Como remover todas as palavras duplicadas em todas as linhas usando o Notepad ++?

11

Estou trabalhando em um arquivo que contém linhas com palavras-chave e algumas linhas contêm palavras-chave duplicadas.

Por exemplo:

dangerous,dangerous,hazardous,perilous

Quero dizer ao Notepad ++ que desejo remover todas as palavras duplicadas por linha. Para este exemplo dangerous,seria removido:

dangerous,hazardous,perilous

Eu tenho várias linhas assim e é por isso que estou procurando uma maneira automatizada de fazer isso.

Gabriel
fonte
1
Que tal dangerous,hazardous,dangerous,perilous? Em outras palavras, as palavras duplicadas estão sempre próximas uma da outra?
Daniel Beck

Respostas:

10

Você pode usar uma expressão regular para remover palavras duplicadas consecutivas em uma linha, no entanto, não acho possível remover palavras duplicadas que não são consecutivas (por exemplo dangerous, hazardous, dangerous).

Use este regex na janela de substituição no Notepad ++ e não se esqueça de selecionar "Expressão regular" como a opção Modo de pesquisa abaixo:

Este regex irá remover todas as palavras duplicadas consecutivas - se é 2 palavras duplicadas ou 10 palavras duplicadas consecutivamente: \b(\w+)(?:,\s+\1\b)+ .

O mesmo regex sem vírgulas seria: \b(\w+)(?:\s+\1\b)+(pode ser útil para outros usuários).

Se você quer um regex especificamente para apenas duas palavras duplicadas (duplos), use esse regex: (\b\w+\b)\W+\1.

Coloque este regex na substituir com caixa para manter uma ocorrência da palavra (caso contrário, todas as palavras repetidas serão removidos): ${1} .

Essas expressões regulares resolverão uma situação como a descrita na sua pergunta como exemplo. O primeiro regex funcionará para todo número de palavras duplicadas (por exemplo dangerous, dangerous, dangerous, dangerous, hazardous), enquanto a segunda versão funcionará apenas para duas palavras duplicadas (por exemplo dangerous, dangerous, hazardous).

Nota: A expressão regular só se aplica ao formato descrito na pergunta, significado que formata como two words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordnão será alterado porque a regex não se aplica a eles.

amiregelz
fonte
Obrigado pela ajuda! No entanto, estou recebendo 0 ocorrências, tentei fazer isso com palavras-chave separadas, como você sugeriu e não funcionou, também tentei como eram antes e nada, verifique minha captura de tela: goo.gl/eZ7Kp
Gabriel
Este regex deve funcionar: (\b\w+\b)\W+\1para duas palavras duplicadas. Vou editar minha resposta. As vírgulas são o motivo pelo qual a outra regex não funciona.
27612 amiregelz
Tentei todas as combinações possíveis, sem vírgulas, apenas espaços, sem espaço e vírgula e, no entanto, nada. Por favor, iluminar-me, aqui está o arquivo de texto: goo.gl/sP20z
Gabriel
O problema é que a expressão regular que escrevi na minha resposta se aplica somente para o formato (pensei) que você pediu: word, word, anotherword. No entanto, você tem muitas instâncias que são um pouco diferentes, como came across, came acrossalgumas com 3 ou 4 palavras. Também há palavras com 'like don'te isso torna as coisas mais complicadas no sistema regex do Notepad ++ . O sistema de regex do Notepad ++ também é bastante irritante e limitado, portanto a solução é usar o regex em python (ou outra linguagem) ou criar expressões regulares específicas do formato para o Notepad ++.
27612 amiregelz
Outro problema é que a maioria das palavras duplicadas também aparece na linha anterior, o que dificulta o alcance do seu objetivo. Se você deseja remover todas as palavras duplicadas, não foi tão difícil. Você poderia fazer algo como este e este . Sugiro que você use expressões regulares específicas no Notepad ++ (posso ajudá-lo, basta me dizer todos os formatos das palavras duplicadas) ou considerar uma abordagem diferente para o seu problema.
Amiregelz
1

Aqui está uma maneira de fazer o trabalho: isso substituirá todas as palavras duplicadas, mesmo que não sejam contíguas:

  • Ctrl+H
  • Encontre o que: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Substituir com: LEAVE EMPTY
  • check Wrap around
  • check Expressão regular
  • NÃO VERIFIQUE . matches newline
  • Replace all

Explicação:

(?:^|\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 uma entrada como: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Obtemos:

dangerous,hazardous,perilous
Toto
fonte