In [2]:
from sklearn.feature_extraction.text import TfidfVectorizer, TfidfTransformer
import numpy as np
import pandas as pd
#define vectorizer parameters

In [3]:
vectorizer = TfidfVectorizer()#smooth_idf=True, sublinear_tf=False)
# docs=["błąd danych na uprawnienia się administratorem problem acs",
#         "ewidencja czasu pracy problem tk dzień dobry jest problem czasu pracy",
#         "proszę przekierowanie faktur na panak do dnia data",
#         "pd sap sap nadal nie działa"
#     ]
docs = ["This is about about Messi Messi Messi Messi",
       "This is is about tfidf"]
tfidf_matrix = vectorizer.fit_transform(docs)

In [4]:
feature_names = vectorizer.get_feature_names()
dense = tfidf_matrix.todense()

In [5]:
df = pd.DataFrame(dense.transpose(), index=feature_names, columns=docs)
df


Out[5]:
This is about about Messi Messi Messi Messi This is is about tfidf
about 0.326141 0.354100
is 0.163070 0.708199
messi 0.916760 0.000000
tfidf 0.000000 0.497675
this 0.163070 0.354100

In [6]:
pd.DataFrame(vectorizer.idf_-1,index=feature_names) # <- dodałem -1 do idf ;)


Out[6]:
0
about 0.000000
is 0.000000
messi 0.405465
tfidf 0.405465
this 0.000000

Wnioski

Na tej podstawie można ocenić, które wyrazy mają niski tfidf, czyli nie różnicują i można próbować je usunąc aby zrobić miejsce dla rzadszych wyrazów, które bez tego nie ząłapałyby się do limitu tokenizera :)

p.s. wartości tfidf nie zgadzają się z tymi z https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/ bo stosujemy inny wzór ale to nie wpływa na sposób wnioskowania.


In [ ]: