import gradio as gr from transformers import AutoTokenizer, AutoModelForSeq2SeqLM print("Modeller yukleniyor...") tr_to_en_tok = AutoTokenizer.from_pretrained("remox01/opus-mt-tc-big-tr-en") tr_to_en_model = AutoModelForSeq2SeqLM.from_pretrained("remox01/opus-mt-tc-big-tr-en") en_to_tr_tok = AutoTokenizer.from_pretrained("remox01/opus-mt-tc-big-en-tr") en_to_tr_model = AutoModelForSeq2SeqLM.from_pretrained("remox01/opus-mt-tc-big-en-tr") print("Zemberek yukleniyor...") from zemberek import TurkishMorphology morphology = TurkishMorphology.create_with_defaults() print("spaCy yukleniyor...") import spacy nlp = spacy.load("en_core_web_sm") def translate(text, direction): if not text.strip(): return "" if direction == "TR -> EN": tokenizer, model = tr_to_en_tok, tr_to_en_model else: tokenizer, model = en_to_tr_tok, en_to_tr_model inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=128) outputs = model.generate(**inputs, max_length=128) return tokenizer.decode(outputs[0], skip_special_tokens=True) def zemberek_analyze(text): if not text.strip(): return "Cumle bos." words = text.split() results = [] for word in words: clean = word.strip(".,!?;:()") try: wa = morphology.analyze(clean) if wa.analysis_results: sa = wa.analysis_results[0] morphemes = sa.get_morphemes() suffix_list = [str(m) for m in morphemes[1:]] if len(morphemes) > 1 else [] pos = morphemes[0].pos.name if morphemes else "Unknown" suffix_str = " + ".join(suffix_list) if suffix_list else "-" results.append(f"Kelime: {word}\n Kok: {sa.get_stem()}\n Ekler: {suffix_str}\n POS: {pos}\n Analiz: {sa.format_string()}") else: results.append(f"Kelime: {word}\n Analiz bulunamadi") except Exception as e: results.append(f"Kelime: {word}\n Hata: {str(e)}") return "\n\n".join(results) def spacy_analyze(text): if not text.strip(): return "Cumle bos." doc = nlp(text) results = [] for token in doc: results.append(f"Kelime: {token.text}\n Lemma: {token.lemma_}\n POS: {token.pos_} ({token.tag_})\n Dep: {token.dep_}\n Shape: {token.shape_}\n Stopword: {token.is_stop}") entities = [(ent.text, ent.label_) for ent in doc.ents] entity_str = "\n".join([f" {text} -> {label}" for text, label in entities]) if entities else " Varlik bulunamadi" return "\n\n".join(results) + "\n\nVARLIKLAR (NER):\n" + entity_str def comprehensive_analysis(turkish, english): results = [] if turkish.strip(): results.append("=== TURKCE ZEMBEREK ANALIZI ===") results.append(zemberek_analyze(turkish)) results.append("") results.append("=== TURKCE -> INGILIZCE (Helsinki-NLP) ===") results.append(translate(turkish, "TR -> EN")) results.append("") if english.strip(): results.append("=== INGILIZCE SPACY ANALIZI ===") results.append(spacy_analyze(english)) results.append("") results.append("=== INGILIZCE -> TURKCE (Helsinki-NLP) ===") results.append(translate(english, "EN -> TR")) return "\n".join(results) if results else "Lutfen bir cumle girin." with gr.Blocks(title="XDE - Turkce-Ingilizce Dil Araci") as demo: gr.Markdown("# XDE - Turkce-Ingilizce Dil Araci") gr.Markdown("Helsinki-NLP, Zemberek ve spaCy ile dil analizi") with gr.Tab("Ceviri"): with gr.Row(): direction = gr.Dropdown(["TR -> EN", "EN -> TR"], value="TR -> EN", label="Yon") input_text = gr.Textbox(label="Cumle", placeholder="Turkce veya Ingilizce cumle girin...") output_text = gr.Textbox(label="Ceviri") translate_btn = gr.Button("CEVIR") translate_btn.click(translate, inputs=[input_text, direction], outputs=output_text) with gr.Tab("Zemberek (Turkce)"): zemberek_input = gr.Textbox(label="Turkce Cumle", placeholder="Turkce cumle girin...") zemberek_output = gr.Textbox(label="Morfolojik Analiz", lines=15) zemberek_btn = gr.Button("ANALIZ ET") zemberek_btn.click(zemberek_analyze, inputs=zemberek_input, outputs=zemberek_output) with gr.Tab("spaCy (Ingilizce)"): spacy_input = gr.Textbox(label="Ingilizce Cumle", placeholder="Ingilizce cumle girin...") spacy_output = gr.Textbox(label="Dilbilgisi Analizi", lines=15) spacy_btn = gr.Button("ANALIZ ET") spacy_btn.click(spacy_analyze, inputs=spacy_input, outputs=spacy_output) with gr.Tab("Karsilastirmali Analiz"): with gr.Row(): tr_input = gr.Textbox(label="Turkce Cumle", placeholder="Merhaba, nasilsiniz?") en_input = gr.Textbox(label="Ingilizce Cumle", placeholder="Hello, how are you?") comp_output = gr.Textbox(label="Sonuc", lines=20) comp_btn = gr.Button("KARSILASTIR") comp_btn.click(comprehensive_analysis, inputs=[tr_input, en_input], outputs=comp_output) demo.launch()