Στέλεχος και λεμφισμός με Python NLTK

Πίνακας περιεχομένων:

Anonim

Τι είναι το Stemming;

Το Stemming είναι ένα είδος εξομάλυνσης των λέξεων. Η κανονικοποίηση είναι μια τεχνική όπου ένα σύνολο λέξεων σε μια πρόταση μετατρέπεται σε ακολουθία για να συντομεύσει την αναζήτησή του. Οι λέξεις που έχουν το ίδιο νόημα αλλά έχουν κάποια παραλλαγή ανάλογα με το πλαίσιο ή την πρόταση είναι κανονικοποιημένες.

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

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

He was riding.He was taking the ride.

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

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

Πρόγραμμα κατανόησης Stemming

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

Έξοδος :

waitwaitwaitwait

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

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

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

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

Πρόγραμμα:

from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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)

Παραγωγή:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

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

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

Συμπέρασμα:

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

Τι είναι ο εξευγενισμός;

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

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

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

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

Κωδικός για τη διάκριση μεταξύ Lemmatization και Stemming

Κωδικός βλαστών

import nltkfrom nltk.stem.porter import PorterStemmerporter_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 studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Κωδικός ελευθέρωσης

import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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 studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

Συζήτηση της παραγωγής:

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

Χρήση θήκης Lemmatizer:

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

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

from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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)

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

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

Παραγωγή:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

Ο λεμετισμός έχει στενή σχέση με το λεξικό wordnet, οπότε είναι σημαντικό να μελετήσουμε αυτό το θέμα, οπότε το διατηρούμε ως το επόμενο