Klasyfikacja tekstu to proces przydzielania tekstu do określonych kategorii na podstawie jego zawartości. Jest to ważny krok w procesie przetwarzania języka naturalnego, ponieważ pozwala na automatyzację segregacji tekstu i ułatwienie dalszych analiz.
Do klasyfikacji tekstu w języku Python możemy użyć narzędzi takich jak nltk (Natural Language Toolkit) lub spacy. Obie te biblioteki oferują szerokie możliwości przetwarzania języka naturalnego, w tym klasyfikacji tekstu.
Aby użyć nltk do klasyfikacji tekstu, należy najpierw przygotować dane uczące, czyli korpus tekstów z oznaczonymi kategoriami. Następnie możemy skorzystać z jednego z dostępnych klasyfikatorów, takich jak Naive Bayes Classifier:
import nltk
nltk.download('movie_reviews')
from nltk.corpus import movie_reviews
from nltk.classify import NaiveBayesClassifier
# przygotowanie danych uczących
reviews = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
# podział na zbiór uczący i testowy
train_set, test_set = reviews[:700], reviews[700:]
# trenowanie klasyfikatora
classifier = NaiveBayesClassifier.train(train_set)
# ocena dokładności klasyfikatora
accuracy = nltk.classify.accuracy(classifier, test_set)
print(f'Accuracy: {accuracy:.2f}') # wynik: Accuracy: 0.72
W wyniku tego kodu otrzymamy klasyfikator, który będzie mógł przypisywać nowe teksty do odpowiednich kategorii.
Aby użyć spacy do klasyfikacji tekstu, należy najpierw przygotować dane uczące, czyli korpus tekstów z oznaczonymi kategoriami. Następnie możemy skorzystać z TextCategorizer, który jest wbudowanym w spacy narzędziem do klasyfikacji tekstu:
import random
# przygotowanie danych uczących
TRAINING_DATA = [
("The quick brown fox jumps over the lazy dog.", {'cats': ['animal']}),
("An apple a day keeps the doctor away.", {'cats': ['health']}),
("I love to go to the beach in the summer.", {'cats': ['travel', 'summer']}),
("I'm running late for an important meeting.", {'cats': ['work']}),
("The weather is beautiful today.", {'cats': ['weather']}),
]
# tworzenie modelu
nlp = spacy.blank('en')
categorizer = nlp.create_pipe('textcat')
nlp.add_pipe(categorizer)
categorizer.add_label('animal')
categorizer.add_label('health')
categorizer.add_label('travel')
categorizer.add_label('summer')
categorizer.add_label('work')
categorizer.add_label('weather')
# trenowanie modelu
optimizer = nlp.begin_training()
for i in range(10):
random.shuffle(TRAINING_DATA)
for text, annotations in TRAINING_DATA:
nlp.update([text], [annotations], sgd=optimizer)
# sprawdzanie dokładności modelu
scores = []
for text, annotations in TRAINING_DATA:
doc = nlp(text)
scores.append({'text': text, 'cats': doc.cats, 'gold': annotations})
print(scores)
W wyniku tego kodu otrzymamy model, który będzie mógł przypisywać nowe teksty do odpowiednich kategorii.