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