Porównanie tekstu, scikit-learn i nltk (NLP)

Skaut będzie porównywać teksty. Jak to jest możliwe? Najpierw trzeba tekst zamienić na ciąg liczb – wektor który będzie porównywalny.  W tym celu będziemy chcieli wysupłać z tekstu jego właściwości.  Odczytać zmienne które opiszą ten tekst.  Do tego posłużą nam niezastąpione biblioteki od Pythona do obsługi tekstu nltk oraz nauki maszynowej scikit-learn aka sklearn.

Faza 1: czyszczenie

Żeby tekst nadawał się do dalszego przerabiania należy go wyczyścić.  Z niepotrzebnych słów, z szumu który nie wnosi niczego nowego do pisania. I tak :

można zaimportować zestaw słów które nie mają większego celu znaczeniowego w słownictwie. nltk ma fajne wbudowane słowniki. Tak importuje się słownik angielski. Są też inne :

Tekst zawiera w różnych językach końcówki. Końcówki są gramatycznie OK ale z punktu widzenia sensu : bez sensu. Dlatego stemming to proces w którym pozbywamy się końcówek.

Faza 2: wektory

Przechodzimy do właściwego przyporządkowania. Mając gotowe do przerobienia teksty zamienimy je na wektory.

Powyższy kod zamieni podany korpus dokumentów na macierz TfIdf. To produkt 2 głównych czynników: częstotliwości wyrazów (term frequency) w dokumencie i odwróconej częstotliwości we wszystkich dokumentach (inverted document frequency). Stosowana domyślnie w Elasticsearch i innych fajnych silnikach wyszukiwania. Po wprowadzeniu do takiego transformatora czynników otrzymamy macierz dokumentów które będą wektorami, każdemu wyrazowi zostanie przyporządkowana wartość liczbowa.

Edit: Na potrzeby tego projektu i wektoryzacji wystarczy CountVectorizer, który tworzy prosty wektor w zależności od częstotliwości występowania danego słowa w tekście, nie bacząc na inne dokumenty w zestawie, jako że będziemy porównywać 2 teksty do siebie.

Podsumowanko

Ta wartość liczbowa – wektor – już niedługo posłuży do kosinusowej zabawy stwierdzającej podobieństwo. Lub jego brak. Póki co zobacz mój jupiterowy notatnik w którym zaimplementowałem to co powyżej na przykładzie.