Metin Özgünlük Analizi

PDF veya TXT dosyalarının özgünlük değerlendirmesini yapar

Birden fazla dosya seçebilirsiniz (max. 2GB toplam).
Bu seçenek işaretlenirse, yüklediğiniz dosyalar sistemdeki genel referans derlem ile de karşılaştırılacaktır. Bu işlem analiz süresini uzatabilir.

Nasıl Çalışır?

  1. Analiz etmek istediğiniz PDF veya TXT dosyalarını seçin.
  2. İsteğe bağlı olarak "Referans Derleme Göre Analiz Et" seçeneğini işaretleyebilirsiniz.
  3. Sistem, dosyaları içerik açısından analiz eder.
  4. Her metin için özgünlük puanları ve çeşitli dilbilimsel özellikler hesaplanır.
  5. Sonuçları görüntüleyebilir ve JSON formatında (sadece sizin yüklediğiniz dosyalara ait sonuçları içeren) indirebilirsiniz.

Metin Özgünlük Analizi Nasıl Çalışır?

Sistemimiz, metinlerin özgünlüğünü (orijinalliğini) bilimsel yöntemlerle değerlendirmek için geliştirilmiş çok yönlü bir algoritma kullanır. İşte detaylı çalışma prensibi:

1. Dosya Yükleme ve Ön İşleme: Kullanıcı tarafından yüklenen PDF ve TXT dosyaları okunur. Metin içeriği çıkarılır ve temel temizleme işlemleri yapılır (örneğin, gereksiz boşlukların kaldırılması).

2. Dilbilimsel Analiz: Metinler, cümlelere ve kelimelere (token) ayrılır. Her kelimenin kökü (lemma) ve sözcük türü (POS tagging - Part-of-Speech) belirlenir. Bu aşamada spaCy gibi gelişmiş Doğal Dil İşleme (NLP) kütüphanelerinden yararlanılır.

3. Özellik Çıkarımı: Her metinden çeşitli sayısal özellikler (features) hesaplanır. Bu özellikler metnin özgünlüğünü farklı açılardan yansıtır:

  • Leksik Çeşitlilik (Lexical Diversity): Metindeki benzersiz kelime oranını ölçer (örn: Type-Token Ratio, Hapax Legomena Ratio). Yüksek çeşitlilik, genellikle daha özgün bir metne işaret eder.
  • Kelime ve Cümle İstatistikleri: Ortalama kelime uzunluğu, ortalama cümle uzunluğu gibi temel istatistikler.
  • Okunabilirlik Puanları: Metnin ne kadar kolay okunabildiğini ölçen formüller (örn: Flesch Reading Ease).
  • N-gram Analizi: Metindeki ardışık kelime gruplarının (bigram, trigram vb.) frekansları incelenir. Nadir N-gramların varlığı özgünlüğe işaret edebilir.
  • Noktalararası Karşılıklı Bilgi (PMI - Pointwise Mutual Information): Kelime çiftlerinin birlikte ne kadar sık veya nadir geçtiğini ölçer. Yüksek PMI değerine sahip özgün kelime çiftleri, metnin benzersizliğini artırabilir.
  • Sıkıştırma Oranı: Metnin ne kadar iyi sıkıştırılabildiği, içerdiği tekrar eden örüntüler hakkında fikir verir. Daha az sıkıştırılabilen metinler daha karmaşık ve potansiyel olarak daha özgün olabilir.
  • Dilbilimsel Kalıplar: Benzersiz sözcük türü sıralamaları (POS patterns), adlandırılmış varlıkların (Named Entities) oranı gibi daha derin dilbilimsel özellikler.

4. Uzunluk Normalizasyonu: Metinlerin uzunlukları farklı olabileceğinden, bazı özellikler (örn: leksik çeşitlilik) metin uzunluğuna göre normalleştirilir. Bu, kısa ve uzun metinlerin daha adil karşılaştırılmasını sağlar. Çok uzun metinler için örnekleme (sampling) teknikleri kullanılabilir.

5. Karşılaştırmalı Analiz (Eğer birden fazla dosya varsa veya referans derlem kullanılıyorsa):

  • TF-IDF (Term Frequency-Inverse Document Frequency): Kelimelerin bir metin içindeki ve tüm derlem (corpus) içindeki önemini tartar. Bu, metinleri vektörlere dönüştürmek için kullanılır.
  • Kosinüs Benzerliği (Cosine Similarity): TF-IDF vektörleri arasındaki açıyı ölçerek metinlerin içeriksel benzerliğini belirler.
  • Konu Modelleme (Topic Modeling - örn: LDA): Metinlerdeki gizli konuları ortaya çıkarır ve metinlerin konu dağılımlarını karşılaştırır. Farklı konu profilleri özgünlüğe işaret edebilir.
  • Kümeleme (Clustering): Benzer içerikli metinleri gruplandırır. Küçük veya kendine özgü bir kümede yer alan metin daha özgün olabilir.

6. Özgünlük Puanı Hesaplaması: Çıkarılan tüm bu özellikler ve karşılaştırmalı analiz sonuçları, önceden belirlenmiş ağırlıklarla birleştirilerek her metin için genel bir özgünlük puanı (0 ile 1 arasında) hesaplanır. Yüksek puan, daha yüksek özgünlük anlamına gelir.

7. Sonuçların Sunulması: Analiz edilen metinler, özgünlük puanlarına göre sıralanır. Her metin için detaylı özellikler ve en benzer olduğu diğer metinler (eğer varsa) kullanıcıya sunulur. Sonuçlar ayrıca JSON formatında indirilebilir.

Referans Derlem Kullanımı (İsteğe Bağlı): Eğer kullanıcı "Referans Derleme Göre Analiz Et" seçeneğini işaretlerse, yüklediği dosyalar sadece kendi aralarında değil, aynı zamanda sistem yöneticisi tarafından önceden oluşturulmuş geniş bir referans metin koleksiyonuyla da karşılaştırılır. Bu, özellikle belirli bir alanda (örneğin, hukuk metinleri, tıbbi makaleler) veya bir kurum içinde üretilen metinlerin özgünlüğünü daha bağlamsal bir şekilde değerlendirmek için faydalıdır.

Metin Özgünlük Analizi Nedir?

Metin özgünlük analizi, bir metnin orijinalliğini ve benzersizliğini çeşitli dilbilimsel, istatistiksel ve hesaplamalı yöntemlerle değerlendiren bilimsel bir disiplindir. Temelde şu unsurları inceler:

Özgünlük Kavramının Boyutları
1. İçeriksel Özgünlük

Bir metnin sunduğu bilgi veya fikirlerin yenilikçiliği ve benzersizliğidir. Tamamen yeni fikirlerin yanı sıra, mevcut fikirlerin orijinal sentezi veya yeniden yorumlanması da bu kapsamdadır.

2. Dilbilimsel Özgünlük

Yazarın dil kullanımındaki ayırt edici özellikleri ifade eder. Sözcük seçimi, cümle yapıları, kullanılan ifade kalıpları ve stil özellikleri bu kategoriye girer.

3. Yapısal Özgünlük

Metnin organizasyonu, fikirlerin akışı, argüman yapısı ve genel kurgusu ile ilgilidir. Benzersiz yapılandırma yöntemleri özgünlüğün önemli bir göstergesidir.

