Spaces:
Sleeping
Sleeping
| # 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() |