Tüm Yazılar
KategoriAI & ML
Okuma Süresi
23 dk okuma
Yayın Tarihi
...
Kelime Sayısı
1.427kelime

Kahveni hazırla - bu içerikli bir makale!

Apple Natural Language framework ile metin analizi, duygu analizi, dil tespiti, tokenization ve named entity recognition.

iOS Natural Language Framework Rehberi

# 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


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 NaturalLanguage
2 
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.rawValue
15 }
16 
17 func detectLanguageWithConfidence(text: String) -> [(NLLanguage, Double)] {
18 recognizer.reset()
19 recognizer.processString(text)
20 
21 // En yuksek 5 olasilik
22 let hypotheses = recognizer.languageHypotheses(withMaximum: 5)
23 
24 return hypotheses.sorted { item1, item2 in
25 item1.value > item2.value
26 }
27 }
28 
29 // Coklu dil tespiti
30 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// Kullanim
41let 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 NaturalLanguage
2 
3class TextTokenizer {
4 // Kelime bazinda tokenization
5 func tokenizeWords(text: String) -> [String] {
6 let tokenizer = NLTokenizer(unit: .word)
7 tokenizer.string = text
8 
9 var tokens: [String] = []
10 tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
11 tokens.append(String(text[range]))
12 return true
13 }
14 
15 return tokens
16 }
17 
18 // Cumle bazinda tokenization
19 func tokenizeSentences(text: String) -> [String] {
20 let tokenizer = NLTokenizer(unit: .sentence)
21 tokenizer.string = text
22 
23 var sentences: [String] = []
24 tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
25 sentences.append(String(text[range]))
26 return true
27 }
28 
29 return sentences
30 }
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 NaturalLanguage
2 
3func lemmatize(text: String) -> [(String, String)] {
4 let tagger = NLTagger(tagSchemes: [.lemma])
5 tagger.string = text
6 
7 var results: [(String, String)] = []
8 
9 tagger.enumerateTags(
10 in: text.startIndex..<text.endIndex,
11 unit: .word,
12 scheme: .lemma
13 ) { tag, range in
14 let word = String(text[range])
15 let lemma = tag?.rawValue ?? word
16 results.append((word, lemma))
17 return true
18 }
19 
20 return results
21}
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 NaturalLanguage
2 
3struct NamedEntity {
4 let text: String
5 let type: NLTag
6 let range: Range<String.Index>
7}
8 
9func extractEntities(from text: String) -> [NamedEntity] {
10 let tagger = NLTagger(tagSchemes: [.nameType])
11 tagger.string = text
12 
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: options
21 ) { tag, range in
22 if let tag = tag,
23 tag != .otherWord {
24 entities.append(NamedEntity(
25 text: String(text[range]),
26 type: tag,
27 range: range
28 ))
29 }
30 return true
31 }
32 
33 return entities
34}
35 
36// Kullanim
37let 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 NaturalLanguage
2 
3class SentimentAnalyzer {
4 private let tagger = NLTagger(tagSchemes: [.sentimentScore])
5 
6 func analyzeSentiment(text: String) -> Double {
7 tagger.string = text
8 
9 let (tag, _) = tagger.tag(
10 at: text.startIndex,
11 unit: .paragraph,
12 scheme: .sentimentScore
13 )
14 
15 return Double(tag?.rawValue ?? "0") ?? 0.0
16 }
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 NaturalLanguage
2 
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 in
10 results.append((neighbor, distance))
11 return true
12 }
13 
14 return results
15}
16 
17// "swift" kelimesine benzer kelimeler
18let 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.

Etiketler

#NLP#Natural Language#Text Analysis#iOS#Machine Learning#Swift
Muhittin Çamdalı

Muhittin Çamdalı

Senior iOS Developer

12+ yıllık deneyime sahip iOS Developer. Swift, SwiftUI ve modern iOS mimarileri konusunda uzman. Apple platformlarında performanslı ve kullanıcı dostu uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

Bunu da begenebilirsiniz