| 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() |
|
|