Στέλεχος και Λεμματοποίηση σε Python NLTK με Παραδείγματα

Τι είναι το Stemming και το Lemmatization Python NLTK;

Στέλεχος και Λεμματοποίηση in Python Οι NLTK είναι τεχνικές κανονικοποίησης κειμένου για Επεξεργασία Φυσικής Γλώσσας. Αυτές οι τεχνικές χρησιμοποιούνται ευρέως για την προεπεξεργασία κειμένου. Η διαφορά μεταξύ stemming και lemmatization είναι ότι το stemming είναι πιο γρήγορο καθώς κόβει λέξεις χωρίς να γνωρίζει το πλαίσιο, ενώ η lemmatization είναι πιο αργή καθώς γνωρίζει το πλαίσιο των λέξεων πριν από την επεξεργασία.

Τι είναι το Stemming;

Βλάστηση είναι μια μέθοδος κανονικοποίησης των λέξεων σε Επεξεργασία φυσικής γλώσσας. Είναι μια τεχνική στην οποία ένα σύνολο λέξεων σε μια πρόταση μετατρέπεται σε μια ακολουθία για να συντομεύσει την αναζήτηση. Σε αυτή τη μέθοδο, οι λέξεις που έχουν την ίδια σημασία αλλά έχουν κάποιες παραλλαγές ανάλογα με το πλαίσιο ή την πρόταση κανονικοποιούνται.

Με μια άλλη λέξη, υπάρχει μια λέξη ρίζας, αλλά υπάρχουν πολλές παραλλαγές των ίδιων λέξεων. Για παράδειγμα, η ρίζα της λέξης είναι «τρώω» και οι παραλλαγές της είναι «τρώει, τρώει, τρώγεται και παρόμοια». Με τον ίδιο τρόπο, με τη βοήθεια του Stemming in Python, μπορούμε να βρούμε τη ριζική λέξη οποιωνδήποτε παραλλαγών.

Για παράδειγμα

He was riding.	
He was taking the ride.

Στις δύο παραπάνω προτάσεις, το νόημα είναι το ίδιο, δηλαδή η δραστηριότητα ιππασίας στο παρελθόν. Ένας άνθρωπος μπορεί εύκολα να καταλάβει ότι και οι δύο έννοιες είναι ίδιες. Αλλά για τις μηχανές, και οι δύο προτάσεις είναι διαφορετικές. Έτσι, έγινε δύσκολη η μετατροπή του στην ίδια σειρά δεδομένων. Σε περίπτωση που δεν παρέχουμε το ίδιο σύνολο δεδομένων, τότε το μηχάνημα αποτυγχάνει να προβλέψει. Επομένως, είναι απαραίτητο να διαφοροποιηθεί η σημασία κάθε λέξης για να προετοιμαστεί το σύνολο δεδομένων για μηχανική εκμάθηση. Και εδώ το stemming χρησιμοποιείται για να κατηγοριοποιήσει τον ίδιο τύπο δεδομένων παίρνοντας τη ρίζα του.

Ας το εφαρμόσουμε αυτό με ένα Python program.NLTK έχει έναν αλγόριθμο που ονομάζεται "PorterStemmer". Αυτός ο αλγόριθμος αποδέχεται τη λίστα της λέξης με διακριτικό και τη μεταφέρει σε λέξη ρίζας.

Το πρόγραμμα για την κατανόηση του Stemming

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

Παραγωγή:

wait	
wait	
wait	
wait 

Πρόγραμμα για την κατανόηση του Stemming

Επεξήγηση κώδικα:

  • Υπάρχει μια μονάδα στελέχους στο NLTk που εισάγεται. Εάν εισαγάγετε ολόκληρη την ενότητα, τότε το πρόγραμμα γίνεται βαρύ καθώς περιέχει χιλιάδες γραμμές κωδικών. Έτσι, από ολόκληρη τη μονάδα στελέχους, εισαγάγαμε μόνο το "PorterStemmer".
  • Ετοιμάσαμε μια εικονική λίστα δεδομένων παραλλαγής της ίδιας λέξης.
  • Δημιουργείται ένα αντικείμενο που ανήκει στην κλάση nltk.stem.porter.PorterStemmer.
  • Επιπλέον, το περάσαμε στο PorterStemmer ένα προς ένα χρησιμοποιώντας το βρόχο "for". Τέλος, λάβαμε εξαγωγή ριζική λέξη για κάθε λέξη που αναφέρεται στη λίστα.

