Forum

–ForumLucrareLicenta.ro–

Am început lucrarea…
 
Notifications
Clear all

–ForumLucrareLicenta.ro–

Am început lucrarea de licență la jurnalism și nu știu ce model recent să aleg

6 Posts
2 Users
0 Reactions
6 Views
Posts: 228
Topic starter
(@anastasia)
Estimable Member
Joined: 2 săptămâni ago

Explicaţie pas cu pas a scriptului „Claim‑Review Pipeline”

Mai jos găseşti o descriere detaliată a fiecărui bloc de cod, a scopului său și a bibliotecilor utilizate. Am păstrat ordinea cronologică a execuţiei, astfel încât să poţi înţelege cum se trece de la un articol brut la un fişier JSON‑LD cu obiecte ClaimReview.


1️⃣ Importuri & configurare iniţială

Linie Bibliotecă Scop
import json json (standard) Serializare / deserializare JSON.
import pandas as pd pandas Manipulare tabelară a datelor (DataFrame).
from tqdm import tqdm tqdm Bară de progres pentru bucla for.
import requests requests Apeluri HTTP (Wikidata, Google Fact‑Check).
from datetime import datetime datetime Generare timestamp pentru numele fişierului de ieşire.
import os (eventual) os Gestionare căi de fişier, dacă este folosit.

Notă: Dacă nu ai instalat pandas, tqdm sau requests, le poţi adăuga cu pip install pandas tqdm requests.


2️⃣ Configurarea variabilelor globale

ARTICLE_URL = " https://exemplu.ro/articol.html" 
WIKIDATA_ENDPOINT = " https://www.wikidata.org/w/api.php" 
GOOGLE_FACTCHECK_ENDPOINT = " https://factchecktools.googleapis.com/v1alpha1/claims:search" 
GOOGLE_API_KEY = "YOUR_GOOGLE_API_KEY"

  • ARTICLE_URL – adresa web a articolului pe care îl vom analiza.
  • WIKIDATA_ENDPOINT – endpoint‑ul API‑ului Wikidata (folosit pentru interogări SPARQL / căutare de entităţi).
  • GOOGLE_FACTCHECK_ENDPOINT – endpoint‑ul Google Fact‑Check Tools (necesită cheia API).
  • GOOGLE_API_KEY – cheia personală pentru a accesa Google Fact‑Check API.


3️⃣ Funcţia wikidata_check(claim)

def wikidata_check(claim: str) -> dict | None:
    # Construieşte interogarea SPARQL pentru a căuta claim‑ul în Wikidata
    query = f"""
    SELECT ?item WHERE {{
      ?item ?label "{claim}"@en .
    }}
    LIMIT 1
    """
    params = {"action": "query", "format": "json", "list": "search", "srsearch": claim}
    resp = requests.get(WIKIDATA_ENDPOINT, params=params, timeout=10)
    if resp.ok:
        data = resp.json()
        if data.get("search"):
            return data["search"][0]          # returnează primul rezultat găsit
    return None

  • Scop: Verifică dacă afirmaţia (claim) există ca entitate în Wikidata.
  • Ce face: Trimite o cerere GET cu parametrii de căutare; dacă există rezultate, returnează primul (dicţionar cu title, snippet, url etc.). Dacă nu, returnează None.
  • Observaţii: În codul original se poate folosi SPARQL, dar aici se foloseşte metoda search simplificată.


4️⃣ Funcţia google_factcheck_check(claim)

def google_factcheck_check(claim: str) -> dict | None:
    params = {
        "query": claim,
        "key": GOOGLE_API_KEY,
        "languageCode": "ro",   # limba română
    }
    resp = requests.get(GOOGLE_FACTCHECK_ENDPOINT, params=params, timeout=10)
    if resp.ok:
        data = resp.json()
        if data.get("claims"):
            return data["claims"][0]       # primul claim găsit în Google Fact‑Check
    return None

  • Scop: Caută afirmaţia în baza de date Google Fact‑Check.
  • Ce face: Trimite o cerere GET cu query = claim și cheia API. Dacă există rezultate, returnează primul obiect claim (conţine rating, URL, etc.).
  • Important: Pentru a funcţiona trebuie să ai un cont Google Cloud și să activezi API‑ul Fact Check Tools.


5️⃣ Funcţia build_claimreview(...)

def build_claimreview(
    claim: str,
    rating: str,
    review_url: str,
    author_name: str,
    publisher_name: str,
) -> dict:
    return {
        "@type": "ClaimReview",
        "datePublished": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ"),
        "url": review_url,
        "author": {"@type": "Organization", "name": author_name},
        "publisher": {"@type": "Organization", "name": publisher_name},
        "claimReviewed": claim,
        "reviewRating": {
            "@type": "Rating",
            "ratingValue": rating,
            "bestRating": "True",
            "worstRating": "False",
        },
    }

  • Scop: Construieşte un obiect JSON‑LD conform specificaţiei ClaimReview din schema.org.
  • Câmpuri cheie:
  • @type: tipul schema (ClaimReview).
  • datePublished: data curentă în format ISO‑8601 (UTC).
  • url: link‑ul către sursa de verificare (Wikidata sau Google Fact‑Check).
  • author & publisher: informaţii despre entitatea care a făcut verificarea.
  • claimReviewed: textul afirmaţiei originale.
  • reviewRating: ratingul (ex. "True", "False" sau "Unrated"). bestRating/worstRating sunt setate pentru a indica ce valoare reprezintă adevărat/fals.


6️⃣ Funcţia main()

