Klasyfikacja tekstu

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.