4. Stilistik Özgünlük

Yazarın kendine has anlatım tarzı, metafor kullanımı, ton, ritim ve diğer retorik araçları kullanma biçimidir.

Tarihsel Gelişim

Metin özgünlük analizi, gelişimini şu aşamalardan geçerek sürdürmüştür:

Manuel Analiz Dönemi (Pre-1990)

Uzmanlar tarafından yapılan stilistik ve dilbilimsel inceleme ile sınırlı kalmıştır. Klasik edebi analizler ve filolojik çalışmalar bu dönemin örnekleridir.

İstatistiksel Analiz Dönemi (1990-2000)

Lexical richness, token-type oranları ve istatistiksel örüntü tanıma yöntemlerinin geliştirilmesiyle bilgisayar destekli analizlerin başlangıcı.

NLP ve Makine Öğrenmesi Dönemi (2000-2015)

İleri düzey doğal dil işleme tekniklerinin ve makine öğrenmesi algoritmalarının entegrasyonu. Vektör uzayı modelleri ve n-gram analizi gibi tekniklerin geliştirilmesi.

Derin Öğrenme ve Semantik Analiz Dönemi (2015-Günümüz)

Transformerlar, BERT, GPT gibi derin öğrenme modellerinin kullanımıyla semantik düzeyde analiz, bağlamsal anlamlandırma ve çok boyutlu özgünlük değerlendirmesi.

Özgünlük Analizi Ölçütleri ve Metrikleri

Metin özgünlüğünü değerlendirmek için kullanılan çeşitli metrikler şunlardır:

Leksikometrik Ölçütler
Type-Token Ratio (TTR)

Bir metinde kullanılan benzersiz kelime sayısının toplam kelime sayısına oranıdır. Yüksek TTR, zengin kelime dağarcığını ve potansiyel olarak daha özgün metni gösterir.

$TTR = \frac{|V|}{N}$

Burada $|V|$ benzersiz kelime sayısı, $N$ ise toplam kelime sayısıdır.

Hapax Legomena Ratio

Metinde sadece bir kez geçen kelimelerin (hapax legomena) toplam kelime sayısına oranıdır. Yüksek oran, metindeki kelime kullanımının çeşitliliğini ve potansiyel olarak daha yüksek özgünlüğü gösterir.

$HLR = \frac{V_1}{N}$

Burada $V_1$ metinde yalnızca bir kez geçen kelime sayısıdır.

MTLD (Measure of Textual Lexical Diversity)

Metin boyunca TTR değerlerinin stabilliğini ölçer. Uzun metinlerdeki TTR'nin düşme eğilimini düzeltmek için geliştirilmiştir.

Yule's K Karakteristiği

Kelime frekans dağılımının bir ölçüsüdür ve metindeki kelime kullanım çeşitliliğini gösterir.

$K = 10^4 \times \frac{\sum_{i=1}^{|V|} i^2 f(i) - N}{N^2}$

(Burada $f(i)$ frekansı $i$ olan kelimelerin sayısıdır, sum $i=1$ to $V_{max\_freq}$ olmalı)

Bilgi Teorisi Temelli Ölçütler
Entropi

Metindeki kelime dağılımının belirsizliğini ölçer. Yüksek entropi, daha çeşitli ve potansiyel olarak daha özgün bir kelime kullanımını gösterir.

$H(X) = -\sum_{i=1}^{n} p(x_i) \log_2 p(x_i)$
Perplexity

Bir dil modelinin metin üzerindeki şaşkınlık düzeyidir. Düşük perplexity, metnin daha tahmin edilebilir olduğunu gösterir.

$\text{Perplexity} = 2^{H(X)}$
Kolmogorov Karmaşıklığı ve Sıkıştırma Oranı

Bir metnin sıkıştırılabilme derecesi, içerdiği bilgi miktarının bir göstergesidir. Düşük sıkıştırma oranı (yani daha az sıkıştırılabilir olması), daha yüksek özgünlük anlamına gelebilir.

$\text{Sıkıştırma Oranı} = \frac{\text{Sıkıştırılmış Boyut}}{\text{Orijinal Boyut}}$
Yapısal ve Gramatik Ölçütler
Sözcük Türü Dağılımı

Metindeki isim, fiil, sıfat gibi sözcük türlerinin dağılımı ve oranları. Yazarlar arasında ayırt edici bir özelliktir.

Sözdizimsel Karmaşıklık

Cümle yapılarının karmaşıklığını ölçer. Yan cümle sayısı, sözdizimsel derinlik ve bağımlılık uzunlukları kullanılır.

POS N-gram Analizi

Sözcük türlerinin ardışık sıralanışının analizidir. Yazarın dilbilgisel tercihlerini yansıtır.

Semantik ve Bağlamsal Ölçütler
Latent Semantic Analysis (LSA)

Metinlerdeki gizli semantik ilişkileri ortaya çıkaran bir tekniktir. Metinler arasındaki semantik benzerlikleri değerlendirir.

Konu Tutarlılığı (Topic Coherence)

Metindeki konu tutarlılığı ve konu geçişlerinin akıcılığını ölçer.

Anlamsal Ağ Yoğunluğu (Semantic Network Density)

Metindeki kavramlar arasındaki ilişkilerin yoğunluğu ve bağlantı yapısı.

Özgünlük Analizi Metodolojileri

Metin özgünlük analizi için kullanılan başlıca metodolojik yaklaşımlar şunlardır:

N-gram Tabanlı Analiz

N-gram analizi, metinde yer alan ardışık kelime gruplarının (n-gram) incelenmesine dayanır.

Uygulama Yöntemi
  1. Metin, n-gramlara (unigram, bigram, trigram vb.) ayrılır.
  2. N-gramların frekans dağılımları hesaplanır.
  3. Nadir n-gramların oranı belirlenir (özgünlük göstergesi olarak).
  4. Referans korpusa göre n-gram istatistikleri karşılaştırılır.
from nltk import ngrams # nltk.download('punkt') gerekebilir from collections import Counter def extract_ngrams(text, n): tokens = text.lower().split() # Basit tokenizasyon n_grams = list(ngrams(tokens, n)) return Counter(n_grams) # Nadir n-gram oranı def rare_ngram_ratio(ngram_counts): if not ngram_counts: return 0 rare_ngrams = sum(1 for count in ngram_counts.values() if count == 1) return rare_ngrams / len(ngram_counts)
Vektör Uzayı Modelleri

Metinleri yüksek boyutlu vektör uzaylarında temsil ederek analiz eden yöntemlerdir.

TF-IDF Vektörizasyonu

Kelimelerin metinde geçme sıklığı (TF) ile ters belge frekansının (IDF) çarpımına dayanan bir ağırlıklandırma yöntemidir.

$TFIDF(t, d, D) = TF(t, d) \times IDF(t, D)$

$TF(t,d)$ = $t$ teriminin $d$ dokümanındaki frekansı

$IDF(t,D) = \log\frac{|D|}{|\{d' \in D \text{ öyle ki } t \in d'\}|}$ (D: doküman koleksiyonu)

Kelime Gömmeleri (Word Embeddings)

Word2Vec, GloVe, FastText gibi teknolojilerle kelimelerin anlamsal özelliklerini koruyan düşük boyutlu vektörlere dönüştürülmesi.

