File size: 1,998 Bytes
4ce0852
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

import gradio as gr
from transformers import pipeline
from wikidata_utils import get_wikidata_labels, get_multilingual_classifier

def classify_text(text, topic, language, top_k=5):
    # Get classifier for selected language
    classifier = get_multilingual_classifier(language)
    
    # Get Wikidata labels if topic provided
    candidate_labels = [topic] if not topic else get_wikidata_labels(topic, lang=language)
    
    # Classify text
    result = classifier(text, candidate_labels=candidate_labels)
    
    # Format results
    return {label: float(score) 
            for label, score in zip(result['labels'][:top_k], 
                                   result['scores'][:top_k])}

# Create interface
with gr.Blocks() as demo:
    gr.Markdown("# 🌐 Wikidata-Powered Classifier")
    gr.Markdown("Classify text using live knowledge from Wikidata")
    
    with gr.Row():
        text_input = gr.Textbox(label="Input Text", lines=3)
        topic_input = gr.Textbox(label="Topic (optional)", placeholder="e.g., renewable energy")
    
    with gr.Row():
        lang_dropdown = gr.Dropdown(
            ["en", "es", "fr", "de", "zh"],
            value="en",
            label="Language"
        )
        top_k_slider = gr.Slider(1, 10, value=5, label="Top Results")
    
    submit_btn = gr.Button("Classify")
    result_output = gr.Label(label="Classification Results")
    
    examples = gr.Examples(
        examples=[
            ["Tesla installed solar roofs on 50k homes last quarter", "renewable energy", "en"],
            ["La energía eólica crece un 15% en España", "energía renovable", "es"],
            ["Neue Perowskit-Solarzellen erreichen Rekordwirkungsgrad", "Solarenergie", "de"]
        ],
        inputs=[text_input, topic_input, lang_dropdown]
    )
    
    submit_btn.click(
        fn=classify_text,
        inputs=[text_input, topic_input, lang_dropdown, top_k_slider],
        outputs=result_output
    )

if __name__ == "__main__":
    demo.launch()