Από την παραπάνω εξήγηση, μπορεί επίσης να συναχθεί το συμπέρασμα ότι το stemming θεωρείται ως ένα σημαντικό βήμα προεπεξεργασίας επειδή αφαίρεσε τον πλεονασμό στα δεδομένα και τις παραλλαγές στην ίδια λέξη. Ως αποτέλεσμα, φιλτράρονται τα δεδομένα που θα βοηθήσουν στην καλύτερη εκπαίδευση του μηχανήματος.

Τώρα περνάμε μια πλήρη πρόταση και ελέγχουμε για τη συμπεριφορά της ως έξοδο.

Πρόγραμμα:

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

Παραγωγή:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

Πρόγραμμα για την κατανόηση του Stemming

Επεξήγηση κώδικα:

  • Το πακέτο PorterStemer εισάγεται από το στέλεχος της μονάδας
  • Εισάγονται πακέτα για συμβολική φράσης καθώς και λέξεις
  • Γράφεται μια πρόταση που πρέπει να γίνει διακριτική στο επόμενο βήμα.
  • Σε αυτό το βήμα υλοποιείται η λήμματοποίηση απορρέουσας συμβολικής λέξεων.
  • Εδώ δημιουργείται ένα αντικείμενο για το PorterStemmer.
  • Ο βρόχος εκτελείται και η απορρόφηση κάθε λέξης γίνεται χρησιμοποιώντας το αντικείμενο που δημιουργήθηκε στη γραμμή κώδικα 5

Συμπέρασμα:

Το Stemming είναι μια ενότητα προεπεξεργασίας δεδομένων. Η αγγλική γλώσσα έχει πολλές παραλλαγές μιας λέξης. Αυτές οι παραλλαγές δημιουργούν ασάφεια στην εκπαίδευση και την πρόβλεψη μηχανικής μάθησης. Για να δημιουργήσετε ένα επιτυχημένο μοντέλο, είναι ζωτικής σημασίας να φιλτράρετε τέτοιες λέξεις και να μετατρέπετε στον ίδιο τύπο δεδομένων αλληλουχίας χρησιμοποιώντας το stemming. Επίσης, αυτή είναι μια σημαντική τεχνική για τη λήψη δεδομένων σειράς από ένα σύνολο προτάσεων και την αφαίρεση περιττών δεδομένων που είναι επίσης γνωστή ως κανονικοποίηση.

Τι είναι η Λεμματοποίηση;

Εξευγενισμός στο NLTK είναι η αλγοριθμική διαδικασία εύρεσης του λήμματος μιας λέξης ανάλογα με τη σημασία και τα συμφραζόμενά της. Η λημματοποίηση αναφέρεται συνήθως στη μορφολογική ανάλυση των λέξεων, η οποία στοχεύει στην αφαίρεση των κλιτικών καταλήξεων. Βοηθά στην επιστροφή της μορφής βάσης ή λεξικού μιας λέξης που είναι γνωστή ως λήμμα.

Η μέθοδος Lemmatization NLTK βασίζεται στην ενσωματωμένη συνάρτηση morph του WorldNet. Η προεπεξεργασία κειμένου περιλαμβάνει τόσο τη δημιουργία λήψεων όσο και τη λήμματοποίηση. Πολλοί άνθρωποι βρίσκουν τους δύο όρους μπερδεμένους. Μερικοί τα αντιμετωπίζουν ως τα ίδια, αλλά υπάρχει διαφορά μεταξύ του stemming και του lemmatization. Η λεμματοποίηση προτιμάται έναντι της πρώτης για τον παρακάτω λόγο.

Γιατί το Lemmatization είναι καλύτερο από το Stemming;

Ο αλγόριθμος στέλεχος λειτουργεί κόβοντας το επίθημα από τη λέξη. Με μια ευρύτερη έννοια κόβει είτε την αρχή είτε το τέλος της λέξης.