Belge Gömmeleri (Document Embeddings)

Doc2Vec, Universal Sentence Encoder gibi yöntemlerle belgelerin vektör gösterimlerinin oluşturulması.

from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # documents = ["metin 1", "metin 2", ...] # vectorizer = TfidfVectorizer() # vectors = vectorizer.fit_transform(documents) # similarity_matrix = cosine_similarity(vectors) print("Bu kod bloğu, bu sistemde arka planda çalışan betikte kullanılır.")
Derin Öğrenme Tabanlı Yöntemler
Transformers ve Bağlamsal Gömmeler

BERT, GPT, RoBERTa gibi dil modelleri kullanılarak metinlerin bağlamsal temsilleri oluşturulur.

Siamese Neural Networks

İki metin arasındaki benzerliği doğrudan öğrenen sinir ağı mimarileri.

Self-Supervised Learning

Etiketlenmemiş veriler üzerinde öz denetimli öğrenme ile metinlerin özelliklerini çıkaran modeller.

from transformers import AutoTokenizer, AutoModel # Örnek, bu sistemde direkt kullanılmıyor olabilir import torch # BERT model ve tokenizer yükleme (Örnek) # tokenizer = AutoTokenizer.from_pretrained("dbmdz/bert-base-turkish-cased") # model = AutoModel.from_pretrained("dbmdz/bert-base-turkish-cased") # Metin gömmesi oluşturma (Örnek) # def get_embedding(text): # inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512) # with torch.no_grad(): # outputs = model(**inputs) # return outputs.last_hidden_state[:, 0, :].numpy() # [CLS] token embedding print("Bu tür derin öğrenme modelleri, spaCy'nin md/lg modellerinde kısmen bulunur.")
Hibrit ve Ensemble Yöntemler

Farklı analiz yöntemlerinin güçlü yanlarını birleştiren yaklaşımlardır.

Çok Seviyeli Analiz

Leksikal, sözdizimsel, semantik ve pragmatik düzeylerdeki özelliklerin birlikte değerlendirilmesi.

Ağırlıklı Özellik Füzyonu

Farklı özelliklerin önem derecelerine göre ağırlıklandırılarak birleştirilmesi (Bu sistem bu yöntemi kullanır).

Özgünlük İndeksi

Çeşitli metriklerin normalize edilmiş bir indeks değerine dönüştürülmesi.

def calculate_originality_index(features_dict): # features_dict, her özellik için değeri içerir weights = { "lexical_diversity": 1.2, # Örneğin, sistemdeki ağırlıklar "hapax_legomena_ratio": 1.0, # ... diğer özellikler ve ağırlıkları "uniqueness_from_similarity": 2.0 } total_score = 0 total_weight = 0 for feature_name, feature_value in features_dict.items(): if feature_name in weights: total_score += feature_value * weights[feature_name] total_weight += weights[feature_name] return total_score / total_weight if total_weight > 0 else 0 # Bu kod, sistemin arka planındaki betikteki puanlama mantığını temsil eder.
Metin Özgünlük Analizinin Uygulama Alanları

Metin özgünlük analizi teknikleri çeşitli alanlarda önemli uygulamalara sahiptir:

Akademik ve Eğitim Alanındaki Uygulamalar
İntihal Tespiti

Öğrenci ödevleri, akademik makaleler ve tezlerde intihal tespiti ve önlenmesi. İleri düzey özgünlük analizleri, basit metin eşleştirmelerinin ötesine geçerek daha sofistike intihal yöntemlerini de tespit edebilir.

Bilimsel Katkı Değerlendirmesi

Akademik çalışmaların özgünlük ve yenilikçilik açısından değerlendirilmesi. Alana getirdiği katkının niceliksel olarak ölçülmesi.

Öğrenci Gelişim Takibi

Öğrencilerin yazma becerilerinin gelişimini ve özgün içerik üretme yeteneklerinin zaman içindeki ilerleyişini takip etme.

Yazarlık ve Edebiyat Alanındaki Uygulamalar
Yazar Tanımlama (Authorship Attribution)

Anonim metinlerin muhtemel yazarlarını belirleme. Yazarların dilsel parmak izlerini kullanarak metinlerin gerçek yazarlarını tespit etme.

Üslup Analizi (Stylometry)

Yazarların üslup özelliklerinin ve stilistik tercihlerinin belirlenmesi. Yazarlar arasındaki stilistik benzerliklerin ve farklılıkların ortaya çıkarılması.

Edebi Metin Sınıflandırma

Metinlerin tür, dönem veya edebi akım açısından sınıflandırılması. Özgün edebi çalışmaların belirlenmesi.

Medya ve İçerik Endüstrisi Uygulamaları
İçerik Kalite Değerlendirmesi

Web içerikleri, blog yazıları ve haber makalelerinin kalite ve özgünlük açısından değerlendirilmesi.

SEO ve İçerik Pazarlama

Özgün içeriğin arama motoru optimizasyonuna (SEO) katkısının değerlendirilmesi. İçerik stratejilerinin özgünlük odaklı geliştirilmesi.

Yapay Zeka Üretimi İçerik Tespiti

Yapay zeka tarafından otomatik olarak üretilen (örn: GPT modelleri) içeriklerin insan yazımından ayırt edilmesi.

Hukuki ve Güvenlik Alanındaki Uygulamalar
Telif Hakkı Koruma

Telif hakkı ihlallerinin tespiti ve önlenmesi. İçerik korsanlığıyla mücadele.

Adli Dilbilim (Forensic Linguistics)

Adli vakalarda metin analizi ve yazar tanımlama. İhtilaflı belgelerin (tehdit mektupları, intihar notları vb.) analizi ve karşılaştırması.

Sahte Haber Tespiti (Fake News Detection)

Dezenformasyon ve manipülasyon amaçlı içeriklerin belirlenmesi. Haberlerin güvenilirlik ve özgünlük açısından değerlendirilmesi.

Yapay Zeka ve Doğal Dil İşleme Alanındaki Uygulamalar
Metin Üretimi Değerlendirmesi

GPT gibi dil modelleri tarafından üretilen metinlerin kalite, tutarlılık ve çeşitlilik açısından değerlendirilmesi.

Yazma Asistanları

Kullanıcıların daha özgün ve etkili metinler oluşturmasına yardımcı olan araçların geliştirilmesi (örn: stil önerileri, kelime çeşitliliği artırma).

Çok Dilli Özgünlük Değerlendirmesi

Farklı dillerdeki metinlerin özgünlük açısından karşılaştırılabilir şekilde değerlendirilmesi için modeller geliştirme.

Gelecek Trendleri
Multimodal Özgünlük Analizi

Sadece metin değil, metinle birlikte sunulan görüntü, video ve ses verilerinin de özgünlük analizine dahil edildiği çok modlu sistemler.

Gerçek Zamanlı Özgünlük Değerlendirmesi

Yazma süreci sırasında (on-the-fly) anlık özgünlük geri bildirimi sağlayan ve intihal olasılığını gösteren sistemler.

Açıklanabilir Yapay Zeka (XAI) ile Özgünlük Analizi

Özgünlük puanlarının nedenlerini ve hangi faktörlerin bu puana nasıl etki ettiğini daha şeffaf bir şekilde açıklayan modeller.

