diff --git a/stats-corpus/README.md b/stats-corpus/README.md new file mode 100644 index 0000000..1c60f9a --- /dev/null +++ b/stats-corpus/README.md @@ -0,0 +1,41 @@ +stat-corpus +=============== + +Outil de statistiques descriptives sur les corpus ISTEX extrait par **harvestCorpus.pl** + +Permet de faire des statistiques sur les fichiers extraits d’ISTEX en utilisant le fichier +de métadonnées “logRequete.txt” (cf. l’option “-v” du programme “harvestCorpus.pl”). + +Si les fichiers XML éditeurs ont été extraits, il permet aussi de vérifier s’ils sont structurés +ou non. + +Le résultat comprend, en plus de l’en-tête, une ligne par document avec des champs séparés par +des tabulations (format TSV). + +### Usage +``` + statsCorpus.pl -l logfile ( -p préfixe | -c corpus ) [ -r répertoire ] [ -s sortie ] + statsCorpus.pl -h +``` + +### Options +``` + -l indique le nom du fichier “logfile” contenant les métadonnées ISTEX au format JSON + créé par l’option “-v” du programme “harvestCorpus.pl”. + Par défaut, ce fichier s’appelle “logRequete.txt” et se trouve dans le répertoire des + fichiers déchargés depuis le serveur ISTEX. + -c indique le nom du fichier “corpus” généré par le programme “harvestCorpus.pl” permettant + de faire le lien entre l’identifiant ISTEX d’un document et le nom des fichiers + extraits correspondants. + -p indique le préfixe utilisé au début du nom des fichiers déchargés par le programme + “harvestCorpus.pl”. + -r indique le répertoire où se trouve les fichiers XML éditeurs déchargés par le programme + “harvestCorpus.pl”. + -s indique le nom du fichier de sortie. Sinon, la sortie se fait sur la sortie standard. +``` + +### Exemple +``` + statsCorpus.pl -l Arthropodes/logRequete.txt -c Arthropodes_v2b.corpus -r Arthropodes + statsCorpus.pl -l Vieillissement/logRequete.txt -p Vieil_ -r Vieillissement -s Vieil.tsv +``` diff --git a/stats-corpus/statsCorpus.pl b/stats-corpus/statsCorpus.pl new file mode 100755 index 0000000..c9c96d8 --- /dev/null +++ b/stats-corpus/statsCorpus.pl @@ -0,0 +1,275 @@ +#!/usr/bin/perl + + +# Déclaration des pragmas +use strict; +use utf8; +use open qw/:std :utf8/; + +# Appel des modules externes de base +use Encode qw(decode_utf8 encode_utf8 is_utf8); +use Getopt::Long; + +# Appel des modules spécifiques à l'application +## use URI::Encode qw(uri_encode uri_decode); +## use LWP::Simple; +use JSON; +## use Text::Unidecode; + +my ($programme) = $0 =~ m|^(?:.*/)?(.+)|; + +my $version = "1.2.4"; +my $dateModif = "29 Septembre 2017"; + +# Variables +my $aide = 0; +my $corpus = ""; +my $logfile = ""; +my $prefixe = ""; +my $repertoire = ""; +my $sortie = ""; + +eval { + $SIG{__WARN__} = sub {usage(1);}; + GetOptions( + "corpus=s" => \$corpus, + "help" => \$aide, + "logfile=s" => \$logfile, + "prefixe=s" => \$prefixe, + "repertoire=s" => \$repertoire, + "sortie=s" => \$sortie, + ); + }; +$SIG{__WARN__} = sub {warn $_[0];}; +# “ machin ” +if ( $aide ) { + print "Programme : \n “$programme”, version $version ($dateModif)\n"; + print " Permet de faire des statistiques sur les fichiers extraits d’ISTEX en utilisant le fichier \n"; + print " de métadonnées “logRequete.txt” (cf. l’option “-v” du programme “harvestCorpus.pl”). \n"; +# print " \n"; + print " Si les fichiers XML éditeurs ont été extraits, il permet aussi de vérifier s’ils sont \n"; + print " structurés ou non. \n"; + print "\nUsage : \n $programme -l logfile ( -p préfixe | -c corpus ) [ -r répertoire ] [ -s sortie ]\n"; + print " $programme -h\n"; + print "\nOptions : \n"; + print " -l indique le nom du fichier “logfile” contenant les métadonnées ISTEX au format JSON \n"; + print " créé par l’option “-v” du programme “harvestCorpus.pl”. \n"; + print " Par défaut, ce fichier s’appelle “logRequete.txt” et se trouve dans le répertoire des \n"; + print " fichiers déchargés depuis le serveur ISTEX. \n"; + print " -c indique le nom du fichier “corpus” généré par le programme “harvestCorpus.pl” permettant \n"; + print " de faire le lien entre l’identifiant ISTEX d’un document et le nom des fichiers \n"; + print " extraits correspondants.\n"; + print " -p indique le préfixe utilisé au début du nom des fichiers déchargés par le programme \n"; + print " “harvestCorpus.pl”. \n"; + print " -r indique le répertoire où se trouve les fichiers XML éditeurs déchargés par le programme \n"; + print " “harvestCorpus.pl”.\n"; + print " -s indique le nom du fichier de sortie. Sinon, la sortie se fait sur la sortie standard. \n"; + print "\nExemples : \n"; + print " $programme -l Arthropodes/logRequete.txt -c Arthropodes_v2b.corpus -r Arthropodes\n"; + print " $programme -l Vieillissement/logRequete.txt -p Vieil_ -r Vieillissement -s Vieil.tsv\n\n"; + + exit 0; + } + +usage(2) if not $logfile; + +my $format = ""; +my $json = ""; +my $racine = ""; +my $num = 0; +my $total = 0; +my %racine = (); + +if ( $corpus ) { + open(TAB, "<:utf8", $corpus) or die "$!,"; + while() { + if ( /^id /o ) { + chomp; + s/\r//go; # Au cas où ... + my ($type, $id, $com, $nom) = split(/\s+/); + $racine{$id} = $nom; + } + } + close TAB; + } + +if ( $sortie ) { + open(OUT, ">:utf8", $sortie) or die "\"$sortie\" : $!,"; + } +else { + open(OUT, ">&STDOUT") or die "$!,"; + binmode(OUT, ">:utf8"); + } +print OUT "\x{FEFF}Identifiant ISTEX\tNom de fichier\tÉditeur\tScore qualité\tVersion PDF"; +print OUT "\tXML structuré\tDate de publication\tTitre\tRevue\tISSN\te-ISSN\tType de publication"; +print OUT "\tType de document\tCatégories WoS\tCatégories Science-Metrix\tCatégories INIST\n"; + +open(INP, "<:raw", $logfile) or die "$!,"; +while() { + if ( /^# (\w+_\d+)/ ) { + $racine = $1; + next; + } + elsif ( /^#/ ) { + next; + } + $json .= $_; + if ( /^\}/o ) { + my $perl = decode_json $json; + my %top = %{$perl}; + $total = $top{'total'}; + if ( $total > 0 ) { + $format = sprintf("%%0%dd", length($total) + 1); + my @hits = @{$top{'hits'}}; + foreach my $hit (@hits) { + $num ++; + my $fichier = undef; + my $xml = undef; + my %hit = %{$hit}; + my $id = $hit{'id'}; + if ( $racine ) { + $fichier = $racine; + $racine = ""; + } + elsif ( $racine{$id} ) { + $fichier = $racine{$id}; + } + elsif ( $prefixe ) { + $fichier = "$prefixe" . sprintf($format, $num); + } + if ( defined $fichier ) { + if ( $repertoire ) { + $xml = "$repertoire/$fichier.xml"; + } + } + else { + $fichier = "Nom de fichier inconnu"; + } + my $titre = $hit{'title'}; + my $nom = $hit{'corpusName'}; + my $date = ""; + if ( $hit{'copyrightDate'} ) { + $date = $hit{'copyrightDate'}; + } + elsif ( $hit{'publicationDate'} ) { + $date = $hit{'publicationDate'}; + } + my $langues = ""; + if ( defined $hit{'language'} ) { + $langues = join(" ; ", @{$hit{'language'}}); + } + my $wos = ""; + my $scienceMetrix = ""; + my $inist = ""; + if ( defined $hit{'categories'} ) { + my %categories = %{$hit{'categories'}}; + if ( defined $categories{'wos'} ) { + $wos = join(" ; ", @{$categories{'wos'}}); + } + if ( defined $categories{'scienceMetrix'} ) { + $scienceMetrix = join(" ; ", @{$categories{'scienceMetrix'}}); + } + if ( defined $categories{'inist'} ) { + $inist = join(" ; ", @{$categories{'inist'}}); + } + } + my $genre = ""; + if ( defined $hit{'genre'} ) { + $genre = join(", ", @{$hit{'genre'}}); + } + my $pdfVersion = ""; + my $score = ""; + if ( defined $hit{'qualityIndicators'} ) { + my %indicateurs = %{$hit{'qualityIndicators'}}; + if ( defined $indicateurs{'pdfVersion'} ) { + $pdfVersion = $indicateurs{'pdfVersion'}; + } + if ( defined $indicateurs{'score'} ) { + $score = $indicateurs{'score'}; + } + } + my $revue = ""; + my $issn = ""; + my $eissn = ""; + my $dt = ""; + if ( defined $hit{'host'} ) { + my %host = %{$hit{'host'}}; + if ( defined $host{'title'} ) { + $revue = $host{'title'} + } + if ( defined $host{'issn'} ) { + $issn = join("/", @{$host{'issn'}}); + } + if ( defined $host{'eissn'} ) { + $eissn = join("/", @{$host{'eissn'}}); + } + if ( defined $host{'genre'} ) { + $dt = join(", ", @{$host{'genre'}}); + } + } + my $structure = "Inconnu"; + if ( defined $xml and -f $xml ) { + $structure = "Non"; + my $texte = ""; + open(XML, "<:utf8", $xml) or die "$!,"; + while() { + tr/\n\r/ /s; + $texte .= $_; + } + close XML; + # Wiley + if ( $texte =~ m|xmlns="http://www.wiley.com/namespaces/wiley"|o ) { + $structure = "Oui" if $texte =~ /\s*\s*\s*|oi; + } + # Brill + elsif ( $texte =~ m|http://dtd.nlm.nih.gov/publishing|o or + $texte =~ m|Brill|o ) { + $structure = "Oui" if $texte =~ m|\s*Oxford University Press|o ) { + $structure = "Oui" if $texte =~ m|\s*Emerald Group Publishing Limited|o or + $texte =~ m|MCB UP Ltd|o ) { + $structure = "Oui" if $texte =~ m|\s*\s*(BMJ|British Medical Journal) Publishing Group/o ) { + $structure = "Oui" if $texte =~ m|\s*\s*

