File size: 6,856 Bytes
d8bc695 2c1198d d8bc695 58c0ade d8bc695 62d3b1e 8579f09 d8bc695 8579f09 d8bc695 8579f09 1574088 8579f09 d8bc695 8579f09 1574088 d8bc695 58c0ade 579a34e 58c0ade 8579f09 58c0ade d8bc695 1be00bd 8579f09 32f8762 8579f09 32f8762 8579f09 32f8762 8579f09 32f8762 8579f09 2c1198d 8579f09 1574088 2c1198d 8579f09 d8bc695 f3452ba f2bf1fd f3452ba f2bf1fd 58c0ade 8579f09 1574088 0bf758f b236025 f3452ba b236025 f3452ba |
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
import streamlit as st
from transformers import pipeline, AutoTokenizer, AutoModelForTokenClassification, AutoModelForSequenceClassification, AutoModelForCausalLM
import pandas as pd
# Uygulama sayfa ayarları
st.set_page_config(layout="wide")
# Örnek metin listesi
example_list = [
"Mustafa Kemal Atatürk 1919 yılında Samsun'a çıktı.",
"Bugün hava çok güzel ve enerjik hissediyorum.",
"Yapay zeka ve makine öğrenimi hakkında birçok gelişme var."
]
# Uygulama başlığı
st.title("NLP Toolkit")
# Görev seçimi
task_list = ['Metin Sınıflandırma', 'Metin Analizi', 'Duygu Analizi', 'Metin Oluşturma', 'Varlık Tanıma']
task = st.sidebar.selectbox("Görev Seç", task_list)
# Metin giriş yöntemi
st.subheader("Metin Giriş Yöntemi Seç")
input_method = st.radio("", ('Örneklerden Seç', 'Metin Yaz veya Yapıştır'))
# Metin girişine göre seçim
if input_method == 'Örneklerden Seç':
selected_text = st.selectbox('Metin Seç', example_list)
input_text = st.text_area("Seçilen Metin", selected_text, height=128)
elif input_method == "Metin Yaz veya Yapıştır":
input_text = st.text_area('Metin Yaz veya Yapıştır', '', height=128)
@st.cache_resource
def load_pipeline(model_name, task_type):
if task_type == "Metin Sınıflandırma":
model = AutoModelForSequenceClassification.from_pretrained("nlptown/bert-base-multilingual-uncased-sentiment")
tokenizer = AutoTokenizer.from_pretrained("nlptown/bert-base-multilingual-uncased-sentiment")
return pipeline('text-classification', model=model, tokenizer=tokenizer)
elif task_type == "Metin Analizi":
model = AutoModelForTokenClassification.from_pretrained("dbmdz/bert-base-turkish-cased")
tokenizer = AutoTokenizer.from_pretrained("dbmdz/bert-base-turkish-cased")
return pipeline('ner', model=model, tokenizer=tokenizer)
elif task_type == "Duygu Analizi":
model = AutoModelForSequenceClassification.from_pretrained("cardiffnlp/twitter-roberta-base-sentiment")
tokenizer = AutoTokenizer.from_pretrained("cardiffnlp/twitter-roberta-base-sentiment")
return pipeline('sentiment-analysis', model=model, tokenizer=tokenizer)
elif task_type == "Metin Oluşturma":
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
return pipeline('text-generation', model=model, tokenizer=tokenizer)
# Görev ve modele göre pipeline yükleme
model_dict = {
"Metin Sınıflandırma": "nlptown/bert-base-multilingual-uncased-sentiment",
"Metin Analizi": "dbmdz/bert-base-turkish-cased",
"Duygu Analizi": "cardiffnlp/twitter-roberta-base-sentiment",
"Metin Oluşturma": "gpt2",
"Varlık Tanıma": "dbmdz/bert-base-turkish-cased"
}
pipeline_model = load_pipeline(model_dict[task], task)
def process_entities(entities, text):
"""
Varlıkları birleştirip anlamlı bir şekilde düzenler.
"""
processed_entities = []
current_entity = None
for entity in entities:
if entity['entity'].startswith('I-'):
if current_entity and current_entity['label'] == entity['entity']:
current_entity['word'] += entity['word'].replace('##', '')
current_entity['end'] = entity['end']
current_entity['score'] = max(current_entity['score'], entity['score'])
else:
if current_entity:
processed_entities.append(current_entity)
current_entity = {
'label': entity['entity'],
'word': entity['word'].replace('##', ''),
'start': entity['start'],
'end': entity['end'],
'score': entity['score']
}
else:
if current_entity:
processed_entities.append(current_entity)
current_entity = None
if current_entity:
processed_entities.append(current_entity)
return processed_entities
if st.button("Çalıştır") and input_text:
if task in ["Metin Sınıflandırma", "Duygu Analizi"]:
output = pipeline_model(input_text)
df = pd.DataFrame(output)
st.subheader(f"{task} Sonuçları")
st.dataframe(df)
elif task == "Metin Analizi":
output = pipeline_model(input_text)
# Çıktıyı gözlemleme
st.write(output)
# Varlıkları işlemek için uygun formatı kontrol edin
if len(output) > 0 and 'entity' in output[0]:
# Process entities
processed_entities = []
for entity in output:
word = entity['word']
label = entity['entity']
score = entity['score']
start = entity['start']
end = entity['end']
processed_entities.append({
'word': word,
'label': label,
'score': score,
'start': start,
'end': end
})
# Aggregate entities
df = pd.DataFrame(process_entities(processed_entities, input_text))
st.subheader("Tanımlanan Varlıklar")
st.dataframe(df)
# Metni formatla
def format_text(text_data, original_text):
formatted_text = ""
last_end = 0
for item in text_data:
if item['start'] > last_end:
formatted_text += original_text[last_end:item['start']]
word = item['word']
label = item['label']
score = item['score']
if label.startswith('I-PER'):
color = 'blue'
elif label.startswith('I-MISC'):
color = 'green'
else:
color = 'gray'
formatted_text += f"<span style='color:{color}; font-weight: bold;'>{word} ({label}, {score:.2f})</span>"
last_end = item['end']
if last_end < len(original_text):
formatted_text += original_text[last_end:]
return formatted_text
formatted_text = format_text(process_entities(processed_entities, input_text), input_text)
st.subheader("Analiz Edilen Metin")
st.markdown(f"<p>{formatted_text}</p>", unsafe_allow_html=True)
else:
st.error("Varlık analizi sonucu beklenen formatta değil.")
elif task == "Metin Oluşturma":
output = pipeline_model(input_text, max_length=100, num_return_sequences=1)
st.subheader("Oluşturulan Metin")
st.write(output[0]['generated_text'])
|