|
from typing import Dict, Any, Iterable |
|
from sklearn import TfIdfVectorizer |
|
import wordcloud |
|
from pydantic import BaseModel |
|
|
|
|
|
class WordCloudExtractor: |
|
|
|
tfidf_params: Dict[str, Any] |
|
|
|
def extract_from_corpus(self, texts: Iterable[str], n_words: int) -> wordcloud.WordCloud: |
|
pass |
|
from sklearn.feature_extraction.text import TfidfVectorizer |
|
from wordcloud import WordCloud |
|
import numpy as np |
|
|
|
class TextVisualization: |
|
@staticmethod |
|
def extract_from_corpus(texts, max_features=100): |
|
""" |
|
Extract word frequencies from a corpus using TF-IDF vectorization |
|
and generate word cloud frequencies. |
|
|
|
Args: |
|
texts: List of text documents |
|
max_features: Maximum number of words to include |
|
|
|
Returns: |
|
Dictionary of word frequencies suitable for WordCloud |
|
""" |
|
|
|
tfidf = TfidfVectorizer( |
|
max_features=max_features, |
|
stop_words='english', |
|
lowercase=True |
|
) |
|
|
|
|
|
tfidf_matrix = tfidf.fit_transform(texts) |
|
|
|
|
|
feature_names = tfidf.get_feature_names_out() |
|
|
|
|
|
mean_tfidf = np.array(tfidf_matrix.mean(axis=0)).flatten() |
|
|
|
|
|
frequencies = dict(zip(feature_names, mean_tfidf)) |
|
|
|
return frequencies |
|
|