|o; + } + } + print OUT "$id\t$fichier\t$nom\t$score\t$pdfVersion\t$structure\t$date\t$titre"; + print OUT "\t$revue\t$issn\t$eissn\t$genre\t$dt\t$wos\t$scienceMetrix\t$inist\n"; + } + } + else { + ; + } + $json = ""; + } + } + +exit 0; + + +sub usage +{ +print STDERR "Usage : $programme -l logfile ( -p préfixe | -c corpus ) [ -r répertoire ] [ -s sortie ] \n"; +print STDERR " $programme -h \n"; + +exit shift; +} diff --git a/stats/README.md b/stats/README.md deleted file mode 100644 index 1c60f9a..0000000 --- a/stats/README.md +++ /dev/null @@ -1,41 +0,0 @@ -stat-corpus -=============== - -Outil de statistiques descriptives sur les corpus ISTEX extrait par **harvestCorpus.pl** - -Permet de faire des statistiques sur les fichiers extraits d’ISTEX en utilisant le fichier -de métadonnées “logRequete.txt” (cf. l’option “-v” du programme “harvestCorpus.pl”). - -Si les fichiers XML éditeurs ont été extraits, il permet aussi de vérifier s’ils sont structurés -ou non. - -Le résultat comprend, en plus de l’en-tête, une ligne par document avec des champs séparés par -des tabulations (format TSV). - -### Usage -``` - statsCorpus.pl -l logfile ( -p préfixe | -c corpus ) [ -r répertoire ] [ -s sortie ] - statsCorpus.pl -h -``` - -### Options -``` - -l indique le nom du fichier “logfile” contenant les métadonnées ISTEX au format JSON - créé par l’option “-v” du programme “harvestCorpus.pl”. - Par défaut, ce fichier s’appelle “logRequete.txt” et se trouve dans le répertoire des - fichiers déchargés depuis le serveur ISTEX. - -c indique le nom du fichier “corpus” généré par le programme “harvestCorpus.pl” permettant - de faire le lien entre l’identifiant ISTEX d’un document et le nom des fichiers - extraits correspondants. - -p indique le préfixe utilisé au début du nom des fichiers déchargés par le programme - “harvestCorpus.pl”. - -r indique le répertoire où se trouve les fichiers XML éditeurs déchargés par le programme - “harvestCorpus.pl”. - -s indique le nom du fichier de sortie. Sinon, la sortie se fait sur la sortie standard. -``` - -### Exemple -``` - statsCorpus.pl -l Arthropodes/logRequete.txt -c Arthropodes_v2b.corpus -r Arthropodes - statsCorpus.pl -l Vieillissement/logRequete.txt -p Vieil_ -r Vieillissement -s Vieil.tsv -``` diff --git a/stats/statsCorpus.pl b/stats/statsCorpus.pl deleted file mode 100755 index c9c96d8..0000000 --- a/stats/statsCorpus.pl +++ /dev/null @@ -1,275 +0,0 @@ -#!/usr/bin/perl - - -# Déclaration des pragmas -use strict; -use utf8; -use open qw/:std :utf8/; - -# Appel des modules externes de base -use Encode qw(decode_utf8 encode_utf8 is_utf8); -use Getopt::Long; - -# Appel des modules spécifiques à l'application -## use URI::Encode qw(uri_encode uri_decode); -## use LWP::Simple; -use JSON; -## use Text::Unidecode; - -my ($programme) = $0 =~ m|^(?:.*/)?(.+)|; - -my $version = "1.2.4"; -my $dateModif = "29 Septembre 2017"; - -# Variables -my $aide = 0; -my $corpus = ""; -my $logfile = ""; -my $prefixe = ""; -my $repertoire = ""; -my $sortie = ""; - -eval { - $SIG{__WARN__} = sub {usage(1);}; - GetOptions( - "corpus=s" => \$corpus, - "help" => \$aide, - "logfile=s" => \$logfile, - "prefixe=s" => \$prefixe, - "repertoire=s" => \$repertoire, - "sortie=s" => \$sortie, - ); - }; -$SIG{__WARN__} = sub {warn $_[0];}; -# “ machin ” -if ( $aide ) { - print "Programme : \n “$programme”, version $version ($dateModif)\n"; - print " Permet de faire des statistiques sur les fichiers extraits d’ISTEX en utilisant le fichier \n"; - print " de métadonnées “logRequete.txt” (cf. l’option “-v” du programme “harvestCorpus.pl”). \n"; -# print " \n"; - print " Si les fichiers XML éditeurs ont été extraits, il permet aussi de vérifier s’ils sont \n"; - print " structurés ou non. \n"; - print "\nUsage : \n $programme -l logfile ( -p préfixe | -c corpus ) [ -r répertoire ] [ -s sortie ]\n"; - print " $programme -h\n"; - print "\nOptions : \n"; - print " -l indique le nom du fichier “logfile” contenant les métadonnées ISTEX au format JSON \n"; - print " créé par l’option “-v” du programme “harvestCorpus.pl”. \n"; - print " Par défaut, ce fichier s’appelle “logRequete.txt” et se trouve dans le répertoire des \n"; - print " fichiers déchargés depuis le serveur ISTEX. \n"; - print " -c indique le nom du fichier “corpus” généré par le programme “harvestCorpus.pl” permettant \n"; - print " de faire le lien entre l’identifiant ISTEX d’un document et le nom des fichiers \n"; - print " extraits correspondants.\n"; - print " -p indique le préfixe utilisé au début du nom des fichiers déchargés par le programme \n"; - print " “harvestCorpus.pl”. \n"; - print " -r indique le répertoire où se trouve les fichiers XML éditeurs déchargés par le programme \n"; - print " “harvestCorpus.pl”.\n"; - print " -s indique le nom du fichier de sortie. Sinon, la sortie se fait sur la sortie standard. \n"; - print "\nExemples : \n"; - print " $programme -l Arthropodes/logRequete.txt -c Arthropodes_v2b.corpus -r Arthropodes\n"; - print " $programme -l Vieillissement/logRequete.txt -p Vieil_ -r Vieillissement -s Vieil.tsv\n\n"; - - exit 0; - } - -usage(2) if not $logfile; - -my $format = ""; -my $json = ""; -my $racine = ""; -my $num = 0; -my $total = 0; -my %racine = (); - -if ( $corpus ) { - open(TAB, "<:utf8", $corpus) or die "$!,"; - while() { - if ( /^id /o ) { - chomp; - s/\r//go; # Au cas où ... - my ($type, $id, $com, $nom) = split(/\s+/); - $racine{$id} = $nom; - } - } - close TAB; - } - -if ( $sortie ) { - open(OUT, ">:utf8", $sortie) or die "\"$sortie\" : $!,"; - } -else { - open(OUT, ">&STDOUT") or die "$!,"; - binmode(OUT, ">:utf8"); - } -print OUT "\x{FEFF}Identifiant ISTEX\tNom de fichier\tÉditeur\tScore qualité\tVersion PDF"; -print OUT "\tXML structuré\tDate de publication\tTitre\tRevue\tISSN\te-ISSN\tType de publication"; -print OUT "\tType de document\tCatégories WoS\tCatégories Science-Metrix\tCatégories INIST\n"; - -open(INP, "<:raw", $logfile) or die "$!,"; -while() { - if ( /^# (\w+_\d+)/ ) { - $racine = $1; - next; - } - elsif ( /^#/ ) { - next; - } - $json .= $_; - if ( /^\}/o ) { - my $perl = decode_json $json; - my %top = %{$perl}; - $total = $top{'total'}; - if ( $total > 0 ) { - $format = sprintf("%%0%dd", length($total) + 1); - my @hits = @{$top{'hits'}}; - foreach my $hit (@hits) { - $num ++; - my $fichier = undef; - my $xml = undef; - my %hit = %{$hit}; - my $id = $hit{'id'}; - if ( $racine ) { - $fichier = $racine; - $racine = ""; - } - elsif ( $racine{$id} ) { - $fichier = $racine{$id}; - } - elsif ( $prefixe ) { - $fichier = "$prefixe" . sprintf($format, $num); - } - if ( defined $fichier ) { - if ( $repertoire ) { - $xml = "$repertoire/$fichier.xml"; - } - } - else { - $fichier = "Nom de fichier inconnu"; - } - my $titre = $hit{'title'}; - my $nom = $hit{'corpusName'}; - my $date = ""; - if ( $hit{'copyrightDate'} ) { - $date = $hit{'copyrightDate'}; - } - elsif ( $hit{'publicationDate'} ) { - $date = $hit{'publicationDate'}; - } - my $langues = ""; - if ( defined $hit{'language'} ) { - $langues = join(" ; ", @{$hit{'language'}}); - } - my $wos = ""; - my $scienceMetrix = ""; - my $inist = ""; - if ( defined $hit{'categories'} ) { - my %categories = %{$hit{'categories'}}; - if ( defined $categories{'wos'} ) { - $wos = join(" ; ", @{$categories{'wos'}}); - } - if ( defined $categories{'scienceMetrix'} ) { - $scienceMetrix = join(" ; ", @{$categories{'scienceMetrix'}}); - } - if ( defined $categories{'inist'} ) { - $inist = join(" ; ", @{$categories{'inist'}}); - } - } - my $genre = ""; - if ( defined $hit{'genre'} ) { - $genre = join(", ", @{$hit{'genre'}}); - } - my $pdfVersion = ""; - my $score = ""; - if ( defined $hit{'qualityIndicators'} ) { - my %indicateurs = %{$hit{'qualityIndicators'}}; - if ( defined $indicateurs{'pdfVersion'} ) { - $pdfVersion = $indicateurs{'pdfVersion'}; - } - if ( defined $indicateurs{'score'} ) { - $score = $indicateurs{'score'}; - } - } - my $revue = ""; - my $issn = ""; - my $eissn = ""; - my $dt = ""; - if ( defined $hit{'host'} ) { - my %host = %{$hit{'host'}}; - if ( defined $host{'title'} ) { - $revue = $host{'title'} - } - if ( defined $host{'issn'} ) { - $issn = join("/", @{$host{'issn'}}); - } - if ( defined $host{'eissn'} ) { - $eissn = join("/", @{$host{'eissn'}}); - } - if ( defined $host{'genre'} ) { - $dt = join(", ", @{$host{'genre'}}); - } - } - my $structure = "Inconnu"; - if ( defined $xml and -f $xml ) { - $structure = "Non"; - my $texte = ""; - open(XML, "<:utf8", $xml) or die "$!,"; - while() { - tr/\n\r/ /s; - $texte .= $_; - } - close XML; - # Wiley - if ( $texte =~ m|xmlns="http://www.wiley.com/namespaces/wiley"|o ) { - $structure = "Oui" if $texte =~ /\s*\s*\s*|oi; - } - # Brill - elsif ( $texte =~ m|http://dtd.nlm.nih.gov/publishing|o or - $texte =~ m|Brill|o ) { - $structure = "Oui" if $texte =~ m|\s*Oxford University Press|o ) { - $structure = "Oui" if $texte =~ m|\s*Emerald Group Publishing Limited|o or - $texte =~ m|MCB UP Ltd|o ) { - $structure = "Oui" if $texte =~ m|\s*\s*(BMJ|British Medical Journal) Publishing Group/o ) { - $structure = "Oui" if $texte =~ m|\s*\s*

|o; - } - } - print OUT "$id\t$fichier\t$nom\t$score\t$pdfVersion\t$structure\t$date\t$titre"; - print OUT "\t$revue\t$issn\t$eissn\t$genre\t$dt\t$wos\t$scienceMetrix\t$inist\n"; - } - } - else { - ; - } - $json = ""; - } - } - -exit 0; - - -sub usage -{ -print STDERR "Usage : $programme -l logfile ( -p préfixe | -c corpus ) [ -r répertoire ] [ -s sortie ] \n"; -print STDERR " $programme -h \n"; - -exit shift; -}