citation-map 4.2__tar.gz → 4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {citation-map-4.2 → citation-map-4.3}/PKG-INFO +35 -8
- {citation-map-4.2 → citation-map-4.3}/README.md +34 -7
- {citation-map-4.2 → citation-map-4.3}/citation_map/citation_map.py +8 -5
- {citation-map-4.2 → citation-map-4.3}/citation_map/scholarly_support.py +47 -30
- {citation-map-4.2 → citation-map-4.3}/citation_map.egg-info/PKG-INFO +35 -8
- {citation-map-4.2 → citation-map-4.3}/setup.py +1 -1
- {citation-map-4.2 → citation-map-4.3}/LICENSE.md +0 -0
- {citation-map-4.2 → citation-map-4.3}/citation_map/__init__.py +0 -0
- {citation-map-4.2 → citation-map-4.3}/citation_map.egg-info/SOURCES.txt +0 -0
- {citation-map-4.2 → citation-map-4.3}/citation_map.egg-info/dependency_links.txt +0 -0
- {citation-map-4.2 → citation-map-4.3}/citation_map.egg-info/requires.txt +0 -0
- {citation-map-4.2 → citation-map-4.3}/citation_map.egg-info/top_level.txt +0 -0
- {citation-map-4.2 → citation-map-4.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: citation-map
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.3
|
|
4
4
|
Summary: A simple tool to generate your Google Scholar citation world map.
|
|
5
5
|
Home-page: https://github.com/ChenLiu-1996/CitationMap
|
|
6
6
|
Author: Chen Liu
|
|
@@ -16,10 +16,11 @@ License-File: LICENSE.md
|
|
|
16
16
|
|
|
17
17
|
# Google Scholar Citation World Map
|
|
18
18
|
|
|
19
|
+
[](https://www.techrxiv.org/users/809001/articles/1213717-citationmap-a-python-tool-to-identify-and-visualize-your-google-scholar-citations-around-the-world)
|
|
20
|
+
[](https://openreview.net/pdf?id=BqJgCgl1IA)
|
|
19
21
|
[](https://pypi.org/project/citation-map/)
|
|
20
22
|
[](https://pypistats.org/packages/citation-map)
|
|
21
23
|
[](https://pypistats.org/packages/citation-map)
|
|
22
|
-
[](https://www.python.org/)
|
|
23
24
|
[![CC BY-NC-SA 4.0][cc-by-nc-sa-shield]][cc-by-nc-sa]
|
|
24
25
|
[![CC BY-NC-SA 4.0][cc-by-nc-sa-image]][cc-by-nc-sa]
|
|
25
26
|
|
|
@@ -27,13 +28,14 @@ License-File: LICENSE.md
|
|
|
27
28
|
[cc-by-nc-sa-image]: https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png
|
|
28
29
|
[cc-by-nc-sa-shield]: https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg
|
|
29
30
|
|
|
30
|
-
[Chen Liu](https://
|
|
31
|
+
[Chen Liu](https://chenliu-1996.github.io/), CS PhD Candidate at Yale University.
|
|
31
32
|
|
|
32
33
|
Research areas: Machine Learning, Spatial-Temporal Modeling, Medical Vision, AI4Science.
|
|
33
34
|
|
|
35
|
+
|
|
34
36
|
## News
|
|
35
37
|
**[Asking for advice]**
|
|
36
|
-
1. This is my first time dealing with webscraping/crawling. Users have reported stability issues, and I suspect the major problems are (1) being caught by CAPTCHA or robot check, and (2) being flagged for blacklist by Google Scholar. If you are experienced in these areas and have good advice, I would highly appreciate a GitHub issue or a pull request
|
|
38
|
+
1. This is my first time dealing with webscraping/crawling. Users have reported stability issues, and I suspect the major problems are (1) being caught by CAPTCHA or robot check, and (2) being flagged for blacklist by Google Scholar. If you are experienced in these areas and have good advice, I would highly appreciate a **GitHub issue or a pull request**.
|
|
37
39
|
|
|
38
40
|
[Aug 2, 2024] Version 4.0 released >>> Logic update. A new input argument `affiliation_conservative`. If set to True, we will use **a very conservative approach to identify affiliations** which leads to **much higher precision and lower recall**. Many thanks to [Zhijian Liu](https://github.com/zhijian-liu) for the [helpful discussion](https://github.com/ChenLiu-1996/CitationMap/issues/8).
|
|
39
41
|
|
|
@@ -63,6 +65,29 @@ Besides, there will be a **CSV file** recording citation information (citing aut
|
|
|
63
65
|
|
|
64
66
|
**NOTE:** **Now you can trade off between affiliation precision and recall** with the `affiliation_conservative` option. If set to True, we will use the Google Scholar verified official organization name from the citing authors. This is a very conservative approach, since (1) the author needs to self-report it in the affiliation panel, (2) the author needs to verify with the matching email address, and (3) the organization needs to be recorded by Google Scholar. For example, Meta (the company) is not in the list. Many thanks to [Zhijian Liu](https://github.com/zhijian-liu) for the [helpful discussion](https://github.com/ChenLiu-1996/CitationMap/issues/8).
|
|
65
67
|
|
|
68
|
+
## Citation
|
|
69
|
+
BibTeX
|
|
70
|
+
```
|
|
71
|
+
@article{citationmap,
|
|
72
|
+
title={CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World},
|
|
73
|
+
author={Liu, Chen},
|
|
74
|
+
journal={Authorea Preprints},
|
|
75
|
+
year={2024},
|
|
76
|
+
publisher={Authorea}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
MLA
|
|
80
|
+
```
|
|
81
|
+
Liu, Chen. "CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World." Authorea Preprints (2024).
|
|
82
|
+
```
|
|
83
|
+
APA
|
|
84
|
+
```
|
|
85
|
+
Liu, C. (2024). CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World. Authorea Preprints.
|
|
86
|
+
```
|
|
87
|
+
Chicago
|
|
88
|
+
```
|
|
89
|
+
Liu, Chen. "CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World." Authorea Preprints (2024).
|
|
90
|
+
```
|
|
66
91
|
|
|
67
92
|
## User Guide
|
|
68
93
|
0. If you are new to Python, you probably want to start with a distribution of Python that also helps with environment management (such as [anaconda](https://www.anaconda.com/)). Once you have set up your environment (for example, when you reach the stage of `conda activate env39` in [this tutorial](https://www.youtube.com/watch?v=MUZtVEDKXsk&t=242s)), you can move on to the next step.
|
|
@@ -140,10 +165,12 @@ Besides, there will be a **CSV file** recording citation information (citing aut
|
|
|
140
165
|
- Some authors citing you do not have Google Scholar profiles.
|
|
141
166
|
- Some authors citing you do not report their affiliations.
|
|
142
167
|
2. Webscraping is performed, and CAPTCHA or robot check can often get us, especially if we crawl frequently. This is more often seen in highly cited users. Unless you are blocked by Google Scholar, at worst you will end up with missing several citing authors, which is not likely a huge deal for highly cited users anyways.
|
|
143
|
-
3.
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
168
|
+
3. Affiliation identification and geolocating issues. This is a joint effect between affiliation identification and geolocating. The number of citing affiliations will be:
|
|
169
|
+
- Underestimated if some affiliations are not found by `geopy.geocoders`.
|
|
170
|
+
- Underestimated if we experience communication errors with `geopy.geocoders`.
|
|
171
|
+
- (Aggressive approach only) Overestimated if non-affiliation phrases are incorrectly identified as locations by `geopy.geocoders`.
|
|
172
|
+
- (Conservative approach only) Underestimated if the citer did not verify with an email address under a matching affiliation domain.
|
|
173
|
+
- (Conservative approach only) Underestimated because all non-primary (with verified email address) affiliations are ignored.
|
|
147
174
|
|
|
148
175
|
**Please raise an issue or submit a pull request if you have some good idea to better process the affiliation string. Note that currently I am not considering any paid service or tools that pose extra burden on the users, such as GPT API.**
|
|
149
176
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Google Scholar Citation World Map
|
|
2
2
|
|
|
3
|
+
[](https://www.techrxiv.org/users/809001/articles/1213717-citationmap-a-python-tool-to-identify-and-visualize-your-google-scholar-citations-around-the-world)
|
|
4
|
+
[](https://openreview.net/pdf?id=BqJgCgl1IA)
|
|
3
5
|
[](https://pypi.org/project/citation-map/)
|
|
4
6
|
[](https://pypistats.org/packages/citation-map)
|
|
5
7
|
[](https://pypistats.org/packages/citation-map)
|
|
6
|
-
[](https://www.python.org/)
|
|
7
8
|
[![CC BY-NC-SA 4.0][cc-by-nc-sa-shield]][cc-by-nc-sa]
|
|
8
9
|
[![CC BY-NC-SA 4.0][cc-by-nc-sa-image]][cc-by-nc-sa]
|
|
9
10
|
|
|
@@ -11,13 +12,14 @@
|
|
|
11
12
|
[cc-by-nc-sa-image]: https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png
|
|
12
13
|
[cc-by-nc-sa-shield]: https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg
|
|
13
14
|
|
|
14
|
-
[Chen Liu](https://
|
|
15
|
+
[Chen Liu](https://chenliu-1996.github.io/), CS PhD Candidate at Yale University.
|
|
15
16
|
|
|
16
17
|
Research areas: Machine Learning, Spatial-Temporal Modeling, Medical Vision, AI4Science.
|
|
17
18
|
|
|
19
|
+
|
|
18
20
|
## News
|
|
19
21
|
**[Asking for advice]**
|
|
20
|
-
1. This is my first time dealing with webscraping/crawling. Users have reported stability issues, and I suspect the major problems are (1) being caught by CAPTCHA or robot check, and (2) being flagged for blacklist by Google Scholar. If you are experienced in these areas and have good advice, I would highly appreciate a GitHub issue or a pull request
|
|
22
|
+
1. This is my first time dealing with webscraping/crawling. Users have reported stability issues, and I suspect the major problems are (1) being caught by CAPTCHA or robot check, and (2) being flagged for blacklist by Google Scholar. If you are experienced in these areas and have good advice, I would highly appreciate a **GitHub issue or a pull request**.
|
|
21
23
|
|
|
22
24
|
[Aug 2, 2024] Version 4.0 released >>> Logic update. A new input argument `affiliation_conservative`. If set to True, we will use **a very conservative approach to identify affiliations** which leads to **much higher precision and lower recall**. Many thanks to [Zhijian Liu](https://github.com/zhijian-liu) for the [helpful discussion](https://github.com/ChenLiu-1996/CitationMap/issues/8).
|
|
23
25
|
|
|
@@ -47,6 +49,29 @@ Besides, there will be a **CSV file** recording citation information (citing aut
|
|
|
47
49
|
|
|
48
50
|
**NOTE:** **Now you can trade off between affiliation precision and recall** with the `affiliation_conservative` option. If set to True, we will use the Google Scholar verified official organization name from the citing authors. This is a very conservative approach, since (1) the author needs to self-report it in the affiliation panel, (2) the author needs to verify with the matching email address, and (3) the organization needs to be recorded by Google Scholar. For example, Meta (the company) is not in the list. Many thanks to [Zhijian Liu](https://github.com/zhijian-liu) for the [helpful discussion](https://github.com/ChenLiu-1996/CitationMap/issues/8).
|
|
49
51
|
|
|
52
|
+
## Citation
|
|
53
|
+
BibTeX
|
|
54
|
+
```
|
|
55
|
+
@article{citationmap,
|
|
56
|
+
title={CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World},
|
|
57
|
+
author={Liu, Chen},
|
|
58
|
+
journal={Authorea Preprints},
|
|
59
|
+
year={2024},
|
|
60
|
+
publisher={Authorea}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
MLA
|
|
64
|
+
```
|
|
65
|
+
Liu, Chen. "CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World." Authorea Preprints (2024).
|
|
66
|
+
```
|
|
67
|
+
APA
|
|
68
|
+
```
|
|
69
|
+
Liu, C. (2024). CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World. Authorea Preprints.
|
|
70
|
+
```
|
|
71
|
+
Chicago
|
|
72
|
+
```
|
|
73
|
+
Liu, Chen. "CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World." Authorea Preprints (2024).
|
|
74
|
+
```
|
|
50
75
|
|
|
51
76
|
## User Guide
|
|
52
77
|
0. If you are new to Python, you probably want to start with a distribution of Python that also helps with environment management (such as [anaconda](https://www.anaconda.com/)). Once you have set up your environment (for example, when you reach the stage of `conda activate env39` in [this tutorial](https://www.youtube.com/watch?v=MUZtVEDKXsk&t=242s)), you can move on to the next step.
|
|
@@ -124,10 +149,12 @@ Besides, there will be a **CSV file** recording citation information (citing aut
|
|
|
124
149
|
- Some authors citing you do not have Google Scholar profiles.
|
|
125
150
|
- Some authors citing you do not report their affiliations.
|
|
126
151
|
2. Webscraping is performed, and CAPTCHA or robot check can often get us, especially if we crawl frequently. This is more often seen in highly cited users. Unless you are blocked by Google Scholar, at worst you will end up with missing several citing authors, which is not likely a huge deal for highly cited users anyways.
|
|
127
|
-
3.
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
152
|
+
3. Affiliation identification and geolocating issues. This is a joint effect between affiliation identification and geolocating. The number of citing affiliations will be:
|
|
153
|
+
- Underestimated if some affiliations are not found by `geopy.geocoders`.
|
|
154
|
+
- Underestimated if we experience communication errors with `geopy.geocoders`.
|
|
155
|
+
- (Aggressive approach only) Overestimated if non-affiliation phrases are incorrectly identified as locations by `geopy.geocoders`.
|
|
156
|
+
- (Conservative approach only) Underestimated if the citer did not verify with an email address under a matching affiliation domain.
|
|
157
|
+
- (Conservative approach only) Underestimated because all non-primary (with verified email address) affiliations are ignored.
|
|
131
158
|
|
|
132
159
|
**Please raise an issue or submit a pull request if you have some good idea to better process the affiliation string. Note that currently I am not considering any paid service or tools that pose extra burden on the users, such as GPT API.**
|
|
133
160
|
|
|
@@ -21,7 +21,8 @@ from .scholarly_support import get_citing_author_ids_and_citing_papers, get_orga
|
|
|
21
21
|
|
|
22
22
|
def find_all_citing_authors(scholar_id: str, num_processes: int = 16) -> List[Tuple[str]]:
|
|
23
23
|
'''
|
|
24
|
-
Step 1. Find all
|
|
24
|
+
Step 1. Find all publications of the given Google Scholar ID.
|
|
25
|
+
Step 2. Find all citing authors.
|
|
25
26
|
'''
|
|
26
27
|
# Find Google Scholar Profile using Scholar ID.
|
|
27
28
|
author = scholarly.search_author_id(scholar_id)
|
|
@@ -70,7 +71,7 @@ def find_all_citing_affiliations(all_citing_author_paper_tuple_list: List[Tuple[
|
|
|
70
71
|
num_processes: int = 16,
|
|
71
72
|
affiliation_conservative: bool = False):
|
|
72
73
|
'''
|
|
73
|
-
Step
|
|
74
|
+
Step 3. Find all citing affiliations.
|
|
74
75
|
'''
|
|
75
76
|
if affiliation_conservative:
|
|
76
77
|
__affiliations_from_authors = __affiliations_from_authors_conservative
|
|
@@ -96,7 +97,7 @@ def find_all_citing_affiliations(all_citing_author_paper_tuple_list: List[Tuple[
|
|
|
96
97
|
|
|
97
98
|
def clean_affiliation_names(author_paper_affiliation_tuple_list: List[Tuple[str]]) -> List[Tuple[str]]:
|
|
98
99
|
'''
|
|
99
|
-
Step
|
|
100
|
+
Optional Step. Clean up the names of affiliations from the authors' affiliation tab on their Google Scholar profiles.
|
|
100
101
|
NOTE: This logic is very naive. Please send an issue or pull request if you have any idea how to improve it.
|
|
101
102
|
Currently we will not consider any paid service or tools that pose extra burden on the users, such as GPT API.
|
|
102
103
|
'''
|
|
@@ -386,7 +387,8 @@ def generate_citation_map(scholar_id: str,
|
|
|
386
387
|
if cache_path is None or not os.path.exists(cache_path):
|
|
387
388
|
print('No cache found for this author. Running from scratch.\n')
|
|
388
389
|
|
|
389
|
-
# NOTE: Step 1. Find all
|
|
390
|
+
# NOTE: Step 1. Find all publications of the given Google Scholar ID.
|
|
391
|
+
# Step 2. Find all citing authors.
|
|
390
392
|
all_citing_author_paper_tuple_list = find_all_citing_authors(scholar_id=scholar_id,
|
|
391
393
|
num_processes=num_processes)
|
|
392
394
|
print('A total of %d citing authors recorded.\n' % len(all_citing_author_paper_tuple_list))
|
|
@@ -397,7 +399,8 @@ def generate_citation_map(scholar_id: str,
|
|
|
397
399
|
else:
|
|
398
400
|
print('Cache found. Loading author paper affiliation information from cache.\n')
|
|
399
401
|
|
|
400
|
-
# NOTE: Step 1.
|
|
402
|
+
# NOTE: Step 1. Find all publications of the given Google Scholar ID.
|
|
403
|
+
# Step 2. Find all citing authors.
|
|
401
404
|
all_citing_author_paper_tuple_list = load_cache(cache_path)
|
|
402
405
|
print('Loaded from cache: %s.\n' % cache_path)
|
|
403
406
|
print('A total of %d citing authors loaded.\n' % len(all_citing_author_paper_tuple_list))
|
|
@@ -7,6 +7,35 @@ from bs4 import BeautifulSoup
|
|
|
7
7
|
from typing import List
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
def get_html_per_citation_page(soup) -> List[str]:
|
|
11
|
+
'''
|
|
12
|
+
Utility to query each page containing results for
|
|
13
|
+
cited work.
|
|
14
|
+
Parameters
|
|
15
|
+
--------
|
|
16
|
+
soup: Beautiful Soup object pointing to current page.
|
|
17
|
+
'''
|
|
18
|
+
citing_authors_and_citing_papers = []
|
|
19
|
+
|
|
20
|
+
for result in soup.find_all('div', class_='gs_ri'):
|
|
21
|
+
title_tag = result.find('h3', class_='gs_rt')
|
|
22
|
+
if title_tag:
|
|
23
|
+
paper_parsed = False
|
|
24
|
+
author_links = result.find_all('a', href=True)
|
|
25
|
+
title_text = title_tag.get_text()
|
|
26
|
+
title = title_text.replace('[HTML]', '').replace('[PDF]', '')
|
|
27
|
+
for link in author_links:
|
|
28
|
+
if 'user=' in link['href']:
|
|
29
|
+
author_id = link['href'].split('user=')[1].split('&')[0]
|
|
30
|
+
citing_authors_and_citing_papers.append((author_id, title))
|
|
31
|
+
paper_parsed = True
|
|
32
|
+
if not paper_parsed:
|
|
33
|
+
print("[WARNING!] Could not find author links for ", title_text)
|
|
34
|
+
else:
|
|
35
|
+
continue
|
|
36
|
+
return citing_authors_and_citing_papers
|
|
37
|
+
|
|
38
|
+
|
|
10
39
|
def get_citing_author_ids_and_citing_papers(paper_url: str) -> List[str]:
|
|
11
40
|
'''
|
|
12
41
|
Find the (Google Scholar IDs of authors, titles of papers) who cite a given paper on Google Scholar.
|
|
@@ -15,7 +44,6 @@ def get_citing_author_ids_and_citing_papers(paper_url: str) -> List[str]:
|
|
|
15
44
|
--------
|
|
16
45
|
paper_url: URL of the paper BEING cited.
|
|
17
46
|
'''
|
|
18
|
-
|
|
19
47
|
citing_authors_and_citing_papers = []
|
|
20
48
|
|
|
21
49
|
headers = requests.utils.default_headers()
|
|
@@ -44,36 +72,25 @@ def get_citing_author_ids_and_citing_papers(paper_url: str) -> List[str]:
|
|
|
44
72
|
|
|
45
73
|
# Loop through the citation results and find citing authors and papers.
|
|
46
74
|
current_page_number = 1
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if page_number_str and page_number_str.isnumeric() and int(page_number_str) == current_page_number + 1:
|
|
65
|
-
# Found the correct button for next page.
|
|
66
|
-
current_page_number += 1
|
|
67
|
-
next_url = 'https://scholar.google.com' + navigation['href']
|
|
68
|
-
time.sleep(random.uniform(1, 5)) # Random delay to reduce risk of being blocked.
|
|
69
|
-
response = requests.get(next_url, headers=headers)
|
|
70
|
-
if response.status_code != 200:
|
|
71
|
-
break
|
|
72
|
-
soup = BeautifulSoup(response.text, 'html.parser')
|
|
73
|
-
else:
|
|
74
|
-
continue
|
|
75
|
+
citing_authors_and_citing_papers += get_html_per_citation_page(soup)
|
|
76
|
+
|
|
77
|
+
# Find the page navigation.
|
|
78
|
+
navigation_buttons = soup.find_all('a', class_='gs_nma')
|
|
79
|
+
for navigation in navigation_buttons:
|
|
80
|
+
page_number_str = navigation.text
|
|
81
|
+
if page_number_str and page_number_str.isnumeric() and int(page_number_str) == current_page_number + 1:
|
|
82
|
+
# Found the correct button for next page.
|
|
83
|
+
current_page_number += 1
|
|
84
|
+
next_url = 'https://scholar.google.com' + navigation['href']
|
|
85
|
+
time.sleep(random.uniform(1, 5)) # Random delay to reduce risk of being blocked.
|
|
86
|
+
|
|
87
|
+
response = requests.get(next_url, headers=headers)
|
|
88
|
+
if response.status_code != 200:
|
|
89
|
+
break
|
|
90
|
+
soup = BeautifulSoup(response.text, 'html.parser')
|
|
91
|
+
citing_authors_and_citing_papers += get_html_per_citation_page(soup)
|
|
75
92
|
else:
|
|
76
|
-
|
|
93
|
+
continue
|
|
77
94
|
|
|
78
95
|
return citing_authors_and_citing_papers
|
|
79
96
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: citation-map
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.3
|
|
4
4
|
Summary: A simple tool to generate your Google Scholar citation world map.
|
|
5
5
|
Home-page: https://github.com/ChenLiu-1996/CitationMap
|
|
6
6
|
Author: Chen Liu
|
|
@@ -16,10 +16,11 @@ License-File: LICENSE.md
|
|
|
16
16
|
|
|
17
17
|
# Google Scholar Citation World Map
|
|
18
18
|
|
|
19
|
+
[](https://www.techrxiv.org/users/809001/articles/1213717-citationmap-a-python-tool-to-identify-and-visualize-your-google-scholar-citations-around-the-world)
|
|
20
|
+
[](https://openreview.net/pdf?id=BqJgCgl1IA)
|
|
19
21
|
[](https://pypi.org/project/citation-map/)
|
|
20
22
|
[](https://pypistats.org/packages/citation-map)
|
|
21
23
|
[](https://pypistats.org/packages/citation-map)
|
|
22
|
-
[](https://www.python.org/)
|
|
23
24
|
[![CC BY-NC-SA 4.0][cc-by-nc-sa-shield]][cc-by-nc-sa]
|
|
24
25
|
[![CC BY-NC-SA 4.0][cc-by-nc-sa-image]][cc-by-nc-sa]
|
|
25
26
|
|
|
@@ -27,13 +28,14 @@ License-File: LICENSE.md
|
|
|
27
28
|
[cc-by-nc-sa-image]: https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png
|
|
28
29
|
[cc-by-nc-sa-shield]: https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg
|
|
29
30
|
|
|
30
|
-
[Chen Liu](https://
|
|
31
|
+
[Chen Liu](https://chenliu-1996.github.io/), CS PhD Candidate at Yale University.
|
|
31
32
|
|
|
32
33
|
Research areas: Machine Learning, Spatial-Temporal Modeling, Medical Vision, AI4Science.
|
|
33
34
|
|
|
35
|
+
|
|
34
36
|
## News
|
|
35
37
|
**[Asking for advice]**
|
|
36
|
-
1. This is my first time dealing with webscraping/crawling. Users have reported stability issues, and I suspect the major problems are (1) being caught by CAPTCHA or robot check, and (2) being flagged for blacklist by Google Scholar. If you are experienced in these areas and have good advice, I would highly appreciate a GitHub issue or a pull request
|
|
38
|
+
1. This is my first time dealing with webscraping/crawling. Users have reported stability issues, and I suspect the major problems are (1) being caught by CAPTCHA or robot check, and (2) being flagged for blacklist by Google Scholar. If you are experienced in these areas and have good advice, I would highly appreciate a **GitHub issue or a pull request**.
|
|
37
39
|
|
|
38
40
|
[Aug 2, 2024] Version 4.0 released >>> Logic update. A new input argument `affiliation_conservative`. If set to True, we will use **a very conservative approach to identify affiliations** which leads to **much higher precision and lower recall**. Many thanks to [Zhijian Liu](https://github.com/zhijian-liu) for the [helpful discussion](https://github.com/ChenLiu-1996/CitationMap/issues/8).
|
|
39
41
|
|
|
@@ -63,6 +65,29 @@ Besides, there will be a **CSV file** recording citation information (citing aut
|
|
|
63
65
|
|
|
64
66
|
**NOTE:** **Now you can trade off between affiliation precision and recall** with the `affiliation_conservative` option. If set to True, we will use the Google Scholar verified official organization name from the citing authors. This is a very conservative approach, since (1) the author needs to self-report it in the affiliation panel, (2) the author needs to verify with the matching email address, and (3) the organization needs to be recorded by Google Scholar. For example, Meta (the company) is not in the list. Many thanks to [Zhijian Liu](https://github.com/zhijian-liu) for the [helpful discussion](https://github.com/ChenLiu-1996/CitationMap/issues/8).
|
|
65
67
|
|
|
68
|
+
## Citation
|
|
69
|
+
BibTeX
|
|
70
|
+
```
|
|
71
|
+
@article{citationmap,
|
|
72
|
+
title={CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World},
|
|
73
|
+
author={Liu, Chen},
|
|
74
|
+
journal={Authorea Preprints},
|
|
75
|
+
year={2024},
|
|
76
|
+
publisher={Authorea}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
MLA
|
|
80
|
+
```
|
|
81
|
+
Liu, Chen. "CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World." Authorea Preprints (2024).
|
|
82
|
+
```
|
|
83
|
+
APA
|
|
84
|
+
```
|
|
85
|
+
Liu, C. (2024). CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World. Authorea Preprints.
|
|
86
|
+
```
|
|
87
|
+
Chicago
|
|
88
|
+
```
|
|
89
|
+
Liu, Chen. "CitationMap: A Python Tool to Identify and Visualize Your Google Scholar Citations Around the World." Authorea Preprints (2024).
|
|
90
|
+
```
|
|
66
91
|
|
|
67
92
|
## User Guide
|
|
68
93
|
0. If you are new to Python, you probably want to start with a distribution of Python that also helps with environment management (such as [anaconda](https://www.anaconda.com/)). Once you have set up your environment (for example, when you reach the stage of `conda activate env39` in [this tutorial](https://www.youtube.com/watch?v=MUZtVEDKXsk&t=242s)), you can move on to the next step.
|
|
@@ -140,10 +165,12 @@ Besides, there will be a **CSV file** recording citation information (citing aut
|
|
|
140
165
|
- Some authors citing you do not have Google Scholar profiles.
|
|
141
166
|
- Some authors citing you do not report their affiliations.
|
|
142
167
|
2. Webscraping is performed, and CAPTCHA or robot check can often get us, especially if we crawl frequently. This is more often seen in highly cited users. Unless you are blocked by Google Scholar, at worst you will end up with missing several citing authors, which is not likely a huge deal for highly cited users anyways.
|
|
143
|
-
3.
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
168
|
+
3. Affiliation identification and geolocating issues. This is a joint effect between affiliation identification and geolocating. The number of citing affiliations will be:
|
|
169
|
+
- Underestimated if some affiliations are not found by `geopy.geocoders`.
|
|
170
|
+
- Underestimated if we experience communication errors with `geopy.geocoders`.
|
|
171
|
+
- (Aggressive approach only) Overestimated if non-affiliation phrases are incorrectly identified as locations by `geopy.geocoders`.
|
|
172
|
+
- (Conservative approach only) Underestimated if the citer did not verify with an email address under a matching affiliation domain.
|
|
173
|
+
- (Conservative approach only) Underestimated because all non-primary (with verified email address) affiliations are ignored.
|
|
147
174
|
|
|
148
175
|
**Please raise an issue or submit a pull request if you have some good idea to better process the affiliation string. Note that currently I am not considering any paid service or tools that pose extra burden on the users, such as GPT API.**
|
|
149
176
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|