Obiective
În această lecție, veți învăța:
- Ce este Natural Language Processing (NLP) și de ce este important
- Introducere în bibliotecile spaCy și NLTK
- Preprocesarea textului cu spaCy și NLTK
- Analiza limbajului natural și extragerea informațiilor
- Aplicații practice ale NLP
1. Ce este Natural Language Processing (NLP) și de ce este important
Natural Language Processing (NLP) este o ramură a inteligenței artificiale (AI) care se ocupă cu analiza și procesarea limbajului natural, adică textul și vorbirea umană. NLP are o gamă largă de aplicații, cum ar fi traducerea automată, generarea de rezumate, analiza sentimentelor, chatbots și multe altele.
2. Introducere în bibliotecile spaCy și NLTK
spaCy și NLTK (Natural Language Toolkit) sunt două biblioteci populare de NLP pentru Python.
-
spaCy este o bibliotecă modernă, optimizată pentru performanță și ușurință în utilizare. spaCy vine cu modele pre-antrenate pentru diverse limbi și oferă funcționalități pentru preprocesarea textului, analiza sintactică, recunoașterea entităților și multe altele.
-
NLTK este o bibliotecă mai veche, dar foarte puternică și cuprinzătoare, care oferă multe resurse lingvistice și funcționalități pentru analiza textului, generarea de texte și procesarea semnalelor.
Pentru a începe lucrul cu spaCy și NLTK, trebuie să le instalați:
pip install spacy
pip install nltk
3. Preprocesarea textului cu spaCy și NLTK
Preprocesarea este un pas esențial în majoritatea problemelor de NLP, care implică curățarea și pregătirea textului înainte de a fi analizat sau utilizat pentru a antrena modele.
3.1. Tokenizarea
Tokenizarea implică împărțirea textului în unități mai mici, cum ar fi cuvintele și punctuația.
Tokenizare cu spaCy:
import spacy
nlp = spacy.load('en_core_web_sm')
text = "This is an example sentence."
doc = nlp(text)
tokens = [token.text for token in doc]
print(tokens)
Tokenizare cu NLTK:
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt')
text = "This is an example sentence."
tokens = word_tokenize(text)
print(tokens)
3.2. Eliminarea stopwords
Stopwords sunt cuvinte comune care nu contribuie semnificativ la sensul unei propoziții, cum ar fi „the”, „and”, „is”, etc.
Eliminarea stopwords cu spaCy:
from spacy.lang.en.stop_words import STOP_WORDS
filtered_tokens = [token for token in tokens if token.lower() not in STOP_WORDS]
print(filtered_tokens)
Eliminarea stopwords cu NLTK:
from nltk.corpus import stopwords
nltk.download('stopwords')
stop_words = set(stopwords.words('english'))
filtered_tokens = [token for token in tokens if token.lower() not in stop_words]
print(filtered_tokens)
3.3. Stemming și Lemmatization
Stemming și Lemmatization sunt tehnici de normalizare a cuvintelor care reduc cuvintele la forma lor de bază.
Lemmatization cu spaCy:
lemmas = [token.lemma_ for token in doc]
print(lemmas)
Stemming cu NLTK:
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
stems = [stemmer.stem(token) for token in tokens]
print(stems)
4. Analiza limbajului natural și extragerea informațiilor
4.1. Part-of-speech (POS) tagging
POS tagging implică atribuirea categoriilorgramaticale (substantiv, verb, adjectiv etc.) cuvintelor dintr-o propoziție.
POS tagging cu spaCy:
pos_tags = [(token.text, token.pos_) for token in doc]
print(pos_tags)
POS tagging cu NLTK:
nltk.download('averaged_perceptron_tagger')
pos_tags = nltk.pos_tag(tokens)
print(pos_tags)
4.2. Recunoașterea entităților numite (Named Entity Recognition, NER)
NER este procesul de identificare și clasificare a entităților din text, cum ar fi nume de persoane, organizații, locuri, date etc.
NER cu spaCy:
entities = [(ent.text, ent.label_) for ent in doc.ents]
print(entities)
NER cu NLTK:
nltk.download('maxent_ne_chunker')
nltk.download('words')
tree = nltk.ne_chunk(pos_tags)
entities = [tuple(reversed(entity)) for entity in tree if hasattr(entity, 'label')]
print(entities)
4.3. Analiza sintactică (Parsing)
Analiza sintactică implică identificarea structurii gramaticale a unei propoziții și construirea unui arbore de analiză.
Parsing cu spaCy:
for token in doc:
print(f"{token.text}t{token.dep_}t{token.head.text}")
Parsing cu NLTK:
nltk.download('punkt')
nltk.download('maxent_ne_chunker')
nltk.download('words')
nltk.download('averaged_perceptron_tagger')
from nltk.parse import RecursiveDescentParser
from nltk.grammar import CFG
grammar = """
S -> NP VP
NP -> Det N | Det N PP
VP -> V NP | VP PP
PP -> P NP
Det -> 'a' | 'an' | 'the'
N -> 'girl' | 'school' | 'book'
V -> 'saw' | 'gave'
P -> 'in' | 'to'
"""
cfg = CFG.fromstring(grammar)
rd_parser = RecursiveDescentParser(cfg)
tree = list(rd_parser.parse(tokens))[0]
tree.pretty_print()
5. Aplicații practice ale NLP
5.1. Analiza sentimentelor
Analiza sentimentelor implică determinarea sentimentului sau emoției exprimate într-un text (de exemplu, pozitiv, negativ sau neutru).
import spacy
from spacy import displacy
nlp = spacy.load('en_core_web_sm')
text = "I love this product! It's amazing."
doc = nlp(text)
sentiment = doc.sentiment
print(sentiment)
displacy.serve(doc, style='ent')
5.2. Rezumarea textului
Rezumarea textului implică generarea unui rezumat scurt și concis al unui text mai lung.
from nltk.tokenize import sent_tokenize
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
def summarize(text, n_sentences=3):
sentences = sent_tokenize(text)
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(sentences)
sentence_scores = cosine_similarity(X, X).sum(axis=1)
top_sentence_indices = np.argsort(sentence_scores)[-n_sentences:]
summary = ' '.join([sentences[i] for i in sorted(top_sentence_indices)])
return summary
text = """
Your long text here...
"""
summary = summarize(text)
print(summary)
5.3. Traducerea automată
Traducerea automată implică traducerea textului dintr-o limbă în alta.
from googletrans import Translator
translator = Translator()
text = "Bonjour tout le monde!"
translated = translator.translate(text, src='fr', dest='en')
print(translated.text)
Acestea sunt doar câteva exemple de aplicații practice ale NLP. Cu spaCy și NLTK, puteți aborda o gamă largă de probleme și proiecte de NLP.