arXiv-Forschung
Durchsuchen und abrufen von akademischen Papieren von arXiv über deren kostenlose REST-API. Kein API-Schlüssel, keine Abhängigkeiten – nur curl.
Kurzreferenz
| Aktion | Befehl |
|---|---|
| Papiere suchen | curl "https://export.arxiv.org/api/query?search_query=all:QUERY&max_results=5" |
| Bestimmtes Papier abrufen | curl "https://export.arxiv.org/api/query?id_list=2402.03300" |
| Zusammenfassung lesen (Web) | web_extract(urls=["https://arxiv.org/abs/2402.03300"]) |
| Vollständiges Papier lesen (PDF) | web_extract(urls=["https://arxiv.org/pdf/2402.03300"]) |
Papiere durchsuchen
Die API gibt Atom-XML zurück. Mit grep/sed parsen oder durch python leiten, um saubere Ausgabe zu erhalten.
Einfache Suche
curl -s "https://export.arxiv.org/api/query?search_query=all:GRPO+reinforcement+learning&max_results=5"
Bereinigte Ausgabe (XML in lesbares Format parsen)
curl -s "https://export.arxiv.org/api/query?search_query=all:GRPO+reinforcement+learning&max_results=5&sortBy=submittedDate&sortOrder=descending" | python -c "
import sys, xml.etree.ElementTree as ET
ns = {'a': 'http://www.w3.org/2005/Atom'}
root = ET.parse(sys.stdin).getroot()
for i, entry in enumerate(root.findall('a:entry', ns)):
title = entry.find('a:title', ns).text.strip().replace('\n', ' ')
arxiv_id = entry.find('a:id', ns).text.strip().split('/abs/')[-1]
published = entry.find('a:published', ns).text[:10]
authors = ', '.join(a.find('a:name', ns).text for a in entry.findall('a:author', ns))
summary = entry.find('a:summary', ns).text.strip()[:200]
cats = ', '.join(c.get('term') for c in entry.findall('a:category', ns))
print(f'{i+1}. [{arxiv_id}] {title}')
print(f' Autoren: {authors}')
print(f' Veröffentlicht: {published} | Kategorien: {cats}')
print(f' Zusammenfassung: {summary}...')
print(f' PDF: https://arxiv.org/pdf/{arxiv_id}')
print()
"
Suchanfragesyntax
| Präfix | Sucht in | Beispiel |
|---|---|---|
all: | Alle Felder | all:transformer+attention |
ti: | Titel | ti:large+language+models |
au: | Autor | au:vaswani |
abs: | Zusammenfassung | abs:reinforcement+learning |
cat: | Kategorie | cat:cs.AI |
co: | Kommentar | co:accepted+NeurIPS |
Boolesche Operatoren
# UND (Standard bei Verwendung von +)
search_query=all:transformer+attention
# ODER
search_query=all:GPT+OR+all:BERT
# UND NICHT
search_query=all:language+model+ANDNOT+all:vision
# Exakter Ausdruck
search_query=ti:"chain+of+thought"
# Kombiniert
search_query=au:hinton+AND+cat:cs.LG
Sortieren und Paginierung
| Parameter | Optionen |
|---|---|
sortBy | relevance, lastUpdatedDate, submittedDate |
sortOrder | ascending, descending |
start | Ergebnis-Offset (0-basiert) |
max_results | Anzahl der Ergebnisse (Standard 10, max. 30000) |
# Neueste 10 Papiere in cs.AI
curl -s "https://export.arxiv.org/api/query?search_query=cat:cs.AI&sortBy=submittedDate&sortOrder=descending&max_results=10"
Bestimmte Papiere abrufen
# Nach arXiv-ID
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300"
# Mehrere Papiere
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300,2401.12345,2403.00001"
BibTeX-Generierung
Nach dem Abrufen der Metadaten eines Papiers einen BibTeX-Eintrag generieren:
curl -s "https://export.arxiv.org/api/query?id_list=1706.03762" | python -c "
import sys, xml.etree.ElementTree as ET
ns = {'a': 'http://www.w3.org/2005/Atom', 'arxiv': 'http://arxiv.org/schemas/atom'}
root = ET.parse(sys.stdin).getroot()
entry = root.find('a:entry', ns)
if entry is None: sys.exit('Papier nicht gefunden')
title = entry.find('a:title', ns).text.strip().replace('\n', ' ')
authors = ' and '.join(a.find('a:name', ns).text for a in entry.findall('a:author', ns))
year = entry.find('a:published', ns).text[:4]
raw_id = entry.find('a:id', ns).text.strip().split('/abs/')[-1]
cat = entry.find('arxiv:primary_category', ns)
primary = cat.get('term') if cat is not None else 'cs.LG'
last_name = entry.find('a:author', ns).find('a:name', ns).text.split()[-1]
print(f'@article{{{last_name}{year}_{raw_id.replace(".", "")},')
print(f' title = {{{title}}},')
print(f' author = {{{authors}}},')
print(f' year = {{{year}}},')
print(f' eprint = {{{raw_id}}},')
print(f' archivePrefix = {{arXiv}},')
print(f' primaryClass = {{{primary}}},')
print(f' url = {{https://arxiv.org/abs/{raw_id}}}')
print('}')
"
Papierinhalte lesen
Nach dem Finden eines Papiers lesen:
# Zusammenfassungsseite (schnell, Metadaten + Zusammenfassung)
web_extract(urls=["https://arxiv.org/abs/2402.03300"])
# Vollständiges Papier (PDF → Markdown via Firecrawl)
web_extract(urls=["https://arxiv.org/pdf/2402.03300"])
Für die lokale PDF-Verarbeitung siehe die Fähigkeit ocr-and-documents.
Häufige Kategorien
| Kategorie | Fachgebiet |
|---|---|
cs.AI | Künstliche Intelligenz |
cs.CL | Computerlinguistik (NLP) |
cs.CV | Computer Vision |
cs.LG | Maschinelles Lernen |
cs.CR | Kryptographie und Sicherheit |
stat.ML | Maschinelles Lernen (Statistik) |
math.OC | Optimierung und Steuerung |
physics.comp-ph | Computerphysik |
Vollständige Liste: https://arxiv.org/category_taxonomy
Hilfsskript
Das Skript scripts/search_arxiv.py handhabt die XML-Analyse und liefert saubere Ausgabe:
python scripts/search_arxiv.py "GRPO reinforcement learning"
python scripts/search_arxiv.py "transformer attention" --max 10 --sort date
python scripts/search_arxiv.py --author "Yann LeCun" --max 5
python scripts/search_arxiv.py --category cs.AI --sort date
python scripts/search_arxiv.py --id 2402.03300
python scripts/search_arxiv.py --id 2402.03300,2401.12345
Keine Abhängigkeiten – verwendet nur die Python-Standardbibliothek.
Semantic Scholar (Zitationen, verwandte Papiere, Autorenprofile)
arXiv liefert keine Zitationsdaten oder Empfehlungen. Verwenden Sie dafür die Semantic Scholar API – kostenlos, kein Schlüssel für die Basisnutzung erforderlich (1 Anfrage/s), liefert JSON.
Papiere mit Details + Zitationen abrufen
# Nach arXiv-ID
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300?fields=title,authors,citationCount,referenceCount,influentialCitationCount,year,abstract" | python -m json.tool
# Nach Semantic-Scholar-Papier-ID oder DOI
curl -s "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1234/example?fields=title,citationCount"
Zitationen EINES Papiers abrufen (wer hat es zitiert)
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/citations?fields=title,authors,year,citationCount&limit=10" | python -m json.tool
Referenzen AUS einem Papier abrufen (was es zitiert)
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/references?fields=title,authors,year,citationCount&limit=10" | python -m json.tool
Papiere suchen (Alternative zur arXiv-Suche, liefert JSON)
curl -s "https://api.semanticscholar.org/graph/v1/paper/search?query=GRPO+reinforcement+learning&limit=5&fields=title,authors,year,citationCount,externalIds" | python -m json.tool
Papiere empfohlen bekommen
curl -s -X POST "https://api.semanticscholar.org/recommendations/v1/papers/" \
-H "Content-Type: application/json" \
-d '{"positivePaperIds": ["arXiv:2402.03300"], "negativePaperIds": []}' | python -m json.tool
Autorenprofil
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=Yann+LeCun&fields=name,hIndex,citationCount,paperCount" | python -m json.tool
Nützliche Semantic-Scholar-Felder
title, authors, year, abstract, citationCount, referenceCount, influentialCitationCount, isOpenAccess, openAccessPdf, fieldsOfStudy, publicationVenue, externalIds (enthält arXiv-ID, DOI, usw.)
Vollständiger Forschungsarbeitsablauf
- Entdecken:
python scripts/search_arxiv.py "Ihr Thema" --sort date --max 10 - Einfluss bewerten:
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID?fields=citationCount,influentialCitationCount" - Zusammenfassung lesen:
web_extract(urls=["https://arxiv.org/abs/ID"]) - Vollständiges Papier lesen:
web_extract(urls=["https://arxiv.org/pdf/ID"]) - Verwandte Arbeiten finden:
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID/references?fields=title,citationCount&limit=20" - Empfehlungen erhalten: POST an Semantic-Scholar-Empfehlungsendpunkt
- Autoren verfolgen:
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=NAME"
Ratenbegrenzungen
| API | Rate | Authentifizierung |
|---|---|---|
| arXiv | ~1 Anfrage / 3 Sekunden | Keine erforderlich |
| Semantic Scholar | 1 Anfrage / Sekunde | Keine (100/s mit API-Schlüssel) |
Hinweise
- arXiv gibt Atom-XML zurück – das Hilfsskript oder das Parsing-Snippet für saubere Ausgabe verwenden
- Semantic Scholar gibt JSON zurück – durch
python -m json.toolleiten, um Lesbarkeit zu verbessern - arXiv-IDs: altes Format (
hep-th/0601001) vs. neu (2402.03300) - PDF:
https://arxiv.org/pdf/{id}– Zusammenfassung:https://arxiv.org/abs/{id} - HTML (falls verfügbar):
https://arxiv.org/html/{id} - Für die lokale PDF-Verarbeitung siehe die Fähigkeit
ocr-and-documents
ID-Versionierung
arxiv.org/abs/1706.03762löst immer zur neuesten Version aufarxiv.org/abs/1706.03762v1zeigt auf eine bestimmte unveränderliche Version- Beim Erstellen von Zitationen das Versionssuffix der tatsächlich gelesenen Version beibehalten, um Zitationsdrift zu vermeiden (eine spätere Version kann den Inhalt erheblich ändern)
- Das API-
<id>-Feld gibt die versionierte URL zurück (z. B.http://arxiv.org/abs/1706.03762v7)
Zurückgezogene Papiere
Papiere können nach der Einreichung zurückgezogen werden. In diesem Fall:
- Das
<summary>-Feld enthält einen Rückzugsvermerk (nach „withdrawn" oder „retracted" suchen) - Metadatenfelder können unvollständig sein
- Vor der Behandlung eines Ergebnisses als gültiges Papier immer die Zusammenfassung prüfen