NLP / NaturalLanguage: cos'è, il framework di elaborazione del testo in iOS

Autore: IT Sectr Pubblicato: 2026-07-19 Tempo di lettura: 8 min

NaturalLanguage è un framework Apple per l'elaborazione del linguaggio naturale su dispositivi iOS e macOS, che fornisce accesso a tokenizzazione, riconoscimento della lingua, etichettatura delle parti del discorso, lemmatizzazione e riconoscimento di entità nominate. Secondo Apple WWDC 2020, il framework esegue tutta l'analisi sul dispositivo, senza inviare dati a un server, garantendo la privacy dei dati dell'utente. NaturalLanguage supporta oltre 30 lingue e si integra con Core ML per modelli NLP personalizzati.

Punti Chiave

  • NaturalLanguage è un framework NLP su dispositivo di Apple che funziona senza inviare dati al cloud.
  • Supporta tokenizzazione, riconoscimento della lingua, lemmatizzazione, etichettatura delle parti del discorso e NER.
  • Funziona con oltre 30 lingue, tra cui russo, inglese, cinese e arabo.
  • NLTokenizer suddivide il testo in parole, frasi, paragrafi e documenti.
  • NLLanguageRecognizer determina la lingua del testo con probabilità per ciascuna opzione.

Cos'è NaturalLanguage in iOS?

NaturalLanguage (NL) è un framework di apprendimento automatico di Apple per l'analisi del linguaggio naturale, parte di Foundation e disponibile su iOS 12+, macOS 10.14+ e watchOS 5+. Il framework fornisce capacità NLP pronte all'uso senza la necessità di addestrare modelli personalizzati.

A differenza dei servizi NLP cloud (Google Cloud NLP, Amazon Comprehend), NaturalLanguage esegue tutta l'analisi sul dispositivo. Ciò significa latenza di rete zero, funzionamento offline e completa privacy dei dati — il testo non lascia mai il dispositivo dell'utente.

Secondo Apple ML Research 2023, il NLP su dispositivo su chip A12+ elabora le richieste 3–5 volte più velocemente rispetto a soluzioni cloud simili, mantenendo una precisione superiore all'85% per le attività di base. Il framework è ottimizzato per Neural Engine, in grado di elaborare fino a 100 richieste al secondo sui dispositivi moderni.

NaturalLanguage viene utilizzato nelle applicazioni iOS per l'analisi delle recensioni, la ricerca intelligente, il completamento automatico, la moderazione dei contenuti e l'estrazione di dati strutturati da testo non strutturato. Il framework supporta oltre 30 lingue, tra cui russo, ucraino, turco e arabo.

Tokenizzazione del testo con NLTokenizer

NLTokenizer è una classe per suddividere il testo in unità linguistiche: parole, frasi, paragrafi o documenti. La tokenizzazione è il primo passo di praticamente qualsiasi pipeline NLP e NaturalLanguage la fornisce pronta all'uso.

NLTokenizer tiene conto delle caratteristiche specifiche della lingua: gestisce correttamente la tokenizzazione per il giapponese (nessuno spazio tra le parole), l'arabo (scrittura da destra a sinistra) e il cinese (scrittura logografica). Per inglese e russo, il tokenizzatore funziona per spazi e punteggiatura, ma tiene conto delle contrazioni (don't → do + n't).

swift
import NaturalLanguage

let text = "NaturalLanguage processes text on-device. It supports 30+ languages!"
let tokenizer = NLTokenizer(unit: .word)
tokenizer.string = text

tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
    print(text[range])
    return true
}

La tokenizzazione a livello di frasi è utile per suddividere testi grandi in blocchi logici prima dell'analisi successiva. NLTokenizer determinerà i confini delle frasi anche quando non c'è un punto alla fine o quando sono presenti frasi interrogative.

swift
let sentenceTokenizer = NLTokenizer(unit: .sentence)
sentenceTokenizer.string = text

sentenceTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
    print("Sentence: \\(text[range])")
    return true
}

NLTokenizer è la base per tutte le altre capacità di NaturalLanguage. Dopo la tokenizzazione, il testo è pronto per il riconoscimento della lingua, l'etichettatura e la lemmatizzazione.

Riconoscimento della lingua con NLLanguageRecognizer

NLLanguageRecognizer determina la lingua del testo e restituisce l'opzione più probabile con un punteggio di confidenza. Il framework supporta oltre 30 lingue e può funzionare con testo di qualsiasi lunghezza — da una singola parola a un intero documento.

