# iOS Natural Language Framework ile Metin Analizi
Dogal dil isleme (NLP), mobil uygulamalarin en heyecan verici alanlarindan biridir. Apple'in Natural Language framework'u, metin analizi icin guclu ve kullanimi kolay API'ler sunar. Dil tespitinden duygu analizine, tokenization'dan named entity recognition'a kadar pek cok isi cihaz uzerinde, hizli ve gizlilik dostu bir sekilde yapabilirsiniz.
"Dil, insanlarin en dogal arayuzudur. Onu anlayan uygulamalar, kullanicilarla gercekten iletisim kurabilir." — NLP in Practice
Icindekiler
- Natural Language Framework Nedir?
- Dil Tespiti
- Tokenization
- Lemmatization
- Named Entity Recognition
- Duygu Analizi
- Embedding ve Benzerlik
- Custom NLP Modelleri
- Pratik Uygulama Ornekleri
- Okuyucu Odulu
- Sonuc
1. Natural Language Framework Nedir?
Natural Language framework, iOS 12+ ile kullanilabilen Apple'in NLP kutuphanesidir. Tum islemler on-device olarak gerceklesir.
NLP Islemleri Karsilastirmasi
Islem | Aciklama | Performans | Desteklenen Dil |
|---|---|---|---|
Language ID | Dil tespiti | <1ms | 60+ dil |
Tokenization | Kelime/cumle ayirma | <1ms | Tum diller |
Lemmatization | Kok bulma | 1-2ms | 10+ dil |
NER | Varlik tespiti | 2-5ms | 7+ dil |
Sentiment | Duygu analizi | 1-3ms | 7+ dil |
Embedding | Vektorel temsil | 5-10ms | 7+ dil |
2. Dil Tespiti (Language Identification)
swift
1import NaturalLanguage2 3class LanguageDetector {4 private let recognizer = NLLanguageRecognizer()5 6 func detectLanguage(text: String) -> String {7 recognizer.reset()8 recognizer.processString(text)9 10 guard let language = recognizer.dominantLanguage else {11 return "Bilinmiyor"12 }13 14 return language.rawValue15 }16 17 func detectLanguageWithConfidence(text: String) -> [(NLLanguage, Double)] {18 recognizer.reset()19 recognizer.processString(text)20 21 // En yuksek 5 olasilik22 let hypotheses = recognizer.languageHypotheses(withMaximum: 5)23 24 return hypotheses.sorted { item1, item2 in25 item1.value > item2.value26 }27 }28 29 // Coklu dil tespiti30 func detectMultipleLanguages(text: String) -> [NLLanguage] {31 recognizer.reset()32 recognizer.processString(text)33 34 return recognizer.languageHypotheses(withMaximum: 3)35 .filter { pair in pair.value > 0.1 }36 .map { pair in pair.key }37 }38}39 40// Kullanim41let detector = LanguageDetector()42let lang = detector.detectLanguage(text: "Merhaba dunya, nasilsiniz?")43print("Tespit edilen dil: \(lang)") // "tr"Dil tespiti son derece hizlidir ve 60'tan fazla dili destekler. Kisa metinlerde bile yuksek dogruluk saglar.
3. Tokenization
Tokenization, metni anlamli birimlere (kelime, cumle, paragraf) ayirma islemidir.
swift
1import NaturalLanguage2 3class TextTokenizer {4 // Kelime bazinda tokenization5 func tokenizeWords(text: String) -> [String] {6 let tokenizer = NLTokenizer(unit: .word)7 tokenizer.string = text8 9 var tokens: [String] = []10 tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in11 tokens.append(String(text[range]))12 return true13 }14 15 return tokens16 }17 18 // Cumle bazinda tokenization19 func tokenizeSentences(text: String) -> [String] {20 let tokenizer = NLTokenizer(unit: .sentence)21 tokenizer.string = text22 23 var sentences: [String] = []24 tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in25 sentences.append(String(text[range]))26 return true27 }28 29 return sentences30 }31}32 33let tokenizer = TextTokenizer()34let words = tokenizer.tokenizeWords(text: "Swift ile NLP uygulamasi gelistiriyoruz.")35print(words) // ["Swift", "ile", "NLP", "uygulamasi", "gelistiriyoruz"]4. Lemmatization
Lemmatization, kelimelerin kok halini bulma islemidir. Turkce gibi sondan eklemeli dillerde cok faydalidir.
swift
1import NaturalLanguage2 3func lemmatize(text: String) -> [(String, String)] {4 let tagger = NLTagger(tagSchemes: [.lemma])5 tagger.string = text6 7 var results: [(String, String)] = []8 9 tagger.enumerateTags(10 in: text.startIndex..<text.endIndex,11 unit: .word,12 scheme: .lemma13 ) { tag, range in14 let word = String(text[range])15 let lemma = tag?.rawValue ?? word16 results.append((word, lemma))17 return true18 }19 20 return results21}22 23let results = lemmatize(text: "The cats were running quickly")24// [("cats", "cat"), ("were", "be"), ("running", "run"), ("quickly", "quickly")]5. Named Entity Recognition (NER)
NER, metindeki kisi, yer, organizasyon gibi varliklari tespit eder.
swift
1import NaturalLanguage2 3struct NamedEntity {4 let text: String5 let type: NLTag6 let range: Range<String.Index>7}8 9func extractEntities(from text: String) -> [NamedEntity] {10 let tagger = NLTagger(tagSchemes: [.nameType])11 tagger.string = text12 13 let options: NLTagger.Options = [.omitPunctuation, .omitWhitespace]14 var entities: [NamedEntity] = []15 16 tagger.enumerateTags(17 in: text.startIndex..<text.endIndex,18 unit: .word,19 scheme: .nameType,20 options: options21 ) { tag, range in22 if let tag = tag,23 tag != .otherWord {24 entities.append(NamedEntity(25 text: String(text[range]),26 type: tag,27 range: range28 ))29 }30 return true31 }32 33 return entities34}35 36// Kullanim37let entities = extractEntities(from: "Apple CEO Tim Cook San Francisco'da konustu")38// [("Apple", .organizationName), ("Tim Cook", .personalName), ("San Francisco", .placeName)]Easter Egg
Gizli bir bilgi buldun!
Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?
6. Duygu Analizi (Sentiment Analysis)
swift
1import NaturalLanguage2 3class SentimentAnalyzer {4 private let tagger = NLTagger(tagSchemes: [.sentimentScore])5 6 func analyzeSentiment(text: String) -> Double {7 tagger.string = text8 9 let (tag, _) = tagger.tag(10 at: text.startIndex,11 unit: .paragraph,12 scheme: .sentimentScore13 )14 15 return Double(tag?.rawValue ?? "0") ?? 0.016 }17 18 func categorizeSentiment(text: String) -> String {19 let score = analyzeSentiment(text: text)20 21 switch score {22 case 0.5...:23 return "Cok Pozitif"24 case 0.1..<0.5:25 return "Pozitif"26 case -0.1..<0.1:27 return "Notr"28 case -0.5 ..< -0.1:29 return "Negatif"30 default:31 return "Cok Negatif"32 }33 }34}35 36let analyzer = SentimentAnalyzer()37let sentiment = analyzer.categorizeSentiment(text: "Bu urun gercekten harika!")38print(sentiment) // "Cok Pozitif"7. Embedding ve Metin Benzerligi
Word embedding, kelimeleri anlamsal vektorlere donusturur. Bu sayede kelimeler arasi benzerlik hesaplanabilir.
swift
1import NaturalLanguage2 3func findSimilarWords(to word: String, count: Int = 5) -> [(String, Double)] {4 guard let embedding = NLEmbedding.wordEmbedding(for: .english) else {5 return []6 }7 8 var results: [(String, Double)] = []9 embedding.enumerateNeighbors(for: word, maximumCount: count) { neighbor, distance in10 results.append((neighbor, distance))11 return true12 }13 14 return results15}16 17// "swift" kelimesine benzer kelimeler18let similar = findSimilarWords(to: "swift")19// [("fast", 0.3), ("quick", 0.35), ("rapid", 0.4), ...]8. Custom NLP Modelleri
Create ML ile egittiginiz text classification modelini Natural Language framework ile kullanabilirsiniz.
9. Pratik Uygulama Ornekleri
Akilli Arama
Kullanici sorgularini NLP ile zenginlestirerek daha iyi arama sonuclari sunabilirsiniz. Tokenization + lemmatization + embedding kombinasyonu ile semantik arama mumkun olur.
Icerik Filtreleme
Uygunsuz icerik tespiti icin sentiment analysis ve custom text classifier birlikte kullanilabilir.
Otomatik Etiketleme
NER ile blog yazilarindaki kisi, yer ve kurum isimlerini otomatik tespit edip etiket olarak ekleyebilirsiniz.
ALTIN İPUCU
Bu yazının en değerli bilgisi
Bu ipucu, yazının en önemli çıkarımını içeriyor.
Okuyucu Ödülü
Tebrikler! Bu yazıyı sonuna kadar okuduğun için sana özel bir hediyem var:
Sonuç ve Öneriler
Natural Language framework, iOS uygulamalarina metin zekasi katmanin en etkili ve gizlilik dostu yoludur. Tum islemler tamamen on-device calisir, internet baglantisi gerektirmez ve kullanici verilerini cihaz disina gondermez. Bu da KVKK ve GDPR gibi veri koruma yasalarina uyumlulugu kolaylastirir. Dil tespiti, tokenization, sentiment analysis ve named entity recognition gibi temel NLP islemlerini tek bir framework ile gerceklestirebilirsiniz.
Uygulamaniza NLP ozellikleri eklerken kademeli bir yaklasim benimseyin. Oncelikle dil tespiti ve basit tokenization ile baslayin, ardindan sentiment analysis ve entity recognition ekleyin. Custom model egitimi icin Create ML ile kendi veri setinizi olusturun ve Transfer Learning'den yararlanin. NLP sonuclarini her zaman kullanici deneyimini iyilestirmek icin kullanin — ornegin akilli arama onerileri, otomatik kategorizasyon veya icerik filtreleme gibi somut faydalar sunun.
Son olarak, NLP islemlerinin performans etkisini goz ardi etmeyin. Buyuk metin bloklarini analiz ederken background thread kullanin, sonuclari cache'leyin ve gereksiz tekrar islemlerden kacinin. Embedding model boyutunu uygulamanizin ihtiyaclarina gore secin — daha kucuk modeller daha hizlidir ancak daha az nuansli sonuclar verir. Kullanici geri bildirimlerini toplayarak NLP ozelliklerinizi surekli iyilestirin.

