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

Το απόσπασμα κώδικα αξιοποιεί τη δύναμη του Regex και του NLTK για να διευκολύνει την προεπεξεργασία κειμένου. Χρησιμοποιεί μια καλά δομημένη διαδικασία τριών σταδίων, την οποία θα αναλύσω περαιτέρω σε αυτό το άρθρο. Πριν εμβαθύνουμε στις λεπτομέρειες, είναι σημαντικό να κατανοήσουμε τις προϋποθέσεις εγκατάστασης και εισαγωγής. Ας ξεκινήσουμε διερευνώντας τις απαραίτητες απαιτήσεις.

!pip install nltk

Μετά την επιτυχή εγκατάσταση του NLTK (Natural Language Toolkit), μπορείτε να προχωρήσετε εισάγοντας όλα τα βασικά στοιχεία που απαιτούνται για την εκκίνηση του κώδικά σας.

import re, string
import nltk

from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import SnowballStemmer
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizer

nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('wordnet')
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('omw-1.4')

Ο παρεχόμενος κώδικας θα φέρει τις βιβλιοθήκες Regex και NLTK, μαζί με τη λήψη πολλών λεξικών που θα αποδειχθούν χρήσιμα σε επόμενο σημείο του κώδικα.

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

Βήμα 1: Προεπεξεργασία κειμένου —Με αυτόν τον τρόπο θα μετατραπούν όλοι οι χαρακτήρες σε πεζούς, θα αφαιρεθούν όλα τα λευκά κενά και οι καρτέλες, θα αφαιρεθούν ετικέτες html, θα αντικατασταθεί η προφορά με λευκά κενά και τυχόν αριθμούς.

# Step 1: Text preprocessing

def preprocess(text):
    text = text.lower() # Lowercase Text
    text=text.strip()   # Get Rid of Leading / Trailing Whitespace 
    text=re.compile('<.*?>').sub('', text) #Remove HTML Tags / Markups
    text = re.compile('[%s]' % re.escape(string.punctuation)).sub(' ', text)  # Replace punctuation with space. Careful since punctuation can sometime be useful.
    text = re.sub('\s+', ' ', text)  # Remove extra space and tabs
    text = re.sub(r'\[[0-9]*\]',' ',text) # [0-9] matches any digit (0 to Infinity)
    text=re.sub(r'[^\w\s]', '', str(text).lower().strip())
    text = re.sub(r'\d',' ',text) # Matches any digit from 0 to 100000..., \D matches non-digits
    text = re.sub(r'\s+',' ',text) # \s Matches any whitespace, \s+ Matches multiple whitespace, \S Matches non-whitespace 
    
    return text

Βήμα 2: Κατάργηση ενδιάμεσων λέξεων — Στο NLP, οι "stopwords" αναφέρονται σε λέξεις που χρησιμοποιούνται συνήθως και συχνά θεωρούνται ασήμαντες στην ανάλυση δεδομένων κειμένου. Αυτές οι λέξεις, όπως «το», «είναι» και «και», δεν έχουν πολύ νόημα και μπορούν να βρεθούν συχνά σε οποιοδήποτε κείμενο.

# Step 2: Stopword Removal

def stopword(string):
    a= [i for i in string.split() if i not in stopwords.words('english')]
    return ' '.join(a)

Βήμα 3: Αρχικοποίηση Stemmer & Lemmatizer — Το Stemming και το Lemmatizing είναι τεχνικές που χρησιμοποιούνται για τη μείωση των λέξεων στη ρίζα τους, διευκολύνοντας την ανάλυση και την κατανόηση του κειμένου.

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

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

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

# Step 3: Initializing Stemmer & Lemmatizer
 
# Initialize the Stemmer
snow = SnowballStemmer('english')
def stemming(string):
    a=[snow.stem(i) for i in word_tokenize(string) ]
    return " ".join(a)

# Initialize the Lemmatizer

wl = WordNetLemmatizer()
 
# This is a helper function to map NTLK position tags

def get_wordnet_pos(tag):
    if tag.startswith('J'):
        return wordnet.ADJ
    elif tag.startswith('V'):
        return wordnet.VERB
    elif tag.startswith('N'):
        return wordnet.NOUN
    elif tag.startswith('R'):
        return wordnet.ADV
    else:
        return wordnet.NOUN

# Tokenize the sentence

def lemmatizer(string):
    word_pos_tags = nltk.pos_tag(word_tokenize(string))   # Get position tags
    a=[wl.lemmatize(tag[0], get_wordnet_pos(tag[1])) for idx, tag in enumerate(word_pos_tags)]   # Map the position tag and lemmatize the word/token
    return " ".join(a)

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

# FINAL PREPROCESSING

def finalpreprocess(string):
    return lemmatizer(stopword(preprocess(string)))

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

# Preprocess a String

text = input("Enter the text that needs to be Pre-Processed: ")
print(text)

text = finalpreprocess(text)
print("Pre-Processed Text: ",preprocess(text))

Για να προεπεξεργαστείτε ένα πλήρες πλαίσιο δεδομένων panda, μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα.

# Preprocess a Pandas Dataframe

import pandas as pd

# Load the CSV file
df = pd.read_csv('data.csv')

# Apply preprocessing to the 'text' column
df['text'] = df['text'].apply(finalpreprocess)

# Save the preprocessed DataFrame to a new CSV file
df.to_csv('preprocessed_data.csv', index=False)

Συμπερασματικά, η προεπεξεργασία δεδομένων είναι ένα κρίσιμο βήμα στην εργασία με μοντέλα NLP. Αν και μπορεί να φαίνεται κουραστικό, παίζει ζωτικό ρόλο στην προετοιμασία των δεδομένων για αποτελεσματική εκπαίδευση.

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