def main():
    # 1️⃣  Citeşte articolul și extrage claim‑urile
    df_claims = pd.read_csv("claims.csv")   # sau orice altă sursă de date
    claimreview_items = []

    # 2️⃣  Parcurge fiecare claim cu bară de progres
    for _, row in tqdm(df_claims.iterrows(),
                       total=len(df_claims),
                       desc="Verificare claim‑uri"):
        claim = row["claim_raw"]

        # 3️⃣  Caută în Wikidata
        wikidata_res = wikidata_check(claim)
        if wikidata_res:
            rating = "True"
            source = f" https://www.wikidata.org/wiki/{wikidata_res ['item']['value'].split('/')[-1]}"
        else:
            # 4️⃣  Dacă nu există în Wikidata, încearcă Google Fact‑Check
            google_res = google_factcheck_check(claim)
            if google_res:
                rating = google_res.get("textualRating", "Unrated")
                source = google_res.get("claimReview", [{}])[0].get("url", "")
            else:
                rating = "Unrated"
                source = ARTICLE_URL

        # 5️⃣  Construiește obiectul ClaimReview
        cr = build_claimreview(
            claim=claim,
            rating=rating,
            review_url=source,
            author_name="Fact‑Check Bot",
            publisher_name="MyFactCheck.org",
        )
        claimreview_items.append(cr)

    # 6️⃣  Serializare JSON‑LD
    output = {
        "@context": " https://schema.org", 
        "@graph": claimreview_items,
    }
    jsonld_str = json.dumps(output, indent=2, ensure_ascii=False)

    # 7️⃣  Salvează în fişier cu timestamp
    out_path = f"claimreview_{datetime.utcnow().strftime('%Y%m%d_%H%M%S')}.jsonld"
    with open(out_path, "w", encoding="utf-8") as f:
        f.write(jsonld_str)

    print(f"✅ Pipeline terminat - {len(claimreview_items)} ClaimReview salvate în {out_path}")

Etapele detaliate

Etapă Ce se întâmplă
1. Citirea datelor Se încarcă un CSV (claims.csv) care conţine coloana claim_raw – textul brut al fiecărui claim.
2. Bucle cu tqdm Pentru fiecare rând se afișează o bară de progres (desc="Verificare claim‑uri").
3. Verificare în Wikidata Se apelează wikidata_check. Dacă există un rezultat, se consideră că afirmaţia este adevărată (rating = "True"). Se construieşte URL‑ul spre pagina Wikidata a elementului găsit.
4. Dacă nu există în Wikidata → Google Fact‑Check Se apelează google_factcheck_check. Dacă găseşte un rezultat, se preia textualRating (ex. „True”, „False”, „Mixture”) și URL‑ul din claimReview. Dacă nici Google nu găseşte, se marchează ca „Unrated” și se foloseşte URL‑ul articolului original ca sursă.
5. Crearea obiectului ClaimReview Se apelează build_claimreview cu toate informaţiile adunate.
6. Colectarea în listă Fiecare obiect este adăugat în claimreview_items.
7. Serializare JSON‑LD Se creează un dicţionar cu @context și @graph (lista de obiecte). Se converteşte în text JSON‑LD cu indentare și ensure_ascii=False pentru a păstra diacriticele.
8. Scriere în fişier Numele fişierului conţine data și ora UTC (claimreview_YYYYMMDD_HHMMSS.jsonld). Fișierul este scris în UTF‑8.
9. Mesaj de final Se afișează pe consolă numărul de claim‑uri procesate și calea fişierului rezultat.

7️⃣ Ce biblioteci / instrumente sunt folosite și de ce?

Bibliotecă Motivul utilizării
pandas Pentru citirea și iterarea ușoară a unui CSV cu claim‑uri. DataFrame.iterrows() permite accesul la fiecare rând ca la un dicţionar.
tqdm Pentru a oferi feedback vizual (bară de progres) în timpul rulării buclei, util în seturi mari de claim‑uri.
requests Pentru a face request‑uri HTTP către API‑urile externe (Wikidata, Google Fact‑Check).
json Pentru a transforma structura Python (dict) în format JSON‑LD valid.
datetime Pentru timestamp‑uri (nume fişier și câmpul datePublished).

8️⃣ Cum poţi rula scriptul

  1. Instalează dependenţele

„`bash
pip install pandas tqdm requests
„`

  1. Pregăteşte fişierul claims.csv – trebuie să conţină cel puţin coloana claim_raw. Exemple:

„`csv
claim_raw
„Vaccinul COVID‑19 conţine microcipuri”
„Păsările migratoare aduc gripă”
„`

  1. Setează variabilele de configurare – înlocuieşte ARTICLE_URL, GOOGLE_API_KEY și eventual alte endpoint‑uri dacă foloseşti altă versiune.
  1. Rulează scriptul

„`bash
python claim_review_pipeline.py
„`

  1. Verifică rezultatul – vei găsi un fişier claimreview_YYYYMMDD_HHMMSS.jsonld în directorul curent. Poţi deschide fişierul cu un editor de text sau îl poţi încărca într‑un validator JSON‑LD pentru a te asigura că respectă schema.org.

9️⃣ Posibile îmbunătăţiri / extensii

Aspect Ce poţi face
Gestionarea rate‑limiting‑ului Adaugă time.sleep() sau un mecanism de retry cu back‑off pentru a evita blocarea API‑urilor.

| Cache local | Salvează răspunsurile


Reply
Page 2 / 2

–ForumLucrareLicenta.ro–

–ForumLucrareLicenta.ro–