Doğal Dil İşleme (NLP) projelerinde, metin verilerini anlamlandırmak ve üzerinde analizler yapmak için bir dizi yöntem ve araç kullanılır. Bu proje kapsamında, önce Word Embeddings ile kelimelerin vektör temsilleri oluşturuldu; kelimeler arasındaki benzerlikler ve ilişkiler incelendi. Ardından, komedyenlerin performans transkriptleri üzerinden Latent Dirichlet Allocation (LDA) kullanılarak metinlerin hangi konularda yoğunlaştığı analiz edildi. Metinler, NLTK ve Gensim kütüphaneleriyle temizlendi, sadece anlamlı kelimeler (isimler ve sıfatlar) seçildi ve stopwords’ler çıkarıldı. Son olarak, Named Entity Recognition (NER) ile metinlerde geçen özel isimler, kuruluşlar, tarih ve yerler gibi varlıklar tespit edildi. Bu adımlar, metin verilerinin hem sayısal hem de anlamsal olarak modellenmesini sağlayarak ileri analizler ve görselleştirmeler için zemin hazırladı.
Word Embeddings
Word Embeddings, kelimeleri anlamsal benzerlikleri korunacak şekilde sayısal vektörlere dönüştüren bir yöntemdir. Bu sayede NLP modelleri yalnızca kelime sıklıklarını değil, kelimeler arasındaki bağlam ve anlam ilişkilerini de öğrenebilir.
import pandas as pd
# Veri analizi ve veri manipülasyonu işlemlerini kolaylaştırmak için Pandas kütüphanesini içe aktarır
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# Kategorik verileri sayısal forma dönüştürmek için LabelEncoder ve OneHotEncoder sınıflarını içe aktarır
df = pd.DataFrame({
# Kategorik ve sayısal özellikleri içeren örnek bir veri seti tanımlanır
# Konuşma metinlerinden 5 ana konu çıkarmak için LDA modeli eğitilir
# Print the topics topics = lda_model.print_topics(num_words=10)
# Her konuya ait en önemli 10 kelime alınır
print("\nTopics discovered in comedians' transcripts:")
# LDA modelinin bulduğu konular ekrana yazdırılır
for idx, topic in topics: print(f"Topic #{idx + 1}: {topic}\n")
# Her bir konunun içeriği sırasıyla kullanıcıya gösterilir
Nltk
import nltk
nltk.download('punkt_tab')
# NLTK kütüphanesinde cümle ve kelime tokenization işlemleri için gerekli olan 'punkt' veri paketini indirir
nltk.download('averaged_perceptron_tagger_eng')
# İngilizce metinler için kelimelerin dilbilgisel etiketlerini (POS tagging) belirlemek amacıyla kullanılan modeli indirir
# Imports import requests from bs4 import BeautifulSoup import pandas as pd import gensim from gensim import corpora from gensim.models.ldamulticore import LdaMulticore import re import nltk from nltk.tokenize import word_tokenize from nltk import pos_tag from nltk.stem import WordNetLemmatizer from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction import text nltk.download('punkt') nltk.download('averaged_perceptron_tagger') nltk.download('wordnet')
# Scrape function def url_to_transcript(url): page = requests.get(url).text soup = BeautifulSoup(page, "lxml") paragraphs = soup.find(class_="ast-container").find_all('p') text_data = ' '.join(p.text for p in paragraphs) print(f'Successfully scraped: {url}') return text_data
# Convert frozenset to list for CountVectorizer stop_words = list(text.ENGLISH_STOP_WORDS.union(add_stop_words))
# Lemmatizer lemmatizer = WordNetLemmatizer()
# Function to extract only nouns and adjectives def nouns_adj(text): text = text.lower() text = re.sub(r"’", "'", text) text = re.sub(r"[^a-zA-Z']", " ", text) text = re.sub(r'\s+', ' ', text) tokenized = word_tokenize(text) tagged = pos_tag(tokenized) is_noun_adj = lambda pos: pos.startswith('NN') or pos.startswith('JJ') words = [lemmatizer.lemmatize(word) for word, pos in tagged if is_noun_adj(pos) and word not in stop_words] return ' '.join(words)
# Convert into pandas DataFrame for gensim dtm = pd.DataFrame(data_cv.toarray(), columns=cv.get_feature_names_out())
# Create corpus for LDA corpus = gensim.matutils.Sparse2Corpus(data_cv, documents_columns=False) id2word = dict((id, word) for word, id in cv.vocabulary_.items())
# LDA Model (12 topics for 12 comedians) lda_model = LdaMulticore(corpus, num_topics=12, id2word=id2word, passes=50, workers=2, random_state=42)
# Show topics topics = lda_model.print_topics(num_words=10) for idx, topic in topics: print(f"\n📝 Topic {idx}:\n{topic}")
NER Named Entity Recognition
Bir metin içerisinde geçen kişi, yer, organizasyon, tarih gibi özel varlıkları otomatik olarak tespit etmeye yarar
import spacy
# Named Entity Recognition (NER) gibi gelişmiş NLP görevleri için spaCy kütüphanesini projeye dahil eder
!python -m spacy download en_core_web_md
nlp=spacy.load(name='en_core_web_md')
# SpaCy’nin orta ölçekli İngilizce dil modelini (kelime vektörleri ve NER dahil) belleğe yükler
doc=nlp('Jonathan is looking for a job in Turkey for 50k. World Health Organization WHO')
# Verilen metni NLP pipeline’dan geçirerek token, entity ve dilsel özellikleri analiz eder
# Metindeki her bir kelimenin kökünü, sözcük türünü, sözdizimsel görevini ve temel dilsel özelliklerini analiz ederek ekrana yazdırır
from spacy import displacy
# spaCy ile Named Entity ve dependency yapılarını görsel olarak göstermek için kullanılan görselleştirme modülünü içe aktarır
displacy.render(doc, style='dep')
# Metindeki kelimeler arasındaki bağımlılık (dependency) ilişkilerini görsel olarak gösterir
text = '''When Sebastian Thrun started working on self-driving cars at Google in 2007, few people outside of the company took him seriously.
He immigrated in 2003. Zafer loves NLP'''
# Named Entity Recognition (NER) uygulanacak örnek metni tanımlar
doc = nlp(text)
# Metni spaCy NLP pipeline’ından geçirerek varlık tanıma (NER) için işler
displacy.render(doc, style="ent")
# Metin içerisindeki kişi, tarih, organizasyon gibi varlıkları görsel olarak gösterir
Yapılan çalışmada, Word Embeddings sayesinde kelimeler arasındaki anlamsal ilişkiler gözlemlenebilir hale geldi ve model benzer kelimeleri tespit edebildi. LDA ile metinlerin hangi konularda yoğunlaştığı keşfedildi ve farklı komedyenlerin konuşma içerikleri görselleştirilebilecek şekilde kategorilere ayrıldı. NER sayesinde metinlerdeki kişi, yer, kuruluş ve tarih bilgileri ayrıştırıldı, böylece metinler daha yapılandırılmış bir formata kavuştu. Tüm bu adımlar, ham metin verilerinin modellenebilir, analiz edilebilir ve görselleştirilebilir hale gelmesini sağlayarak NLP projelerinde temel bir workflow’un nasıl oluşturulacağını gösterdi.