如何将 tfidfvectorizer 的功能从英语修改为西班牙语

问题描述 投票:0回答:1

我有一个 tfidfvectorizer,它适合英语文本数据来预测英语通话的情绪。任务是将其转换为西班牙语。我想使用此 tfidfvectorizers 的权重,并希望将功能从英语转换为西班牙语,例如“谢谢”变成“gracias”并使用旧的重量。所以本质上我想使用相同的 tfidf 矢量器,但修改了特征名称。有人可以建议一些方法在 Python 中做到这一点吗?

带有解决方案的代码。

python machine-learning nlp translation tfidfvectorizer
1个回答
0
投票

我尝试了 googletrans 库。效果不太好。然后我使用翻译库。它有效。

依赖性:

Python:3.10.9 翻译:3.6.1

from sklearn.base import TransformerMixin
from sklearn.feature_extraction.text import TfidfVectorizer
from translate import Translator as Translate


class TextTranslator(TransformerMixin):
    def __init__(self, source_lang='en', target_lang='es'):
        self.translator = Translate(to_lang=target_lang)

    def translate_text(self, text):
        return self.translator.translate(text)

    def transform(self, X, y=None):
        return [self.translate_text(text) for text in X]

    def fit(self, X, y=None):
        return self


# English to Spanish TF-IDF Vectorizer
english_tfidf_vectorizer = TfidfVectorizer()
english_text = ["thank you", "good morning", "hello world"]
english_tfidf = english_tfidf_vectorizer.fit_transform(english_text)

# Translate feature names from English to Spanish
translator = TextTranslator()
spanish_feature_names = translator.transform(english_tfidf_vectorizer.get_feature_names_out())

# Create a new TF-IDF Vectorizer with translated feature names
spanish_tfidf_vectorizer = TfidfVectorizer(vocabulary=spanish_feature_names)

# Use the weights of the old TF-IDF Vectorizer with the new one
spanish_tfidf = spanish_tfidf_vectorizer.fit_transform(translator.transform(english_text))


# Print the translated text
print("Translated text:")
for translated_text in translator.transform(english_text):
    print(translated_text)

# Print the Spanish TF-IDF matrix
print("\nSpanish TF-IDF Matrix:")
print(spanish_tfidf.toarray())

定义一个自定义转换器 TextTranslator,它使用翻译库将文本从英语翻译成西班牙语。

在英文文本数据上拟合原始 TF-IDF 矢量器。

使用 TextTranslator 将 TF-IDF 矢量器的特征名称(词汇)从英语翻译为西班牙语。

使用翻译后的特征名称创建一个新的 TF-IDF 矢量器,并使用它来转换英文文本数据。

© www.soinside.com 2019 - 2024. All rights reserved.