trends.py

#!/usr/bin/env python3
import arxiv
import argparse
import json
from collections import defaultdict

def main():
    parser = argparse.ArgumentParser(description="Research trends analysis")
    parser.add_argument("topic", help="Research topic")
    parser.add_argument("--years", help="Year range (e.g., 2019-2024)")
    args = parser.parse_args()

    # 构建搜索查询
    search_query = args.topic
    if args.years:
        start_year, end_year = args.years.split('-')
        search_query = f"{search_query} AND submittedDate:[{start_year}0101 TO {end_year}1231]"

    # 搜索论文
    search = arxiv.Search(
        query=search_query,
        max_results=200,
        sort_by=arxiv.SortCriterion.SubmittedDate
    )

    # 分析年度趋势
    year_counts = defaultdict(int)
    category_counts = defaultdict(int)

    for result in search.results():
        year = result.published.year
        year_counts[year] += 1

        for category in result.categories:
            category_counts[category] += 1

    # 输出结果
    output = {
        "topic": args.topic,
        "years": args.years,
        "total_papers": sum(year_counts.values()),
        "yearly_trend": dict(sorted(year_counts.items())),
        "top_categories": sorted(category_counts.items(), key=lambda x: x[1], reverse=True)[:10]
    }

    print(json.dumps(output, indent=2))

if __name__ == "__main__":
    main()