Encontre títulos de artigos duplicados em meu arquivo .bib

Encontre títulos de artigos duplicados em meu arquivo .bib

Estou escrevendo minha tese e copiei e colei alguns conteúdos de arquivos .bib anteriores. Mas talvez eu tenha usado rótulos diferentes para o mesmo título de artigo e talvez tenha citado esses rótulos diferentes em minha tese, então talvez minhas referências possam conter o mesmo artigo duas vezes. Tenho quase 190 referências e acredito que será difícil encontrar visualmente artigos repetidos.

É possível encontrar no meu arquivo bib entradas com o mesmo título? Eu sei que o bibtex procura rótulos repetidos. É possível encontrar títulos repetidos no meu arquivo .bib?

Responder1

Você pode usar perlpara percorrer o arquivo bib, salvar todos os títulos como uma chave hash com sua linha como o valor hash e, em seguida, percorrê-lo e imprimir o título se seu valor tiver várias entradas. Para fazer isso, crie um arquivo com o seguinte conteúdo, por exemplo, "finddupls.pl", altere o nome do arquivo bib e execute perl finddupls.plem seu terminal:

#!perl
my %seen = ();

my $line = 0;
open my $B, 'file.bib';
while (<$B>) {
    $line++;
    # remove all non-alphanumeric characters, because bibtex could have " or { to encapsulate strings etc
    s/[^a-zA-Z0-9 _-]//ig; 
    # lower-case everything to be case-insensitive
    # pattern matches lines which start with title
    $seen{lc($1)} .= "$line," if /^\s*title\s*(.+)$/i;
}
close $B;

# loop through the title and count the number of lines found
foreach my $title (keys %seen) {
    # count number of elements seperated by comma
    my $num = $seen{$title} =~ tr/,//;
    print "title '$title' found $num times, lines: ".$seen{$title},"\n" if $num > 1;
}

# write sorted list into file
open my $S, '>sorted_titles.txt';
print $S join("\n", sort keys %seen);
close $S;

Ele retorna diretamente no terminal algo assim:

title 'observation on soil moisture of irrigation cropland by cosmic-ray probe' found 2 times, lines: 99,1350,
title 'multiscale and multivariate evaluation of water fluxes and states over european river basins' found 2 times, lines: 199,1820,
title 'calibration of a non-invasive cosmic-ray probe for wide area snow water equivalent measurement' found 2 times, lines: 5,32,

E também grava um arquivo sorted_titles.txtlistando todos os títulos em ordem alfabética que você pode percorrer e detectar duplicatas manualmente.

Responder2

Se você pode confiar que o titlecampo é idêntico, então é muito simples:

grep -n 'title =' bibliography.bib | uniq -cdf 1

Isso imprimirá apenas linhas não exclusivas ( -d) e o número de vezes que elas aparecem ( -c) para o arquivo bibliography.bibe o número da linha que aparecem ( -n) no arquivo de bibliografia; diz para ignorar o primeiro campo, que seria este número de linha -f 1.uniq

Então, se você receber uma linha como:

     2 733:  title =    {Ethica Nicomachea},

Você sabe que tem duas aparições title = {Ethica Nicomachea},e a primeira delas aparece na linha 733 do seu .bibarquivo.

informação relacionada