And*_*ise 7 python machine-learning tf-idf scikit-learn
Scikit-Learn的TfidfVectorizer将原始文档集合转换为TF-IDF特征矩阵.我希望将功能名称矩阵转换为TF-IDF功能,而不是原始文档.
您提供的语料库fit_transform()应该是一组原始文档,但我希望能够为每个文档提供一系列特征数组(或类似函数).例如:
corpus = [
['orange', 'red', 'blue'],
['orange', 'yellow', 'red'],
['orange', 'green', 'purple (if you believe in purple)'],
['orange', 'reddish orange', 'black and blue']
]
Run Code Online (Sandbox Code Playgroud)
...而不是一维字符串数组.
我知道我可以为TfidfVectorizer定义我自己的词汇表,所以我可以轻松地在我的语料库中创建一个独特特征的词典,并在特征向量中创建它们的索引.但是该函数仍然需要原始文档,并且因为我的功能有不同的长度并偶尔重叠(例如,'orange'和'reddish orange'),所以我不能将我的功能连接成单个字符串并使用ngrams.
是否有我可以使用的不同的Scikit-Learn功能,我找不到?有没有办法使用我没见过的TfidfVectorizer?或者我必须自制自己的TF-IDF功能吗?
And*_*ise 11
您可以编写自定义函数来覆盖内置的预处理器和标记生成器.
来自文档:
预处理程序 - 一个可调用的,它将整个文档作为输入(作为单个字符串),并返回文档的可能转换版本,仍然作为整个字符串.这可用于删除HTML标记,小写整个文档等.
Tokenizer - 一个可调用的,它从预处理器获取输出并将其拆分为标记,然后返回这些标记的列表.
在这种情况下,没有要执行的预处理(因为没有原始文档).标记化也是不必要的,因为我们已经有了特征数组.因此,我们可以做到以下几点:
tfidf = TfidfVectorizer(preprocessor=lambda x: x, tokenizer=lambda x: x)
tfidf_matrix = tfidf.fit_transform(corpus)
Run Code Online (Sandbox Code Playgroud)
我们通过简单地传递整个语料库来跳过预处理器和标记器步骤lambda x: x.一旦内置分析器接收到特征数组,它就会自行构建词汇表并在"标记化"语料库上执行TF-IDF.