diff --git a/CHANGELOG.md b/CHANGELOG.md index 508632d..feff1ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] - 2022-06-30 +## [Unreleased] - 2022-07-16 ### Added @@ -19,6 +19,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### CI/CD +## [2.1.0] - 2022-07-16 + +### Added +* Calculation of i100-index, i1000-index, and i10000-index, with inclusion in SVG for any of + these that are greater than 0. + + ## [2.0.0] - 2022-06-30 **BREAKING CHANGES** Entry point has changed--now runs as a module rather than a script. diff --git a/README.md b/README.md index fe35b94..21a55a5 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ This command line utility does the following: * retrieves the first page of your Google Scholar profile; * parses from that page your total citations, your five-year citation count, your h-index, your i10-index, and the number of citations of your most-cited paper; * computes your g-index provided if it is less than 100 ([reason for limitation later](#respect-google-scholars-robotstxt)); +* computes your i100-index, i1000-index, and i10000-index ([doi:10.1007/s11192-020-03831-9](https://doi.org/10.1007/s11192-020-03831-9)), hiding any that are 0, and provided they are less than 100 ([reason for limitation later](#respect-google-scholars-robotstxt)); * generates a JSON file summarizing these bibliometrics; and * generates one or more SVG images summarizing these bibliometrics. @@ -50,12 +51,13 @@ Here is a sample of the JSON summary also generated by the utility: ```JSON { - "fiveYear": 376, - "g": 45, + "fiveYear": 364, + "g": 44, "h": 25, "i10": 33, + "i100": 3, "most": 228, - "total": 2064 + "total": 2052 } ``` @@ -162,8 +164,8 @@ py -m bibliometrics ## Respect Google Scholar's robots.txt If you use this utility, please respect Google Scholar's robots.txt. The reason that the -g-index is only computed by this utility if it is less than 100 derives from Scholar's -robots.txt. Here is the relevant excerpt: +g-index (as well as i100-index, i1000-index, i10000-index) is only computed by this utility +if it is less than 100 derives from Scholar's robots.txt. Here is the relevant excerpt: ```robots.txt Allow: /citations?user= diff --git a/bibliometrics.json b/bibliometrics.json index 93fdc6a..9069359 100644 --- a/bibliometrics.json +++ b/bibliometrics.json @@ -1,8 +1,9 @@ { - "fiveYear": 376, - "g": 45, + "fiveYear": 364, + "g": 44, "h": 25, "i10": 33, + "i100": 3, "most": 228, - "total": 2064 + "total": 2052 } \ No newline at end of file diff --git a/images/bibliometrics.svg b/images/bibliometrics.svg index c304dd4..2bbf0a7 100644 --- a/images/bibliometrics.svg +++ b/images/bibliometrics.svg @@ -1 +1 @@ -BibliometricsTotal citations2052Five-year citations364Most-cited paper228h-index25i10-index33g-index44Last updated: 11 June 2022 \ No newline at end of file +BibliometricsTotal citations2052Five-year citations364Most-cited paper228h-index25i10-index33i100-index3g-index44Last updated: 16 July 2022 \ No newline at end of file diff --git a/images/bibliometrics2.svg b/images/bibliometrics2.svg index c98a7ab..2111731 100644 --- a/images/bibliometrics2.svg +++ b/images/bibliometrics2.svg @@ -1 +1 @@ -BibliometricsTotal citations2052Five-year citations364Most-cited paper228h-index25i10-index33g-index44Last updated: 11 June 2022 \ No newline at end of file +BibliometricsTotal citations2052Five-year citations364Most-cited paper228h-index25i10-index33i100-index3g-index44Last updated: 16 July 2022 \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index c5fe323..0ea8619 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "bibliometrics" -version = "2.0.0" +version = "2.1.0" authors = [ { name="Vincent A. Cicirello", email="development@cicirello.org" }, ] @@ -25,10 +25,14 @@ keywords = [ "g-index", "h-index", "i10-index", + "i100-index", + "i1000-index", + "i10000-index", "journals", "publications", "researcher", "scholar", + "scientometrics", "SVG", "SVG generation", ] diff --git a/src/bibliometrics/bibliometrics.py b/src/bibliometrics/bibliometrics.py index 01e793a..2ee1ec0 100755 --- a/src/bibliometrics/bibliometrics.py +++ b/src/bibliometrics/bibliometrics.py @@ -86,6 +86,9 @@ def generateBibliometricsImage(metrics, colors, titleText) : ("Most-cited paper", "most"), ("h-index", "h"), ("i10-index", "i10"), + ("i100-index", "i100"), + ("i1000-index", "i1000"), + ("i10000-index", "i10000"), ("g-index", "g") ] @@ -226,14 +229,20 @@ def parseBibliometrics(page) : return metrics i10 = page[startStat+1:endStat] metrics["i10"] = int(i10.strip()) - g, most = calculateMostAndG(page) + g, most, i100, i1000, i10000 = calculate_additional(page) if g > 0 and g < 100 : metrics["g"] = g if most > 0 : metrics["most"] = most + if i100 > 0 and i100 < 100 : + metrics["i100"] = i100 + if i1000 > 0 and i1000 < 100 : + metrics["i1000"] = i1000 + if i10000 > 0 and i10000 < 100 : + metrics["i10000"] = i10000 return metrics -def calculateMostAndG(page) : +def calculate_additional(page) : """Calculates the g-index and the most cited paper. Keyword arguments: @@ -243,11 +252,14 @@ def calculateMostAndG(page) : if len(citesList) > 0 : citesList.sort(reverse=True) most = citesList[0] + i100 = sum(1 for x in citesList if x >= 100) + i1000 = sum(1 for x in citesList if x >= 1000) + i10000 = sum(1 for x in citesList if x >= 10000) for i in range(1, len(citesList)) : citesList[i] = citesList[i] + citesList[i-1] citesList = [ (i+1, x) for i, x in enumerate(citesList) ] - return max(y for y, x in citesList if x >= y*y), most - return 0, 0 + return max(y for y, x in citesList if x >= y*y), most, i100, i1000, i10000 + return 0, 0, 0, 0, 0 def parseDataForG(page) : """Parses the cites per publication for calculating g-index diff --git a/tests/tests.py b/tests/tests.py index 8c9fd6f..0c13409 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -46,6 +46,9 @@ def test_parse(self) : self.assertEqual(33, metrics["i10"]) self.assertEqual(44, metrics["g"]) self.assertEqual(228, metrics["most"]) + self.assertEqual(3, metrics["i100"]) + self.assertFalse("i1000" in metrics) + self.assertFalse("i10000" in metrics) def test_generate_image(self) : metrics = { @@ -53,6 +56,7 @@ def test_generate_image(self) : "fiveYear" : 364, "h" : 25, "i10" : 33, + "i100" : 3, "g" : 44, "most" : 228 } @@ -81,3 +85,4 @@ def test_generate_image(self) : if TestBibiometrics.printSampleImage : bib.outputImage(image, "images/bibliometrics2.svg") bib.outputImage(image2, "images/bibliometrics.svg") + bib.outputJSON("bibliometrics.json", metrics)