2 votes

Stocker la matrice Tf-idf et mettre à jour la matrice existante sur les nouveaux articles dans pandas

J'ai un dataframe pandas avec une colonne text consiste en news articles . Donné comme:-

text
article1
article2
article3
article4

J'ai calculé les valeurs Tf-IDF pour les articles de la manière suivante : -.

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
matrix_1 = tfidf.fit_transform(df['text'])

Comme mon cadre de données est mis à jour de temps en temps. Ainsi, disons qu'après avoir calculé of-if comme matrice_1, mon cadre de données a été mis à jour avec plus d'articles. Quelque chose comme :

text
article1
article2
article3
article4
article5
article6
article7

Comme j'ai des millions d'articles, je veux stocker une matrice tf-IDF de l'article précédent et la mettre à jour avec les scores tf-IDF du nouvel article. L'exécution du code of-IDF pour tous les articles, encore et encore, consommerait beaucoup de mémoire. Existe-t-il un moyen de réaliser cette opération ?

0voto

aditya thakkar Points 157

Je n'ai pas testé ce code mais je pense que cela devrait fonctionner.

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

df = pd.DataFrame()
while True:
    if not len(df):
        # When you dataframe is populated for the very first time
        tfidf = TfidfVectorizer()
        matrix_1 = tfidf.fit_transform(df['text'].iloc[last_len:])
        last_len = len(df)
    else:
        # When you dataframe is populated again and again
        # If you have to use earlier fitted model
        matrix_1 = np.vstack(matrix_1, tfidf.transform(df['text'].iloc[last_len:]))
        # If you have to update tf-idf every time which is kinda doesn't make sense
        matrix_1 = np.vstack(matrix_1, tfidf.fit_transform(df['text'].iloc[last_len:]))
        last_len = len(df)

    # TO-DO Some break condition according to your case
    #####

Si la durée entre les mises à jour des cadres de données est plus longue, vous pouvez utiliser pickle sur matrix_1 pour stocker les résultats intermédiaires.

Cependant, ce que je ressens, c'est l'utilisation tfidf.fit_transform(df['text']) encore et encore sur différentes entrées ne vous donnera pas de résultats significatifs ou peut-être ai-je mal compris. A la vôtre !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X