L'algoritmo di NLLanguageRecognizer analizza n-grammi di caratteri e li confronta con profili linguistici. Per testi brevi (fino a 50 caratteri), la precisione diminuisce, quindi Apple consiglia di inviare almeno 100–200 caratteri per un'identificazione affidabile della lingua.

swift
import NaturalLanguage

let recognizer = NLLanguageRecognizer()
recognizer.processString("Hello, how are you? I am learning NaturalLanguage.")

if let language = recognizer.dominantLanguage {
    print("Dominant language: \\(language.rawValue)") // "ru"
}

let hypotheses = recognizer.languageHypotheses(withMaximum: 3)
for (lang, prob) in hypotheses {
    print("\\(lang.rawValue): \\(prob)")
}

Il metodo languageHypotheses restituisce un dizionario delle lingue con probabilità in ordine decrescente. Questo è utile quando il testo contiene un mix di lingue o quando è necessario mostrare all'utente più opzioni tra cui scegliere, anziché solo la lingua dominante.

NaturalLanguage identifica il russo con una precisione del 95% per testi di 100 caratteri o più. Per testi brevi (1–2 parole), la precisione scende al 60–70% — in tali casi, è meglio usare languageHypotheses e mostrare le prime 3 opzioni.

Etichettatura delle parti del discorso e lemmatizzazione

NLTagScheme fornisce schemi di etichettatura per l'analisi linguistica: parti del discorso (sostantivo, verbo, aggettivo), lemmi (forma base di una parola), tipi di entità (persona, organizzazione, luogo) e altre categorie.

La lemmatizzazione riduce una parola alla sua forma dizionario: correva → correre, migliore → buono, books → book. Questo è di importanza critica per la ricerca e l'analisi del testo — senza lemmatizzazione, gatto e gatti vengono trattati come token diversi, riducendo la qualità delle pipeline NLP.

swift
import NaturalLanguage

let tagger = NLTagger(tagSchemes: [.lemma, .lexicalClass])
tagger.string = "The cats were running quickly."

