← Akademik Çalışmalara Dön

Araştırma Araçları & Kaynaklar

Teorik fizik, diferansiyel geometri ve genel görelilik araştırmalarımda sembolik hesaplamaları yürütmek, modeller oluşturmak ve literatürü takip etmek için kullandığım analitik araçlar ve metodolojik altyapı.

Araştırma İş Akışım: Genel olarak arXiv ile yeni çalışmaları takip ediyor, Python betiklerimle ilgili makaleleri filtreliyor, Litmaps ile literatür bağlantılarını inceliyor, notlarımı Overleaf üzerinde düzenliyor ve kaynakçaları BibGuru ile hazırlıyorum.

arXiv - Subscription

Teorik fizik ve genel görelilik alanındaki güncel literatürü her gün düzenli olarak takip etmek için arXiv'in günlük e-posta yayın sistemini kullanıyorum. arXiv, seçtiğiniz alt kategorilerde her gün yayımlanan yeni makaleleri derli toplu bir liste olarak e-posta adresinize gönderir.

arXiv Günlük Bültenine Nasıl Abone Olunur?

Her gün yeni çıkan makalelerin e-posta kutunuza gelmesi için şu adımları takip edebilirsiniz:

  • Hesap Oluşturun / Giriş Yapın: arXiv Giriş Sayfası üzerinden hesabınıza giriş yapın.
  • Kategorilere Abone Olun: arXiv Abonelik Yönetimi sayfasına gidin. Buradan ilgilendiğiniz alanları—örneğin Mathematical Physics (math-ph) ve General Relativity and Quantum Cosmology (gr-qc) —seçerek e-posta bildirimlerini aktif hale getirin.
  • Günlük Bülten: Hafta içi her gün, seçtiğiniz kategorilerde yayımlanan tüm pre-print makalelerin başlıklarını, özetlerini, yazarlarını ve doğrudan bağlantılarını içeren otomatik bir e-posta alırsınız.
arXiv - Python ile Filtreleme

Python ile Otomatik E-Posta Filtreleme

Gelen günlük bültende çalışma alanımın dışında kalan onlarca makaleyi elerken vakit kaybetmemek için geliştirdiğim kişisel bir Python betiği kullanıyorum. Gelen ham e-posta metnini VS Code içerisindeki koda kopyalayıp yapıştırdığımda, betik makaleleri ilgi alanlarına göre kategorize ediyor ve başlık, yazar ve bağlantı bilgileriyle ekrana yazdırıyor.

import re

INTERESTS = {
    "Superintegrability & Integrable Systems": [
        "superintegrable", "superintegrability", "liouville integrability",
        "integrable system", "lax pair", "hamilton-jacobi", "separation of variables"
    ],
    "Clifford Structures & Killing Geometries": [
        "clifford algebroid", "killing-yano", "super-carter", "carter constant",
        "spinor", "killing tensor", "hidden symmetry"
    ],
    "Linearization Instability & Gravitational Perturbations": [
        "linearization instability", "penrose diagram", "perturbed kerr",
        "perturbed schwarzschild", "linearized gravity", "gravitational perturbations"
    ],
    "Conserved Charges & Modified Gravity": [
        "conserved charges", "conserved quantities", "abbott-deser-tekin", "adt charges",
        "massive gravity", "topologically massive", "critical gravity", "gauss-bonnet"
    ]
}


def analyze_expanded_arxiv_mail(raw_text):
    raw_papers = re.split(r"-{10,}", raw_text)

    categorized_papers = {category: [] for category in INTERESTS}
    categorized_papers["Diğer (İlgi Alanı Dışı)"] = []

    for block in raw_papers:
        if not block.strip() or "Title:" not in block:
            continue

        title_match = re.search(
            r"Title:\s*(.*?)(?=\n(?:Authors:|Categories:|Comments:|Report-no:)|$)",
            block,
            re.DOTALL,
        )
        authors_match = re.search(
            r"Authors:\s*(.*?)(?=\n(?:Comments:|Categories:|MSC-class:|Report-no:|\\)|$)",
            block,
            re.DOTALL,
        )

        title = (
            title_match.group(1).replace("\n", " ").strip()
            if title_match
            else "Bilinmeyen Başlık"
        )

        authors_raw = (
            authors_match.group(1).replace("\n", " ").strip()
            if authors_match
            else "Bilinmeyen Yazarlar"
        )

        link_match = re.search(
            r"https://arxiv\.org/abs/\d{4}\.\d{4,5}",
            block,
        )

        if link_match:
            paper_link = link_match.group(0)
        else:
            id_match = re.search(r"arXiv:\d{4}\.\d{4,5}", block)
            paper_link = (
                f"https://arxiv.org/abs/{id_match.group(0).split(':')[1]}"
                if id_match
                else "Link Bulunamadı"
            )

        authors_cleaned = re.sub(r"\(.*?\)", "", authors_raw)
        clean_authors = [
            author.strip()
            for author in re.split(r",| and ", authors_cleaned)
            if author.strip()
        ]

        block_lower = block.lower()
        matched_any_category = False

        for category, keywords in INTERESTS.items():
            if any(keyword in block_lower for keyword in keywords):
                categorized_papers[category].append(
                    {
                        "title": title,
                        "authors": clean_authors,
                        "link": paper_link,
                    }
                )
                matched_any_category = True
                break

        if not matched_any_category:
            categorized_papers["Diğer (İlgi Alanı Dışı)"].append(
                {
                    "title": title,
                    "authors": clean_authors,
                    "link": paper_link,
                }
            )

    return categorized_papers


def print_results(categorized_data):
    for category, papers in categorized_data.items():
        if not papers:
            continue

        print(f"\n=== {category} ({len(papers)} Makale) ===")

        for index, paper in enumerate(papers, start=1):
            authors_str = ", ".join(paper["authors"])

            print(f"{index}. Başlık: {paper['title']}")
            print(f"   Yazarlar: {authors_str}")
            print(f"   Link: {paper['link']}")
            print("-" * 40)


mail_icerigi = r"""
E-POSTA İÇERİĞİNİ BURAYA YAPIŞTIRIN
"""

sonuc = analyze_expanded_arxiv_mail(mail_icerigi)
print_results(sonuc)

Yapay Zeka Destekli Akıllı arXiv Makale Tarayıcısı

Akademik araştırmalarda en çok zaman alan şeylerden biri, yüzlerce makale arasında kaybolmadan tam olarak ihtiyacımız olan literatürü bulabilmektir. Klasik anahtar kelime aramaları bazen çok dar, bazen de çok genel sonuçlar verebiliyor. Bu süreci otomatize etmek ve bana özel bir "ilgili makale sıralama sistemi" kurmak için yapay zekadan yardım alarak Python’ın resmi arxiv kütüphanesini kullanan akıllı bir tarama betiği geliştirdik.

Kod Nasıl Çalışıyor?

  • Modüler Sorgu Yapısı: Ana konu ve alt konuları ayrıştırıp mantıksal bağlaçlarla dinamik sorgular oluşturur.
  • Çift Kayıt Önleme (Deduplication): Farklı sorgularda denk gelen mükerrer makaleleri otomatik ayıklar.
  • Bana Özel Puanlama (Relevance Scoring): Başlık ve özette geçen kritik terimlere göre makaleleri ağırlıklandırıp puanlar.
  • Akıllı Sıralama: Tüm sonuçları en yüksek ilgi puanına ve en yeni yayın tarihine göre dizerek sunar.
import arxiv


def fetch_arxiv_papers():
    main_topic_terms = ""
    first_subtopic_terms = ""
    second_subtopic_terms = ""
    third_subtopic_terms = ""

    queries = {}

    if main_topic_terms:
        queries["Ana konu"] = main_topic_terms

    if main_topic_terms and first_subtopic_terms:
        queries["Ana konu + Birinci alt konu"] = (
            f"({main_topic_terms}) AND ({first_subtopic_terms})"
        )

    if main_topic_terms and second_subtopic_terms:
        queries["Ana konu + İkinci alt konu"] = (
            f"({main_topic_terms}) AND ({second_subtopic_terms})"
        )

    if main_topic_terms and third_subtopic_terms:
        queries["Ana konu + Üçüncü alt konu"] = (
            f"({main_topic_terms}) AND ({third_subtopic_terms})"
        )

    if not queries:
        print("En az bir arama terimi veya sorgusu tanımlamalısınız.")
        return

    client = arxiv.Client(
        page_size=100,
        delay_seconds=3,
        num_retries=3,
    )

    unique_papers = {}

    for search_name, query in queries.items():
        print("\n" + "=" * 100)
        print(f"ARAMA BAŞLIĞI: {search_name}")
        print("=" * 100)

        search = arxiv.Search(
            query=query,
            max_results=100,
            sort_by=arxiv.SortCriterion.Relevance,
            sort_order=arxiv.SortOrder.Descending,
        )

        try:
            results = list(client.results(search))
        except Exception as error:
            print(f"Sorgu çalıştırılırken hata oluştu: {error}")
            continue

        print(f"Bu sorguda bulunan sonuç sayısı: {len(results)}")

        for paper in results:
            paper_id = paper.entry_id.rstrip("/").split("/")[-1]

            if paper_id not in unique_papers:
                unique_papers[paper_id] = {
                    "paper": paper,
                    "matched_searches": [],
                }

            unique_papers[paper_id]["matched_searches"].append(search_name)

    print("\n" + "#" * 100)
    print(f"TOPLAM BENZERSİZ MAKALE SAYISI: {len(unique_papers)}")
    print("#" * 100)

    if not unique_papers:
        print("Girilen sorgularla bağlantılı makale bulunamadı.")
        return

    keyword_scores = {}
    title_keyword_scores = {}
    ranked_papers = []

    for paper_id, data in unique_papers.items():
        paper = data["paper"]

        title = " ".join(paper.title.split()).lower()
        summary = " ".join(paper.summary.split()).lower()
        combined_text = f"{title} {summary}"

        score = 0

        for keyword, weight in keyword_scores.items():
            if keyword.lower() in combined_text:
                score += weight

        for keyword, weight in title_keyword_scores.items():
            if keyword.lower() in title:
                score += weight

        ranked_papers.append(
            {
                "score": score,
                "paper": paper,
                "matched_searches": data["matched_searches"],
            }
        )

    ranked_papers.sort(
        key=lambda item: (
            item["score"],
            item["paper"].published,
        ),
        reverse=True,
    )

    for index, item in enumerate(ranked_papers, start=1):
        paper = item["paper"]
        score = item["score"]

        authors = ", ".join(author.name for author in paper.authors)
        abstract = " ".join(paper.summary.split())
        published = paper.published.strftime("%d %B %Y")
        updated = paper.updated.strftime("%d %B %Y")

        print("\n" + "-" * 100)
        print(f"[{index}] İLGİ PUANI : {score}")
        print(f"BAŞLIK          : {paper.title}")
        print(f"YAZARLAR        : {authors}")
        print(f"YAYIN TARİHİ    : {published}")
        print(f"GÜNCELLEME      : {updated}")
        print(f"ANA KATEGORİ    : {paper.primary_category}")

        categories = ", ".join(paper.categories)
        print(f"TÜM KATEGORİLER : {categories}")
        print(f"ARXIV SAYFASI   : {paper.entry_id}")
        print(f"PDF             : {paper.pdf_url}")
        print(
            "EŞLEŞEN ARAMALAR: "
            + ", ".join(item["matched_searches"])
        )
        print(f"ÖZET            : {abstract}")


if __name__ == "__main__":
    fetch_arxiv_papers()

Kurulum ve Kullanım

Betiği kullanmadan önce resmi Python istemcisini aşağıdaki komutla kurabilirsiniz:

pip install arxiv

Daha sonra ana konu, alt konu, sorgu ve puanlama sözlüklerini kendi araştırma alanınıza göre doldurarak betiği çalıştırabilirsiniz.

Overleaf

Akademik notlarımı, matematiksel türetmeleri ve proje dokümanlarımı düzenlemek için Overleaf kullanıyorum.

LaTeX'in temel yapısını ve çalışma mantığını öğrendikten sonra uzun kodları tamamen elle yazmak yerine, kendi hazırladığım notları ve denklemleri yapay zekâya vererek bunların LaTeX koduna dönüştürülmesini istiyorum. Oluşan kodu daha sonra Overleaf üzerinde kontrol edip gerektiğinde düzenliyorum.

Bu yöntem özellikle yoğun matematiksel içeriklerde zaman kazandırırken asıl olarak fiziksel ve matematiksel içeriğe odaklanmamı sağlıyor.

Litmaps

Literatür taraması sırasında önemli bir makaleden yola çıkarak onunla bağlantılı diğer çalışmaları görmek için Litmaps kullanıyorum.

Atıf ilişkilerini görsel olarak takip edebilmek, bir konunun önceki çalışmalarını ve daha sonraki gelişimini keşfetmeyi kolaylaştırıyor. Özellikle yeni bir araştırma alanına girerken makale zincirlerini görmek açısından oldukça kullanışlı buluyorum.

BibGuru

Kaynakça ve referans oluşturma sürecinde BibGuru kullanıyorum.

Makale, kitap ve diğer akademik kaynakların bibliyografik bilgilerini hızlıca düzenlemek ve uygun referans formatına dönüştürmek için yararlanıyorum. Özellikle LaTeX ile hazırladığım dokümanlarda kaynak yönetimini hızlandırıyor.