我试图一种又一种地使用多种信息检索技术。我希望每一个文本都以完全相同的方式进行预处理。我的预处理文本以单词列表的形式提供。不幸的是,scikit-learns TfidfVectorizer似乎只接受字符串列表。目前我正在这样做(这当然是非常低效的):
from sklearn.feature_extraction.text import TfidfVectorizer
train_data = [["the","sun","is","bright"],["blue","is","the","sky"]]
tfidf = TfidfVectorizer(tokenizer=lambda i:i.split(","))
converted_train = map(lambda i:",".join(i), train_data)
result_train = tfidf.fit_transform(converted_train)
有没有一种方法可以使用scikit-learns TfidfVectorizer对这类预处理数据直接执行信息检索?
如果不是,是否可以让TfidfVectorizer进行预处理,然后再使用其预处理的数据?
最佳答案
我自己找到了答案。我的问题是,我只是简单地将None用作TfidfVectorizer的令牌生成器:
tfidf = TfidfVectorizer(tokenizer=None)
您必须改为使用仅转发数据的令牌生成器。另外,您还必须确保矢量化程序不会将列表转换为小写形式(这是行不通的)。一个有效的示例是:
from sklearn.feature_extraction.text import TfidfVectorizer
train_data = [["the","sun","is","bright"],["blue","is","the","sky"]]
tfidf = TfidfVectorizer(tokenizer=lambda i:i, lowercase=False)
result_train = tfidf.fit_transform(train_data)
关于python - TFIDF与先前预处理的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31330584/