Qual é a melhor maneira de classificar?

0

Eu faço muito a manipulação de texto, e uma das operações que eu uso freqüentemente é a classificação - muitas vezes removendo qualquer duplicata também.

Então eu normalmente uso os comandos sort ou sort -u da linha de comando ou em scripts, macros, etc - se eu não estiver trabalhando no LibreOffice Writer ou Calc , é claro (que infelizmente não tem a opção de remover duplicatas durante a classificação, ou eu não sei; -)

Agora eu tenho um arquivo de texto simples que contém uma grande coleção de símbolos, emoticons, formas, linhas, letras e números ASCII não-padrão, etc. com muitas duplicatas.

Foi fácil convertê-los em um caractere por texto de linha.

No entanto, classificar e remover duplicatas aparentemente não é tão simples quanto se poderia imaginar:

Usar o comando sort -u file.txt > file-sorted.txt infelizmente reduz as linhas de 2078 para apenas 359, removendo cerca de mil caracteres únicos, eu acho - posso ver que há muitos que são filtrados com erro.

Portanto, a minha conclusão é que sort -u command é apenas bom para caracteres alfanuméricos padrão .

Alguma idéia e sugestão?

PS: Aqui está um texto de exemplo com 40 caracteres do arquivo que estou tentando processar:

ღ ❂ ◕ ⊕ Θ o O ♋ ☯ ⊙ ◎ ๑ ☜ ☞ ♨ ☎ ☏ ۩ ۞ ♬ ✖ ɔ ½ ' ‿ ' * ᴗ * ◕ ‿ ◕ ❊ ᴗ ❊ . ᴗ . ᵒ ᴗ 

Existem apenas algumas duplicatas aqui, mas embora o comando sort processe o texto com alguns problemas, mas sem nenhuma perda, ambos sort -u e uniq têm exatamente a mesma saída, reduzindo para 11 com muitos personagens eliminados.

    
por Sadi 11.07.2017 / 16:17

1 resposta

1

Tente usar algo com suporte adequado a Unicode, como o Python:

$ python3 -c 'import sys; print("\n".join(sorted(set(c for l in sys.stdin.readlines() for c in l.split()))))' < bar
'
*
.
O
o
½
ɔ
Θ
۞
۩
๑
ღ
ᴗ
ᵒ
‿
⊕
⊙
◎
◕
☎
☏
☜
☞
☯
♋
♨
♬
✖
❂
❊
$ python3 -c 'import sys; print(len(set(c for l in sys.stdin.readlines() for c in l.split())))' < bar
30
    
por 12.07.2017 / 13:00