Kişiselleştirilmiş Özgünlük Geliştirme Araçları

Kullanıcının yazma stiline ve ihtiyaçlarına göre özelleştirilmiş, metinlerin özgünlüğünü artırmaya yönelik yapay zeka destekli öneriler sunan araçlar.

Algoritmik Altyapı ve Metodoloji

Sistemimiz, gelişmiş doğal dil işleme (NLP) teknikleri ve hesaplamalı dilbilim prensiplerini kullanarak metinlerin özgünlüğünü değerlendirir. Analiz süreci şu aşamalardan oluşur (bu adımlar arka plandaki Python betiğinde gerçekleşir):

1. Metin Önişleme ve Dilbilimsel Analiz

Tokenizasyon ve Lemmatizasyon: SpaCy kütüphanesi kullanılarak metinler dilbilimsel birimlere ayrılır. Cümleler, kelimeler, kökler ve sözcük türleri (POS tagging) belirlenir.

# Örnek (Python betiğinden) # doc = nlp(text) # words = [token.text.lower() for token in doc if not token.is_punct and not token.is_space] # sentences = list(doc.sents) print("Bu kod, arka plandaki analiz betiğinde çalışır.")

Metriksel Normalizasyon (Örnekleme): Uzun metinlerde (>5000 kelime gibi bir eşik değer) sistematik örnekleme yapılarak başlangıç, orta ve son bölümlerden dengeli veri çıkarımı sağlanır. Bu, hesaplama süresini optimize ederken metnin genel karakteristiğini korumayı amaçlar.

# Örnek (Python betiğinden) # sample_size = 5000 # kelime # if len(words_in_text) > sample_size: # beginning = " ".join(words_in_text[:sample_size // 3]) # middle_start = max(0, len(words_in_text) // 2 - (sample_size // 3) // 2) # middle = " ".join(words_in_text[middle_start : middle_start + sample_size // 3]) # end = " ".join(words_in_text[-sample_size // 3:]) # sampled_text = beginning + " " + middle + " " + end # else: # sampled_text = original_text print("Bu kod, arka plandaki analiz betiğinde çalışır.")

Çok Dilli Destek: Öncelikle Türkçe (tr_core_news_md) için eğitilmiş dil modelleri kullanılır. Türkçe model bulunamazsa veya metin farklı bir dildeyse, İngilizce (en_core_web_md) modeline veya daha basit bir dil işleyiciye geri düşülür.

Geri Yedekleme Mekanizması: Gelişmiş SpaCy modelleri yüklenemediğinde, sistem daha temel tokenizasyon ve cümle bölme (SimpleNLP sınıfı veya NLTK gibi alternatifler) yöntemlerine geçerek çalışmaya devam etmeye çalışır.

2. Çok Boyutlu Özellik Çıkarımı
Leksikometrik Analizler
  • Type-Token Ratio (TTR): Benzersiz kelime sayısı / Toplam kelime sayısı. len(set(words)) / len(words)
  • Hapax Legomena Ratio: Sadece bir kez geçen kelime sayısı / Toplam kelime sayısı. sum(1 for freq in word_freq.values() if freq == 1) / len(words)
  • Ayarlanmış Leksik Çeşitlilik (Adjusted Lexical Diversity): Metin uzunluğunun TTR üzerindeki etkisini azaltmak için MTLD (Measure of Textual Lexical Diversity) benzeri segment bazlı TTR ortalaması veya logaritmik düzeltme kullanılır.
İstatistiksel Dil Modeli Özellikleri
  • N-gram Modelleme: Unigram, bigram (2-gram) ve trigram (3-gram) istatistikleri çıkarılır.
  • Nadir N-gram Analizi: Özellikle nadir (düşük frekanslı) bigram ve trigramların oranı hesaplanır. Bu, metnin benzersiz ifade kalıpları içerip içermediğine dair bir göstergedir. rare_bigrams_count / total_bigrams_count
Bilgi Teorisi Temelli Ölçümler
  • PMI (Pointwise Mutual Information): Kelime çiftlerinin istatistiksel olarak beklenenden daha sık veya daha nadir birlikte geçtiğini ölçer. Formülü: $PMI(x,y) = \log_2\left( \frac{P(x,y)}{P(x)P(y)} \right)$. Yüksek PMI'lı özgün çiftler önemlidir. Sistem, metindeki en yüksek PMI değerine sahip ilk N kelime çiftini ve bu PMI değerlerinin ortalamasını hesaplar.
  • Sıkıştırma Oranı (Lempel-Ziv): Metnin zlib gibi bir algoritma ile ne kadar sıkıştırılabildiğini ölçer. Daha az tekrarlayan örüntü içeren (yani daha karmaşık ve potansiyel olarak özgün) metinler genellikle daha düşük sıkıştırma oranına (yani daha büyük sıkıştırılmış boyuta) sahip olur. len(zlib.compress(text_bytes)) / len(text_bytes).
Vektörel Temsil ve Gömme Modelleri (Eğer İlgili Kütüphaneler Mevcutsa)
  • TF-IDF Vektörizasyonu: sklearn.feature_extraction.text.TfidfVectorizer kullanılarak her belge için TF-IDF vektörleri oluşturulur.
  • Belge Vektörleri (Doc Embeddings): SpaCy'nin kelime vektörleri (word vectors) olan modelleri (md veya lg serisi) kullanılıyorsa, belge vektörü bu kelime vektörlerinin ortalaması alınarak veya doğrudan doc.vector özelliği ile elde edilebilir. İki belge arasındaki benzerlik bu vektörler üzerinden doc1.similarity(doc2) ile veya manuel kosinüs benzerliği ile hesaplanır.
Dilbilimsel Özellikler (SpaCy Varsa)
  • Benzersiz Sözcük Türü Kalıpları (Unique POS Patterns): Cümlelerdeki sözcük türlerinin (isim-fiil-sıfat vb.) sıralanış kalıplarının çeşitliliği.
  • Adlandırılmış Varlık Oranı (Named Entity Ratio): Metindeki özel isim, yer, kurum gibi adlandırılmış varlıkların toplam kelime sayısına oranı.
3. Belge Benzerlik Analizi (Çoklu Metrik)

Sistemimiz, belgeler arasındaki benzerliği değerlendirmek için birden fazla metrik kullanır ve bunları ağırlıklı bir şekilde birleştirir:

Leksikal Benzerlik Metrikleri
  • Jaccard Benzerliği: İki metindeki ortak kelime kümesinin, toplam benzersiz kelime kümesine oranı. $\frac{|A \cap B|}{|A \cup B|}$
  • Sıralı Benzerlik (Sequence Matcher): difflib.SequenceMatcher kullanarak iki metnin karakter veya kelime dizileri arasındaki en uzun ortak alt diziyi bularak benzerlik oranı hesaplar.
  • Levenshtein Benzerliği (Düzenleme Mesafesi Temelli): Bir metni diğerine dönüştürmek için gereken minimum tek karakterlik düzenleme (ekleme, silme, değiştirme) sayısına dayalı bir benzerlik ölçüsüdür. Genellikle 1 - (Levenshtein Mesafesi / max_uzunluk) şeklinde normalize edilir. Sistemimizde bu da SequenceMatcher ile yaklaşık olarak hesaplanır.
