Tengo una lista de oraciones.

Quiero lidiar con duplicados como este:

  • Zapatos blancos mujer
  • Zapatos mujer blanco
  • Zapatos blancos de mujer

Quiero convertirme en esto:

  • Zapatos blancos mujer

¿Puedo hacer esto en Notepad ++?

¿O quizás algún otro software?

1
hamsun 14 dic. 2016 a las 06:16

2 respuestas

La mejor respuesta

No creo que puedas hacer ese trabajo en Npp.

Aquí hay una forma de hacer el trabajo con perl que mantiene el caso y el orden de la primera línea.
(Gracias a @jwpfox por el ejemplo de entrada).

use Modern::Perl;

my $prev = '';
while(<DATA>) {
    chomp;
    my $str = join'',sort split' ',lc$_;
    say $_ if $str ne $prev;
    $prev = $str;
}

__DATA__
White shoes women
Shoes women white
Women white shoes
White shoes women
Shoes women white
Women white shoes
Men black boots
Black boots men
Boots men black
girl yellow shirt
yellow girl shirt
pants blue boy

Salida:

White shoes women
Men black boots
girl yellow shirt
pants blue boy

Una versión en PHP:

$s = array(
'White shoes women',
'Shoes women white',
'Women white shoes',
'White shoes women',
'Shoes women white',
'Women white shoes',
'Men black boots',
'Black boots men',
'Boots men black',
'girl yellow shirt',
'yellow girl shirt',
'pants blue boy');

$prev = '';
foreach($s as $line) {
    $list = explode(' ', strtolower($line));
    sort($list);
    $str = implode('',$list);
    if ($str != $prev) echo $line,"\n";
    $prev = $str;
}

Salida:

White shoes women
Men black boots
girl yellow shirt
pants blue boy
1
Toto 14 dic. 2016 a las 12:28

Usando la opción "algún otro software".

Contenido del archivo input.txt:

White shoes women
Shoes women white
Women white shoes
Men black boots
Black boots men
Boots men black
girl yellow shirt
yellow girl shirt
pants blue boy

Python 3:

sentences = []

with open('input.txt', mode='r') as infile:
    for line in infile:
        wordlist = line.split(' ')
        words = []
        for word in wordlist:
            word = word.strip()
            words.append(word.lower())

        words.sort()

        if words not in sentences:
            sentences.append(words)

with open('output.txt', mode='w') as outfile:
    for sentence in sentences:
        for word in sentence:
            outfile.write(word + ' ')
        outfile.write('\n')

Contenido del archivo output.txt:

shoes white women 
black boots men 
girl shirt yellow 
blue boy pants 
0
jwpfox 14 dic. 2016 a las 10:30