analyze.py

#!/usr/bin/env python3
import arxiv
import argparse
import json
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from collections import Counter

def main():
    parser = argparse.ArgumentParser(description="Paper analysis tool")
    parser.add_argument("paper_id", help="Paper ID (e.g., 2301.00001)")
    parser.add_argument("--level", default="basic", choices=["basic", "deep"], help="Analysis level")
    args = parser.parse_args()

    # 下载 NLTK 数据
    nltk.download('punkt', quiet=True)
    nltk.download('stopwords', quiet=True)

    # 获取论文
    search = arxiv.Search(id_list=[args.paper_id])
    result = next(search.results())

    # 基础分析
    analysis = {
        "id": result.get_short_id(),
        "title": result.title,
        "authors": [str(author) for author in result.authors],
        "summary": result.summary,
        "published": result.published.isoformat(),
        "updated": result.updated.isoformat(),
        "pdf_url": result.pdf_url,
        "categories": result.categories,
        "doi": result.doi,
        "journal_ref": result.journal_ref
    }

    # 深度分析
    if args.level == "deep":
        stop_words = set(stopwords.words('english'))
        text = f"{result.title} {result.summary}"
        words = word_tokenize(text.lower())
        words = [word for word in words if word.isalpha() and word not in stop_words]
        word_counts = Counter(words)
        top_keywords = word_counts.most_common(10)

        analysis["keywords"] = [{"word": word, "count": count} for word, count in top_keywords]

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

if __name__ == "__main__":
    main()