This release is a pre-release and may not be stable for production use.
ScholarSort
A powerful Python library for academic research with integrated impact factor analysis, similar to the scholarly package but with enhanced features.
Features
- 🔍 Academic Search: Search academic papers, authors, and journals
- 📊 Impact Factor Analysis: Get journal impact factors, CiteScore, SJR and other metrics
- 👨🎓 Author Analysis: Analyze researcher metrics and publication history
- 📖 Journal Analysis: Journal rankings, metric trends, and recommendation system
- 🚀 Async Support: Asynchronous operations for improved performance
- 💾 Caching: Built-in caching to reduce duplicate requests
Installation
pip install scholarsort
Quick Start
Basic Search
from scholarsort import ScholarlySearch
# Create search instance
searcher = ScholarlySearch()
# Search publications
publications = searcher.search_publications("machine learning", num_results=10)
for pub in publications:
print(f"Title: {pub['title']}")
print(f"Citations: {pub['citations']}")
print(f"Authors: {pub['authors']}")
print("-" * 50)
# Search author
author_info = searcher.search_author("Geoffrey Hinton")
if author_info:
print(f"Author: {author_info['name']}")
print(f"Affiliation: {author_info['affiliation']}")
print(f"Total Citations: {author_info['total_citations']}")
Impact Factor Analysis
from scholarsort import ImpactFactorAnalyzer
# Create impact factor analyzer
if_analyzer = ImpactFactorAnalyzer()
# Get journal impact factor
journal_metrics = if_analyzer.get_journal_impact_factor("Nature")
if journal_metrics:
print(f"Journal: {journal_metrics['journal_name']}")
print(f"Impact Factor: {journal_metrics['impact_factor']}")
print(f"CiteScore: {journal_metrics['citescore']}")
print(f"Quartile: {journal_metrics['quartile']}")
# Compare multiple journals
journals = ["Nature", "Science", "Cell"]
comparison = if_analyzer.compare_journals(journals)
print(comparison)
# Get top journals in specific field
top_journals = if_analyzer.get_journal_ranking("Computer Science", limit=20)
for i, journal in enumerate(top_journals, 1):
print(f"{i}. {journal['journal_name']} (IF: {journal['impact_factor']})")
Author Deep Analysis
from scholarsort import AuthorAnalyzer
# Create author analyzer
author_analyzer = AuthorAnalyzer()
# Get detailed author profile
profile = author_analyzer.get_author_profile("Yann LeCun")
if profile:
print(f"H-Index: {profile['h_index']}")
print(f"i10-Index: {profile['i10_index']}")
print(f"Research Interests: {', '.join(profile['interests'])}")
# Analyze publications
publications = profile['publications']
metrics = author_analyzer.calculate_author_metrics(publications)
print(f"Total Publications: {metrics['total_publications']}")
print(f"Average Citations: {metrics['avg_citations_per_paper']}")
# Compare multiple authors
authors = ["Geoffrey Hinton", "Yann LeCun", "Yoshua Bengio"]
comparison = author_analyzer.compare_authors(authors)
print(comparison)
Journal Analysis and Recommendation
from scholarsort import JournalAnalyzer
# Create journal analyzer
journal_analyzer = JournalAnalyzer()
# Get journal detailed information
journal_info = journal_analyzer.get_journal_info("Nature Machine Intelligence")
if journal_info:
print(f"Journal: {journal_info['title']}")
print(f"Publisher: {journal_info['publisher']}")
print(f"Open Access: {journal_info.get('open_access', False)}")
# Search journals by subject
ai_journals = journal_analyzer.search_journals_by_subject("Artificial Intelligence")
for journal in ai_journals[:5]:
print(f"- {journal['title']} ({journal['publisher']})")
# Journal recommendations
keywords = ["machine learning", "artificial intelligence"]
recommendations = journal_analyzer.recommend_journals(
keywords=keywords,
min_if=2.0,
max_if=8.0,
open_access=True
)
print("Recommended Journals:")
for rec in recommendations[:5]:
print(f"- {rec['journal_name']} (IF: {rec['impact_factor']}, Relevance: {rec['relevance_score']:.2f})")
Advanced Features
import asyncio
from scholarsort import ScholarlySearch, ImpactFactorAnalyzer
async def advanced_analysis():
# Async search
searcher = ScholarlySearch()
results = await searcher.async_search_publications("deep learning")
# Impact factor trend analysis
if_analyzer = ImpactFactorAnalyzer()
years = [2020, 2021, 2022, 2023, 2024]
trend_data = if_analyzer.analyze_journal_trend("Nature", years)
if trend_data is not None:
print("Nature Journal Impact Factor Trends:")
print(trend_data)
# Run async analysis
# asyncio.run(advanced_analysis())
Data Sources
- Google Scholar: Paper search, author information, citation data
- Scopus: CiteScore and journal metrics
- Journal Citation Reports (JCR): Impact factor data
- ScimagoJR: SJR rankings and journal metrics
- DOAJ: Open access journal information
- Crossref: Journal metadata
Important Notes
- Request Rate: Built-in request delay mechanism to avoid being blocked by search engines
- Data Accuracy: Metrics may vary between different data sources
- API Limitations: Some features require appropriate API access permissions
- Cache Usage: Automatic result caching to reduce duplicate requests
License
MIT License
Contributing
Issues and feature requests are welcome!
Changelog
v0.1.0a1 (2025)
- Initial pre-release version
- Basic academic search functionality
- Impact factor analysis
- Author and journal analysis
- Async support
Contact
- Homepage: https://github.com/scholarsort-team/scholarsort
- Documentation: https://scholarsort.readthedocs.io/
- Issues: https://github.com/scholarsort-team/scholarsort/issues
- Team Email: team@scholarsort.org
Metadata
Release files for scholarsort 0.1.0a1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| scholarsort-0.1.0a1.tar.gz | 17.6 kB | Without provenance | Details for scholarsort-0.1.0a1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| scholarsort-0.1.0a1-py3-none-any.whl | Python 3 | none | any | Details for scholarsort-0.1.0a1-py3-none-any.whl |
Total release size: 35.4 kB
Release files / scholarsort-0.1.0a1.tar.gz
| Download URL | scholarsort-0.1.0a1.tar.gz |
|---|---|
| Size | 17.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
28548a3a7e425289ca0a2da97b6794203d3daf40563919cfe2a69eda462eb90e
|
|
BLAKE2b-256 checksum How to use checksums |
37328b6c76617b984982c998ef4cdac0e3e501cd9ce7a7d90dd582b31890787a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.1
|
Release files / scholarsort-0.1.0a1-py3-none-any.whl
| Download URL | scholarsort-0.1.0a1-py3-none-any.whl |
|---|---|
| Size | 17.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
15200a3cd3ce3375587f93699082c3d6e56ae160220ffcae6878915df3a0250e
|
|
BLAKE2b-256 checksum How to use checksums |
7f61803e7e93c2f4a1e79568d573cb7833c44662fc004592e522ff88795f150b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.1
|
Security for scholarsort 0.1.0a1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.