Technika reprezentująca kolekcję dokumentów w postaci wektorów o stałej długości¶
In [4]:
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
import spacy
nlp = spacy.load('pl_core_news_sm')
In [5]:
texts = [
"Agnieszka ma nowy samochód",
"Agnieszka z Warszawy ma piękny nowy samochód",
"Arek ma nowy rower",
"Samochód Agnieszki jest nowy"
]
Podział tekstu na tokeny
In [8]:
docs_lemma = [nlp(text) for text in texts]
docs_lemma
Out[8]:
[Agnieszka ma nowy samochód, Agnieszka z Warszawy ma piękny nowy samochód, Arek ma nowy rower, Samochód Agnieszki jest nowy]
Przekształć listę do zdania, poprzednio dla każdego elementu stwórz lemat rzutowany do małych liter
In [10]:
sentences = [" ".join([t.lemma_.lower() for t in doc]) for doc in docs_lemma]
print(sentences)
['agnieszka mieć nowy samochód', 'agnieszka z warszawa mieć piękny nowy samochód', 'arka mieć nowy rower', 'samochód agnieszka być nowy']
Stwórz listę cech i zamień do postaci wektora
In [11]:
X = vectorizer.fit_transform(sentences)
print(X.toarray())
[[1 0 0 1 1 0 0 1 0] [1 0 0 1 1 1 0 1 1] [0 1 0 1 1 0 1 0 0] [1 0 1 0 1 0 0 1 0]]
Sprawdź cechy poszczególnych kolumn (token „agnieszka” występuje w wektorze o indeksie 0, 2, 3)
In [12]:
vectorizer.get_feature_names()
Out[12]:
['agnieszka', 'arka', 'być', 'mieć', 'nowy', 'piękny', 'rower', 'samochód', 'warszawa']
- Przykład miary działającej na wektorach – miara cosinusowa
- Miara przyjmuje 2 tablice z wektorami i zwraca macierz.
- Wartość podobieństwa liczona jest na przecięciu wiersza i kolumny.
- Na przekątnej wartość liczona jest dla tych samych dokumentów, dlatego podobieństwo wynosi 1.
In [14]:
from sklearn.metrics.pairwise import cosine_similarity
sim = cosine_similarity(X, X)
sim
Out[14]:
array([[1. , 0.81649658, 0.5 , 0.75 ], [0.81649658, 1. , 0.40824829, 0.61237244], [0.5 , 0.40824829, 1. , 0.25 ], [0.75 , 0.61237244, 0.25 , 1. ]])
Dla dokumnetu „Agnieszka ma nowy samochód”:
- podobieństwo „Agnieszka z Warszawy ma piękny nowy samochód” wynosi 0.81649658
- podobieństwo „Arek ma nowy rower” wynosi 0.5
- podobieństwo „Samochód Agnieszki jest nowy” wynosi 0.25