Semantik ve Yapısal Benzerlik Analizleri (Scikit-learn Varsa)
  • TF-IDF Kosinüs Benzerliği: Belgelerin TF-IDF vektörleri arasındaki açının kosinüsü. $cosine\_similarity(tfidf\_vec1, tfidf\_vec2)$
  • N-gram Örtüşme Analizi: İki metindeki ortak N-gramların (genellikle bigram veya trigram) toplam benzersiz N-gramlara oranı.
  • Konu Benzerliği (Topic Similarity): LDA (Latent Dirichlet Allocation) gibi bir konu modeli kullanılarak belgelerin konu dağılımları (topic distributions) elde edilir. Bu dağılım vektörleri arasındaki kosinüs benzerliği hesaplanır.
  • Gömme Benzerliği (Embedding Similarity): SpaCy'nin belge vektörleri (doc.vector) veya kelime vektörlerinin ortalamasıyla elde edilen vektörler arasındaki kosinüs benzerliği.
Ağırlıklı Benzerlik Hesaplaması

Yukarıdaki farklı benzerlik metriklerinden elde edilen skorlar, her birinin gücüne ve ayırt ediciliğine göre belirlenmiş ağırlıklarla çarpılarak toplanır ve ardından toplam ağırlığa bölünerek nihai bir "ağırlıklı benzerlik" puanı elde edilir. Bu puan, belgeler arasındaki genel benzerliği daha kapsamlı bir şekilde yansıtır.

# Örnek Ağırlıklar (Python betiğinden) # weights = { # "jaccard": 1.0, "sequence": 0.7, "levenshtein": 0.7, # "tfidf_cosine": 1.5, "ngram_overlap": 1.2, # "topic_similarity": 1.8, "embedding_similarity": 2.0, # } # weighted_similarity = sum(score * weight for score, weight in zip(scores, weights)) / sum(weights) print("Bu kod, arka plandaki analiz betiğinde çalışır.")
4. Gelişmiş İçerik Analizi (Scikit-learn Varsa)
Derlem İçi Benzersizlik (Corpus Uniqueness)

Her belgenin, analiz edilen tüm diğer belgelerle (ve eğer kullanılıyorsa referans derlemle) olan ortalama TF-IDF kosinüs benzerliği hesaplanır. Bu ortalama benzerliğin 1'den çıkarılmasıyla "derlem içi benzersizlik" puanı elde edilir ($1 - avg\_similarity$). Yüksek puan, belgenin derlemdeki diğerlerine göre daha farklı olduğunu gösterir.

Konu Ayırt Ediciliği (Topic Distinctiveness)

LDA ile elde edilen konu dağılımının entropisi hesaplanır. Düşük entropi, belgenin belirli konulara daha net odaklandığını ve dolayısıyla konu açısından daha ayırt edici olduğunu gösterir. Bu da özgünlüğe katkıda bulunabilir ($1 - normalized\_entropy$).

Ayırt Edici Terim Analizi (Distinctive Terms)

Her belge için en yüksek TF-IDF skoruna sahip olan veya belgeye özgü olarak sık geçen (ancak tüm derlemde nadir olan) terimler belirlenir. Bu terimler, belgenin anahtar kelimelerini ve onu diğerlerinden ayıran ifadeleri temsil eder.

K-means Belge Kümeleme (Document Clustering)

Belgeler, TF-IDF vektörleri kullanılarak K-Means algoritması ile içeriksel olarak benzer gruplara (kümelere) ayrılır. Bir belgenin bulunduğu kümenin boyutu ve yoğunluğu, o belgenin ne kadar yaygın bir içeriğe sahip olduğu hakkında fikir verebilir. Küçük veya seyrek bir kümede yer almak, potansiyel özgünlüğün bir göstergesi olabilir. Sistem, küme büyüklüğüne göre bir "küme benzersizliği" puanı hesaplar.

# Örnek (Python betiğinden) # from sklearn.cluster import KMeans # kmeans = KMeans(n_clusters=k, ...) # k, belge sayısına göre belirlenir # clusters = kmeans.fit_predict(tfidf_matrix) # cluster_uniqueness = 1 - (size_of_document_s_cluster / (2 * average_cluster_size)) print("Bu kod, arka plandaki analiz betiğinde çalışır.")
5. Özgünlük Puanlaması ve Uygulama Detayları
Ağırlıklı Çok Kriterli Değerlendirme

Nihai özgünlük puanı, yukarıda bahsedilen tüm özelliklerin (leksik çeşitlilik, nadir N-gram oranı, PMI skorları, derlem içi benzersizlik, konu ayırt ediciliği, küme benzersizliği, benzerlik analizinden elde edilen benzersizlik vb.) önceden tanımlanmış ağırlıklarla çarpılıp toplanması ve ardından toplam ağırlığa bölünmesiyle hesaplanır. Her özelliğin özgünlüğe katkısı farklı olabileceğinden bu ağırlıklandırma önemlidir. Örneğin, "benzerlik analizinden elde edilen benzersizlik" (yani, bir belgenin diğerlerine ne kadar az benzediği) genellikle yüksek bir ağırlığa sahiptir.

Uzunluk Normalizasyonu (Opsiyonel)

Eğer "uzunluk normalizasyonu" aktifse, bazı özellikler (örn: ham TTR, ham hapax oranı) metin uzunluğundaki değişimlere karşı daha dirençli hale getirilmiş versiyonlarıyla (örn: ayarlanmış leksik çeşitlilik, kayan pencere hapax oranı) veya logaritmik düzeltme faktörleriyle kullanılır. Eğer bu seçenek kapalıysa, nihai özgünlük puanına, kısa metinleri cezalandırmayan ve çok uzun metinlere aşırı avantaj sağlamayan genel bir uzunluk düzeltme faktörü uygulanabilir.

# Örnek Uzunluk Düzeltme Faktörü (Python betiğinden) # if not self.normalize_by_length and "word_count" in features: # word_count = features["word_count"] # length_factor = min(1.2, max(0.8, 1.0 + math.log10(1000 / max(word_count, 100)) * 0.1)) # final_score *= length_factor print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Paralel İşleme Optimizasyonu

Çok sayıda belge analiz edilirken, özellik çıkarma gibi yoğun hesaplama gerektiren adımlar Python'un multiprocessing modülü kullanılarak paralel işlemcilerde çalıştırılabilir. Bu, özellikle CPU çekirdek sayısı fazla olan sistemlerde analiz süresini önemli ölçüde kısaltır.

# Örnek (Python betiğinden) # from multiprocessing import Pool, cpu_count # if MULTIPROCESSING_AVAILABLE and len(self.documents) > 10 and cpu_count() > 1: # n_workers = min(cpu_count(), len(tasks)) # with Pool(n_workers) as pool: # results = pool.map(feature_extraction_worker_function, tasks) print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Hata Tolerans Mekanizmaları

Sistem, analiz sırasında oluşabilecek çeşitli hatalara (örn: eksik kütüphaneler, bozuk dosyalar, beklenmedik veri formatları) karşı dayanıklı olacak şekilde tasarlanmıştır. Örneğin, bir kütüphane (örn: spaCy) bulunamazsa, daha basit alternatifler (örn: temel metin işleme) devreye girer. Dosya okuma hatalarında veya belirli bir özellik hesaplanamazsa, bu özellik atlanır ve analiz diğer özelliklerle devam eder. Bu tür durumlar loglanır.

Matematiksel Formüller ve Algoritma Detayları
PMI (Pointwise Mutual Information) Hesaplaması

PMI, iki kelimenin ($x$ ve $y$) birlikte bulunma olasılığının ($P(x,y)$), bu kelimelerin bağımsız olarak bulunma olasılıklarının çarpımına ($P(x)P(y)$) oranının logaritması olarak hesaplanır. Bu, kelimeler arasındaki istatistiksel bağımlılığı ölçer.

$PMI(x,y) = \log_2\left( \frac{P(x,y)}{P(x)P(y)} \right)$

Burada olasılıklar şu şekilde tahmin edilir:

  • $P(x,y) = \frac{\text{count}(x,y)}{N_{pairs}}$ (x ve y'nin birlikte geçtiği çift sayısı / toplam kelime çifti sayısı)
  • $P(x) = \frac{\text{count}(x)}{N_{words}}$ (x kelimesinin toplam sayısı / toplam kelime sayısı)
  • $P(y) = \frac{\text{count}(y)}{N_{words}}$ (y kelimesinin toplam sayısı / toplam kelime sayısı)

Pozitif PMI (PPMI) değerleri genellikle daha anlamlı ilişkileri gösterir, bu yüzden bazen $max(0, PMI(x,y))$ kullanılır.

# Python betiğinden örnek # p_xy = pair_count / len(word_pairs) # p_x = word_counts[word1] / total_words # p_y = word_counts[word2] / total_words # if p_x > 0 and p_y > 0 and p_xy > 0: # pmi = math.log2(p_xy / (p_x * p_y)) # else: # pmi = 0 # veya negatif sonsuz, duruma göre print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Kosinüs Benzerliği

İki belge vektörü ($\vec{v_1}$ ve $\vec{v_2}$, genellikle TF-IDF veya gömme vektörleri) arasındaki açının kosinüsü olarak hesaplanır. Değer -1 (tamamen zıt) ile 1 (tamamen aynı) arasında değişir. 0, dik (ilişkisiz) anlamına gelir.

$\cos(\theta) = \frac{\vec{v_1} \cdot \vec{v_2}}{||\vec{v_1}|| \cdot ||\vec{v_2}||} = \frac{\sum_{i=1}^{n} v_{1i} v_{2i}}{\sqrt{\sum_{i=1}^{n} v_{1i}^2} \sqrt{\sum_{i=1}^{n} v_{2i}^2}}$

Burada:

  • $\vec{v_1} \cdot \vec{v_2}$: İki vektörün nokta çarpımı (iç çarpımı).
  • $||\vec{v_1}||$ ve $||\vec{v_2}||$: Vektörlerin Öklid normları (uzunlukları).
# Python betiğinden örnek (NumPy ile) # import numpy as np # def cosine_sim(v1, v2): # dot_product = np.dot(v1, v2) # norm_v1 = np.linalg.norm(v1) # norm_v2 = np.linalg.norm(v2) # if norm_v1 > 0 and norm_v2 > 0: # return dot_product / (norm_v1 * norm_v2) # return 0.0 # sklearn.metrics.pairwise.cosine_similarity bu işi yapar. print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Özellik Ağırlıklı Özgünlük Puanı

Özgünlük puanı ($S_{orig}$), hesaplanan $k$ farklı özelliğin ($f_1, f_2, ..., f_k$) her birinin bir ağırlık ($w_i$) ile çarpılıp toplanması ve bu toplamın ağırlıklar toplamına bölünmesiyle elde edilir. Tüm özellik değerleri genellikle [0,1] aralığına normalize edilir.

$S_{orig} = \frac{\sum_{i=1}^{k} (f_i \cdot w_i)}{\sum_{i=1}^{k} w_i}$

Ağırlıklar ($w_i$), her bir özelliğin genel özgünlüğe ne kadar katkıda bulunduğuna dair uzman bilgisi veya deneysel ayarlamalarla belirlenir. Örnek ağırlıklar (sistemdeki betikten):

# weights = { # "adjusted_lexical_diversity": 1.2, # "adjusted_hapax_ratio": 1.0, # "unique_pos_patterns": 0.8, # spaCy gerektirir # "avg_pmi_score": 1.5, # "pmi_diversity": 1.3, # "rare_ngram_ratio": 1.0, # "corpus_uniqueness": 1.5, # scikit-learn gerektirir # "topic_distinctiveness": 1.5, # scikit-learn gerektirir # "cluster_uniqueness": 1.0, # scikit-learn gerektirir # "uniqueness_from_similarity": 2.0, # En önemli faktörlerden biri # } # Eğer bazı kütüphaneler yoksa, ilgili özellikler ve ağırlıkları dinamik olarak ayarlanır. print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Entropi Hesaplaması (Konu Ayırt Ediciliği İçin)

Bir belgenin $N_T$ farklı konuya ait olma olasılıkları $p_1, p_2, ..., p_{N_T}$ ise (LDA modelinden elde edilir, $\sum p_i = 1$), bu olasılık dağılımının Shannon entropisi ($H$) hesaplanır:

$H(P) = -\sum_{i=1}^{N_T} p_i \log_b(p_i)$

Burada $b$ genellikle 2 (bit cinsinden entropi) veya $e$ (nat cinsinden) veya $N_T$ (normalize entropi için) olabilir. $p_i=0$ ise $p_i \log(p_i)$ terimi 0 olarak alınır. Entropi, dağılımın belirsizliğini veya "düzlüğünü" ölçer. Yüksek entropi, belgenin birçok konuya eşit şekilde dağıldığını (konu odağının belirsiz olduğunu), düşük entropi ise belgenin az sayıda konuya net bir şekilde odaklandığını gösterir. Konu ayırt ediciliği genellikle $1 - H_{norm}$ olarak hesaplanır, burada $H_{norm} = \frac{H(P)}{\log_b(N_T)}$ normalize edilmiş entropidir ve [0,1] aralığındadır.

# Python betiğinden örnek # import math # topic_dist = [...] # LDA'dan gelen konu olasılıkları # n_topics = len(topic_dist) # entropy = -sum([p * math.log(p + 1e-10) for p in topic_dist if p > 0]) # 1e-10 log(0) hatasını önlemek için # if n_topics > 1: # normalized_entropy = entropy / math.log(n_topics) # else: # normalized_entropy = 0 # topic_distinctiveness = 1 - normalized_entropy print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Doğal Dil İşleme Teknikleri ve Bileşenleri (Arka Plan Betiğinde Kullanılanlar)
SpaCy NLP Pipeline

Arka plandaki analiz betiği, metinleri işlemek için (eğer yüklüyse) SpaCy kütüphanesini kullanır. SpaCy, bir dizi önceden eğitilmiş boru hattı (pipeline) sunar. Bu sistemde genellikle şu bileşenler kullanılır:

  • Tokmak (Tokenizer): Metni kelimeler, noktalama işaretleri gibi bireysel "jetonlara" (token) ayırır.
  • Etiketleyici (Tagger): Her jetona bir sözcük türü (POS - Part-of-Speech: isim, fiil, sıfat vb.) atar.
  • Ayrıştırıcı (Parser): Kelimeler arasındaki dilbilgisel bağımlılıkları (dependency parsing) belirleyerek cümlenin yapısını analiz eder.
  • Adlandırılmış Varlık Tanıyıcı (NER - Named Entity Recognizer): Metindeki kişi adları, yerler, kurumlar, tarihler gibi özel varlıkları tanır.
  • Lemmatizer: Kelimeleri temel kök formlarına (lemma) indirger (örn: "gidiyorum" -> "gitmek"). Bu, kelime dağarcığı analizlerinde tutarlılık sağlar.
  • Kelime Vektörleri (Word Vectors): Eğer SpaCy'nin "md" (medium) veya "lg" (large) gibi vektör içeren bir modeli kullanılıyorsa, her kelime ve belge için anlamsal bir vektör temsili elde edilebilir. Bu, semantik benzerlik hesaplamalarında kullanılır.

Kullanılan SpaCy modelleri (betikteki öncelik sırasına göre):

  • tr_core_news_md: Türkçe için orta boyutta, vektör içeren model. (Öncelikli)
  • en_core_web_md: İngilizce için orta boyutta, vektör içeren model. (Türkçe model bulunamazsa veya farklı dilde metinler için yedek)
  • Basit Dil İşleyici: Yukarıdaki modeller bulunamazsa, SpaCy'nin temel English() sınıfı veya NLTK gibi alternatifler kullanılarak sadece tokenizasyon ve cümle bölme gibi temel işlemler yapılır.
# Python betiğinden örnek model yükleme mantığı # try: # nlp = spacy.load("tr_core_news_md") # except OSError: # try: # nlp = spacy.load("en_core_web_md") # except OSError: # from spacy.lang.en import English # nlp = English() # if "sentencizer" not in nlp.pipe_names: # nlp.add_pipe("sentencizer") print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Dilbilimsel Özellik Çıkarımı (SpaCy ile)
Benzersiz Sözcük Türü Kalıpları (Unique POS Patterns)

Her cümledeki kelimelerin sözcük türleri (NOUN-VERB-ADJ vb.) birleştirilerek bir kalıp oluşturulur (örn: "NOUN-VERB-NOUN-PUNCT"). Metindeki bu tür benzersiz kalıpların toplam kalıp sayısına oranı hesaplanır. Yüksek oran, yazarın çeşitli cümle yapıları kullandığını gösterebilir.

# Python betiğinden örnek mantık # patterns = [] # for sent in doc.sents: # doc, SpaCy'nin işlediği metin # pattern = "-".join([token.pos_ for token in sent if not token.is_space]) # patterns.append(pattern) # unique_pos_patterns_ratio = len(set(patterns)) / len(patterns) if patterns else 0 print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Adlandırılmış Varlık Oranı (Named Entity Ratio)

SpaCy'nin NER bileşeni tarafından tanınan toplam adlandırılmış varlık sayısının (kişi, yer, kurum vb.) metindeki toplam kelime sayısına oranıdır. Bazı metin türlerinde (örn: haberler, biyografiler) bu oranın yüksek olması doğaldır, ancak yazarın ne kadar spesifik bilgi kullandığına dair bir fikir verebilir.

# Python betiğinden örnek mantık # entities = list(doc.ents) # doc, SpaCy'nin işlediği metin # total_words = len([token for token in doc if not token.is_punct and not token.is_space]) # named_entity_ratio = len(entities) / total_words if total_words > 0 else 0 print("Bu kod, arka plandaki analiz betiğinde çalışır.")
N-gram Analizi ve İstatistiksel Dil Modelleme

N-gramlar, metindeki ardışık N kelimeden oluşan dizilerdir (örn: "çok güzel bir gün" -> bigramlar: "çok güzel", "güzel bir", "bir gün").

  • N-gram Çıkarımı: Metinden 1-gram (unigram, yani tekil kelimeler), 2-gram (bigram) ve 3-gram (trigram) gibi N-gramlar çıkarılır.
  • Frekans Analizi: Her N-gramın metin içinde ne kadar sık geçtiği sayılır.
  • Nadir N-gram Oranı: Özellikle sadece bir veya iki kez geçen "nadir" N-gramların toplam N-gram sayısına oranı hesaplanır. Bir metinde çok sayıda nadir N-gram bulunması, metnin klişelerden uzak, özgün ifadelere sahip olabileceğine işaret edebilir.
# Python betiğinden örnek N-gram çıkarma mantığı (basitleştirilmiş) # from collections import Counter # words = [token.lemma_.lower() for token in doc if not token.is_punct and not token.is_space] # Lemmatize edilmiş kelimeler # bigrams = [] # for i in range(len(words) - 1): # bigrams.append(tuple(words[i:i+2])) # bigram_counts = Counter(bigrams) # rare_bigram_count = sum(1 for count in bigram_counts.values() if count == 1) # rare_bigram_ratio = rare_bigram_count / len(bigram_counts) if bigram_counts else 0 print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Konu Modelleme (Topic Modeling - Scikit-learn ile)

Konu modelleme, bir belge koleksiyonundaki gizli anlamsal yapıları (yani "konuları") keşfetmek için kullanılan istatistiksel bir yöntemdir. En yaygın algoritmalardan biri LDA'dır (Latent Dirichlet Allocation).

  • Belge-Terim Matrisi Oluşturma: Genellikle TF-IDF ile ağırlıklandırılmış bir belge-terim matrisi (her satır bir belge, her sütun bir terim, hücreler terimin belgedeki TF-IDF değeri) oluşturulur.
  • LDA Modelini Eğitme: LDA modeli, bu matris üzerinde eğitilerek belirli sayıda ($k$) konu keşfeder. Her konu, belirli kelimelerin bir olasılık dağılımı ile temsil edilir (örn: "teknoloji" konusu "bilgisayar", "yazılım", "veri" gibi kelimelerle yüksek olasılıklara sahip olabilir).
  • Belgelerin Konu Dağılımlarını Elde Etme: Model eğitildikten sonra, her belge için bu $k$ konuya ne kadar ait olduğunu gösteren bir olasılık dağılımı (vektör) elde edilir.
  • Konu Benzerliği ve Ayırt Ediciliği: İki belgenin konu dağılım vektörleri arasındaki kosinüs benzerliği, anlamsal konu benzerliğini ölçer. Bir belgenin konu dağılımının entropisi ise "konu ayırt ediciliğini" (düşük entropi = daha ayırt edici) gösterir.
# Python betiğinden örnek LDA kullanımı (scikit-learn ile) # from sklearn.feature_extraction.text import TfidfVectorizer # from sklearn.decomposition import LatentDirichletAllocation # corpus_texts = [doc.text for doc in all_documents] # Tüm belgelerin metinleri # vectorizer = TfidfVectorizer(max_df=0.9, min_df=2, stop_words=my_stop_words_list) # tfidf_matrix = vectorizer.fit_transform(corpus_texts) # num_topics = min(5, len(all_documents) // 2) # Örnek konu sayısı belirleme # lda = LatentDirichletAllocation(n_components=num_topics, random_state=42) # document_topic_distributions = lda.fit_transform(tfidf_matrix) print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Performans ve Doğruluk Değerlendirmesi
Performans Optimizasyonları
Paralel İşleme (Multiprocessing)

Özellikle çok sayıda belge analiz edilirken, her bir belge için özellik çıkarma işlemi bağımsız olarak yapılabilir. Python'un multiprocessing.Pool sınıfı kullanılarak bu işlemler birden fazla CPU çekirdeğine dağıtılır, bu da toplam analiz süresini önemli ölçüde azaltır. Arka plandaki analiz betiği, uygun koşullarda (yeterli belge sayısı ve CPU çekirdeği varsa) bu özelliği kullanır.

# Python betiğinden örnek multiprocessing mantığı # from multiprocessing import Pool, cpu_count # def process_single_document(document_text): # # ... özellik çıkarma işlemleri ... # return extracted_features # # if use_multiprocessing: # tasks = [doc.text for doc in all_documents] # with Pool(processes=min(cpu_count(), 4)) as pool: # Örn: en fazla 4 çekirdek kullan # list_of_features = pool.map(process_single_document, tasks) # else: # list_of_features = [process_single_document(doc.text) for doc in all_documents] print("Bu kod, arka plandaki analiz betiğinde çalışır.")
Bellek Optimizasyonu ve Örnekleme
  • Akıllı Örnekleme: Çok büyük metin dosyaları için tüm metni işlemek yerine, metnin başından, ortasından ve sonundan belirli bir boyutta (örn: toplamda 5000 kelime) örnekler alınarak analiz yapılır. Bu, bellek kullanımını sınırlar ve işlem süresini kısaltırken metnin genel karakteristiğini korumaya çalışır.
  • SpaCy Bellek Sınırlaması: SpaCy ile çok büyük metinler işlenirken (örn: 1 milyondan fazla karakter), nlp(text[:MAX_CHARS_FOR_SPACY]) gibi bir sınırlama getirilebilir. Arka plan betiği, SpaCy'nin nlp.max_length özelliğini dikkate alır veya kendi sınırlarını uygular.
  • Gereksiz Veri Tutmama: Analiz adımları sırasında artık ihtiyaç duyulmayan büyük veri yapıları (örn: tam metinler, geçici matrisler) bellekten serbest bırakılır.
Hata Toleransı ve Yedek Mekanizmalar

Sistem, çeşitli hata durumlarına karşı dayanıklıdır:

  • Eksik Kütüphaneler: SpaCy veya Scikit-learn gibi bazı kütüphaneler sistemde yüklü değilse, bu kütüphaneleri gerektiren özellikler atlanır ve analiz geri kalan özelliklerle devam eder. Bu durum kullanıcıya bildirilir veya loglanır.
  • Dosya İşleme Hataları: Bozuk PDF dosyaları veya beklenmedik karakter kodlamasına sahip TXT dosyaları gibi durumlarda, sistem dosyayı atlayarak veya temel metin çıkarma yöntemlerini deneyerek devam etmeye çalışır.
  • Paralel İşleme Hataları: Multiprocessing sırasında bir alt işlemde hata oluşursa, bu hata yakalanır ve loglanır. Mümkünse, sistem seri işlemeye geri dönebilir veya hatalı belgeyi atlayabilir.
  • Otomatik Kodlama Tespiti: TXT dosyaları okunurken önce UTF-8 denenir; başarısız olursa latin-1, cp1254 (Türkçe Windows), iso-8859-9 (Türkçe ISO) gibi yaygın diğer kodlamalar denenir.
Doğruluk ve Güvenilirlik Üzerine Notlar

Metin özgünlük analizi karmaşık bir problemdir ve %100 kesinlik sağlamak mümkün değildir. Bu sistem, mevcut en iyi uygulamaları ve çeşitli metrikleri kullanarak kapsamlı bir değerlendirme sunmayı amaçlar. Ancak, sonuçların yorumlanmasında dikkatli olunmalıdır:

  1. Metriklerin Sınırlılıkları: Her metriğin (TTR, PMI, kosinüs benzerliği vb.) kendi güçlü ve zayıf yönleri vardır. Sistem, bu metrikleri birleştirerek daha dengeli bir sonuç elde etmeye çalışır.
  2. Bağlamın Önemi: Bir metnin "özgünlüğü" büyük ölçüde bağlama bağlıdır. Örneğin, teknik bir rapordaki terminoloji tekrarı, edebi bir eserdeki tekrarla aynı şekilde yorumlanmamalıdır.
  3. Yazar Stili vs. İntihal: Sistem, dilsel kalıpları analiz eder. Bazen bir yazarın kendine özgü stili, başka bir metinden alıntı yapılmış gibi görünebilir (veya tam tersi). İntihal tespiti için ek, daha odaklı araçlar gerekebilir. Bu sistem genel bir özgünlük ve stilistik benzersizlik değerlendirmesi yapar.
  4. Referans Derlemin Kalitesi: Eğer referans derlem kullanılıyorsa, bu derlemin kalitesi ve kapsamı sonuçları etkileyecektir. İyi yapılandırılmış ve çeşitli bir referans derlem, daha anlamlı karşılaştırmalar sağlar.
  5. Türkçe Dilinin Özellikleri: Sistem, Türkçe'nin eklemeli yapısını ve dilbilimsel özelliklerini dikkate alan SpaCy modelleri ve analiz yöntemleri kullanmaya çalışır. Ancak, özellikle morfolojik analiz ve anlam çıkarma konuları Türkçe için hala aktif araştırma alanlarıdır.

Bu sistem, bir metnin potansiyel özgünlük seviyesi hakkında güçlü bir gösterge sunar ve farklı metinleri karşılaştırmak için yararlı bir araçtır. Nihai karar ve yorum her zaman insan uzmanlığına dayanmalıdır.

Teknik Özellikler
  • Desteklenen Dosya Formatları: PDF ve TXT
  • Maksimum Dosya Boyutu: 2GB (toplam, sunucu ve Flask yapılandırmasına bağlı)
  • Desteklenen Diller: Türkçe (birincil) ve İngilizce (spaCy modelleriyle). Diğer diller için temel metin işleme.
  • Temel Algoritma Teknolojileri: Doğal Dil İşleme (NLP), İstatistiksel Analiz, Bilgi Teorisi.
  • Kullanılan Ana Kütüphaneler (Arka Plan Betiğinde): spaCy, scikit-learn (opsiyonel, varsa daha fazla özellik), NLTK (spaCy yoksa bazı yedekler için), PyPDF2, TextSTAT (opsiyonel).
  • Temel Matematiksel İşlemler: Vektör Hesaplamaları (Kosinüs Benzerliği), Olasılık ve Frekans Dağılımları, Entropi Analizi, Noktalararası Karşılıklı Bilgi (PMI).
  • Karşılaştırma Yöntemleri: Jaccard Benzerliği, Kosinüs Benzerliği (TF-IDF ve Gömme Vektörleri ile), Levenshtein Benzerliği (yaklaşık), N-gram Örtüşmesi, Konu Modellemesi (LDA).
  • Paralel İşleme: Çoklu CPU çekirdeği kullanarak özellik çıkarma adımında hızlandırma (uygunsa).
  • Özelleştirilmiş Türkçe Dil Desteği: Türkçe spaCy modelleri ve Türkçe'ye uygun analizlere öncelik verilir.
  • Referans Derlem: Admin tarafından yönetilebilen, karşılaştırma için kullanılabilen kalıcı bir metin koleksiyonu.