tagger.enumerateTags(in: tagger.string!.startIndex..<tagger.string!.endIndex,
    unit: .word,
    scheme: .lexicalClass) { tag, range in
    print("\\(tagger.string![range]): \\(tag?.rawValue ?? "unknown")"
}

Esempio di output: cats → Sostantivo, were → Verbo, quickly → Avverbio. Combinando lemmatizzazione e parti del discorso, puoi costruire una ricerca intelligente che trova gatti che corrono da una query corre gatto.

NLTagScheme.lemma funziona per tutte le lingue supportate da NaturalLanguage, incluso il russo. Questo rende NLTagger uno strumento versatile per applicazioni multilingue senza dover caricare modelli separati per ogni lingua.

Riconoscimento di entità nominate in NaturalLanguage

Il riconoscimento di entità nominate (NER) è il compito di estrarre entità nominate dal testo: nomi di persone, nomi di organizzazioni, luoghi geografici e dati personali. NaturalLanguage supporta NER tramite NLTagScheme.nameType.

NLTagScheme.nameType distingue tre tipi di entità: PersonalName, OrganizationName e PlaceName. Ciò consente l'estrazione automatica di dati strutturati da notizie, email e recensioni.

swift
let nerTagger = NLTagger(tagSchemes: [.nameType])
nerTagger.string = "Tim Cook announced Apple's new headquarters in Cupertino."

nerTagger.enumerateTags(in: nerTagger.string!.startIndex..<nerTagger.string!.endIndex,
    unit: .word,
    scheme: .nameType) { tag, range in
    if tag != nil {
        print("\\(nerTagger.string![range]): \\(tag!.rawValue)"
    }
}

Risultato: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. Il NER di NaturalLanguage non richiede addestramento personalizzato e funziona immediatamente per inglese, francese, tedesco, spagnolo e altre lingue.

Per il russo, il NER è supportato ma la precisione è leggermente inferiore — circa 70–75% contro l'85% per l'inglese. Se è necessaria un'alta precisione per il russo, Apple consiglia di addestrare un modello Core ML personalizzato sui propri dati utilizzando Create ML.

Analisi del sentiment con NLModel

NLModel è una classe per lavorare con modelli Core ML NLP addestrati, incluso il modello di analisi del sentiment integrato pre-addestrato da Apple. Il modello determina il sentiment del testo: positivo, negativo o neutro.

Il modello integrato di analisi del sentiment è addestrato sulle recensioni dell'App Store e funziona per inglese, francese, tedesco, italiano, spagnolo, portoghese, cinese e giapponese. Per il russo, il modello non è pre-addestrato — hai bisogno di Create ML e dei tuoi dati etichettati.

swift
import NaturalLanguage

let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "This app is amazing!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"

NLModel supporta anche modelli personalizzati addestrati tramite Create ML. Puoi addestrare un modello di classificazione del testo sui tuoi dati (categorie di prodotti, tipi di ticket di supporto, stili linguistici) e utilizzarlo attraverso la stessa interfaccia NLModel.

Secondo la documentazione Apple Create ML 2024, un modello di testo personalizzato si addestra su 500–5000 esempi per raggiungere una precisione dell'80–95%. NaturalLanguage carica il modello una volta e lo memorizza nella cache per le chiamate successive, minimizzando la latenza per richieste ripetute.

Attività NLPClasse NaturalLanguageSupporto Russo
TokenizzazioneNLTokenizer
Riconoscimento linguaNLLanguageRecognizer
LemmatizzazioneNLTagger + .lemma
Parti del discorsoNLTagger + .lexicalClass
NERNLTagger + .nameTypeLimitato
SentimentNLModel (pre-addestrato)No

Domande frequenti

In che modo NaturalLanguage si differenzia da Core ML per NLP?

NaturalLanguage fornisce modelli NLP pronti all'uso senza necessità di addestramento: tokenizzazione, riconoscimento della lingua, NER. Core ML richiede l'addestramento di un modello sui propri dati e offre maggiore flessibilità per attività specifiche. NaturalLanguage è migliore per attività di base pronte all'uso, mentre Core ML è per attività altamente specializzate.

NaturalLanguage funziona offline?

Sì, NaturalLanguage funziona interamente sul dispositivo senza connessione internet. Tutti i modelli sono integrati in iOS e macOS e i dati non vengono inviati a un server. Questo è un vantaggio chiave rispetto ai servizi NLP cloud che richiedono accesso alla rete e creano rischi per la privacy.

Quali lingue supporta NaturalLanguage?

NaturalLanguage supporta oltre 30 lingue, tra cui russo, inglese, spagnolo, francese, tedesco, italiano, portoghese, cinese, giapponese, coreano, arabo, turco e ucraino. La precisione della tokenizzazione e della lemmatizzazione è alta per tutte le lingue supportate, mentre NER e analisi del sentiment sono principalmente per l'inglese.

Come addestrare il proprio modello NLP per NaturalLanguage?

Utilizza Create ML — l'applicazione Apple per addestrare modelli di apprendimento automatico senza programmazione. Carica un dataset etichettato (CSV o JSON), scegli un'attività di classificazione del testo o etichettatura, addestra il modello ed esportalo in formato Core ML (.mlmodel). Quindi carica il modello tramite NLModel(mlModel:) nel codice.

NaturalLanguage funziona su tutti i dispositivi Apple?

NaturalLanguage è disponibile su iOS 12+, macOS 10.14+, watchOS 5+ e tvOS 12+. Sui dispositivi con chip A12+ e Neural Engine, le prestazioni sono superiori — l'elaborazione del testo viene accelerata di 3–5 volte grazie all'apprendimento automatico accelerato dall'hardware. Sui dispositivi più vecchi (A11 e precedenti), il framework funziona ma è più lento.

Riepilogo

  • NaturalLanguage è il framework NLP su dispositivo di Apple per tokenizzazione, riconoscimento della lingua, lemmatizzazione, etichettatura POS e NER senza inviare dati al cloud.
  • NLTokenizer suddivide il testo in parole, frasi, paragrafi e documenti tenendo conto delle specificità di oltre 30 lingue, tra cui giapponese e arabo.
  • NLLanguageRecognizer determina la lingua dominante del testo e restituisce ipotesi con probabilità per scenari multilingue.
  • NLTagger con .lexicalClass e .lemma esegue l'etichettatura delle parti del discorso e la lemmatizzazione — riducendo le parole alla loro forma dizionario per migliorare ricerca e analisi.
  • Riconoscimento di entità nominate tramite NLTagScheme.nameType estrae nomi, organizzazioni e luoghi dal testo in inglese, francese, tedesco e altre lingue.
  • NLModel fornisce un'interfaccia per modelli Core ML pre-addestrati e personalizzati, incluso un modello di analisi del sentiment integrato per recensioni in 7 lingue.
  • Per il russo, tokenizzazione, riconoscimento della lingua, lemmatizzazione e etichettatura POS sono disponibili; NER e analisi del sentiment sono meglio implementati tramite un modello Core ML personalizzato.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche