Spaces:
Sleeping
Sleeping
File size: 4,971 Bytes
614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd 614c7a3 aff42bd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# Gerekli kütüphaneleri içe aktarıyoruz.
# Bu kütüphaneleri kurmak için: pip install gradio requests beautifulsoup4
import gradio as gr
import requests
from bs4 import BeautifulSoup
# --- Çekirdek Mantık (Önceki Script'ten Uyarlanmış) ---
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
def scrape_wikipedia_article(url: str):
"""
Kullanıcının girdiği URL'den Wikipedia makalesini çeker ve işler.
Bu fonksiyon, Gradio arayüzünün "beyni" olarak çalışacaktır.
Args:
url (str): Kullanıcının Gradio arayüzünden girdiği Wikipedia URL'si.
Returns:
tuple: (Başlık, Paragraf Sayısı, Paragrafların Markdown Formatı)
veya hata durumunda (Hata Mesajı, 0, "")
"""
# URL'nin geçerli bir Wikipedia adresi olup olmadığını basitçe kontrol edelim.
if not url or "wikipedia.org" not in url:
return "Lütfen geçerli bir Wikipedia URL'si girin.", 0, ""
try:
# --- Veri Çekme (Scraping) ---
response = requests.get(url, headers=HEADERS, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.content, "html.parser")
# --- Veri Ayrıştırma (Parsing) ---
# Sayfa başlığını <h1 id="firstHeading"> etiketinden alalım.
page_title_element = soup.find('h1', id='firstHeading')
page_title = page_title_element.text if page_title_element else "Başlık Bulunamadı"
content_div = soup.find('div', class_='mw-parser-output')
if not content_div:
return f"'{page_title}' sayfasında ana içerik alanı bulunamadı.", 0, ""
paragraphs_html = content_div.find_all('p')
# --- Veri Temizleme ve Formatlama ---
cleaned_paragraphs = [p.get_text(strip=True) for p in paragraphs_html if len(p.get_text(strip=True)) > 50]
paragraph_count = len(cleaned_paragraphs)
if paragraph_count == 0:
return f"'{page_title}' sayfasında yeterli uzunlukta paragraf bulunamadı.", 0, ""
# Çıktıyı daha okunaklı hale getirmek için Markdown formatını kullanalım.
# Her paragrafı bir liste elemanı olarak formatlayalım.
markdown_output = "\n".join([f"- {p}\n" for p in cleaned_paragraphs])
return page_title, paragraph_count, markdown_output
except requests.exceptions.RequestException as e:
error_message = f"Ağ hatası: URL'ye ulaşılamadı. Lütfen adresi kontrol edin.\nDetay: {e}"
return "Hata", 0, error_message
except Exception as e:
error_message = f"Beklenmedik bir hata oluştu: {e}"
return "Hata", 0, error_message
# --- Gradio Arayüzü Tanımlaması ---
# Uygulamanın nasıl görüneceğini ve davranacağını tanımlıyoruz.
# with gr.Blocks() as iface: daha gelişmiş arayüzler için kullanılır.
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown(
"""
# Wikipedia Makale Çekme ve Analiz Aracı
Aşağıya bir Wikipedia makalesinin URL'sini yapıştırın ve "Analiz Et" butonuna tıklayarak
sayfadaki paragrafları çekin.
"""
)
# Girdi ve Çıktı Alanları
with gr.Row():
# Sol taraf: Girdiler
with gr.Column(scale=1):
url_input = gr.Textbox(
label="Wikipedia URL'si",
placeholder="https://tr.wikipedia.org/wiki/Yapay_zeka"
)
submit_btn = gr.Button("Analiz Et", variant="primary")
# Analiz sonuçları için küçük bilgi kutucukları
with gr.Row():
article_title_output = gr.Textbox(label="Makale Başlığı", interactive=False)
paragraph_count_output = gr.Number(label="Paragraf Sayısı", interactive=False)
# Sağ taraf: Çıktılar
with gr.Column(scale=2):
main_output = gr.Markdown(label="Çekilen Paragraflar")
# Butona tıklandığında ne olacağını belirliyoruz.
# fn: Hangi fonksiyon çalışacak? (scrape_wikipedia_article)
# inputs: Fonksiyona hangi girdi gidecek? (url_input)
# outputs: Fonksiyondan dönen sonuçlar hangi çıktı alanlarına gidecek?
submit_btn.click(
fn=scrape_wikipedia_article,
inputs=url_input,
outputs=[article_title_output, paragraph_count_output, main_output]
)
# Kullanıcıların denemesi için örnek URL'ler
gr.Examples(
["https://tr.wikipedia.org/wiki/Kuantum_bilgisayar%C4%B1", "https://tr.wikipedia.org/wiki/Makine_%C3%B6%C4%9Frenmesi"],
inputs=url_input
)
# --- Uygulamayı Başlatma ---
# Hugging Face Spaces, bu satırı gördüğünde uygulamayı başlatır ve sunar.
# Bu satır olmadan, script biter ve "application not initialized" hatası alırsınız.
demo.launch() |