Αντίθετα, η Λεμματοποίηση είναι μια πιο ισχυρή λειτουργία και λαμβάνει υπόψη τη μορφολογική ανάλυση των λέξεων. Επιστρέφει το λήμμα που είναι η βασική μορφή όλων των μορφών κλίσης του. Απαιτείται εις βάθος γλωσσική γνώση για τη δημιουργία λεξικών και την αναζήτηση της κατάλληλης μορφής της λέξης. Το Stemming είναι μια γενική λειτουργία ενώ η lemmatization είναι μια έξυπνη λειτουργία όπου η κατάλληλη μορφή θα αναζητηθεί στο λεξικό. Ως εκ τούτου, η λημματοποίηση βοηθά στην καλύτερη διαμόρφωση μάθηση μηχανής χαρακτηριστικά.

Κώδικας για τη διάκριση μεταξύ Λεμματοποίησης και Στέλεχος

Κώδικας προέλευσης:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))  

Παραγωγή::

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Κωδικός Λεμματοποίησης:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))  

Παραγωγή:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Συζήτηση του Output

Αν κοιτάξετε το stemming για σπουδές και σπουδές, το αποτέλεσμα είναι το ίδιο (studi), αλλά το NLTK lemmatizer παρέχει διαφορετικό λήμμα και για τα tokens μελέτη για σπουδές και για μελέτη για μελέτη. Έτσι, όταν πρέπει να δημιουργήσουμε σετ χαρακτηριστικών για να εκπαιδεύσουμε τη μηχανή, θα ήταν υπέροχο να προτιμάται η λήμματοποίηση.

Χρήση Case of Lemmatizer

Το Lemmatizer ελαχιστοποιεί την ασάφεια του κειμένου. Παραδείγματα λέξεων όπως ποδήλατο ή ποδήλατα μετατρέπονται σε βασική λέξη ποδήλατο. Βασικά, θα μετατρέψει όλες τις λέξεις που έχουν την ίδια σημασία αλλά διαφορετική αναπαράσταση στη βασική τους μορφή. Μειώνει την πυκνότητα των λέξεων στο δεδομένο κείμενο και βοηθά στην προετοιμασία των ακριβών χαρακτηριστικών για το προπονητικό μηχάνημα. Όσο πιο καθαρά είναι τα δεδομένα, τόσο πιο έξυπνο και ακριβές θα είναι το μοντέλο μηχανικής εκμάθησης. Το NLTK Lemmatizer εξοικονομεί επίσης μνήμη καθώς και υπολογιστικό κόστος.

Παράδειγμα σε πραγματικό χρόνο που δείχνει τη χρήση του Wordnet Lemmatization και της προσθήκης ετικετών POS Python

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV

	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

Χρήση Case of Lemmatizer

Επεξήγηση κώδικα

  • Πρώτον, εισάγεται το πρόγραμμα ανάγνωσης κειμένου wordnet.
  • Το WordNetLemmatizer εισάγεται από το wordnet.
  • Το Word tokenize καθώς και τμήματα της ετικέτας ομιλίας εισάγονται από το nltk.
  • Το προεπιλεγμένο λεξικό εισάγεται από συλλογές.
  • Το λεξικό δημιουργείται όπου το pos_tag (πρώτο γράμμα) είναι οι βασικές τιμές των οποίων οι τιμές αντιστοιχίζονται με την τιμή από το λεξικό wordnet. Έχουμε πάρει το μοναδικό πρώτο γράμμα, καθώς θα το χρησιμοποιήσουμε αργότερα στον βρόχο.
  • Το κείμενο είναι γραμμένο και είναι διακριτικό.
  • Δημιουργείται το αντικείμενο lemma_function το οποίο θα χρησιμοποιηθεί μέσα στον βρόχο.
  • Ο βρόχος εκτελείται και το lemmatize θα λάβει δύο ορίσματα το ένα είναι token και το άλλο είναι μια αντιστοίχιση του pos_tag με τιμή wordnet.

Παραγωγή:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

Python Η ληματοποίηση έχει στενή σχέση με λεξικό wordnet, επομένως είναι απαραίτητο να μελετήσουμε αυτό το θέμα, επομένως το κρατάμε ως επόμενο θέμα.