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 @@
-
\ 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)