使用Sklearn的TfidfVectorizer变换

Ste*_*ing 36 python document text-mining tf-idf

我正在尝试使用Sklearn的TfidfVectorizer对象获取单个文档的tf-idf向量.我根据一些训练文档创建词汇表,并使用fit_transform训练TfidfVectorizer.然后,我想找到任何给定测试文档的tf-idf向量.

from sklearn.feature_extraction.text import TfidfVectorizer

self.vocabulary = "a list of words I want to look for in the documents".split()
self.vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', 
                 stop_words='english')
self.vect.fit_transform(self.vocabulary)

...

doc = "some string I want to get tf-idf vector for"
tfidf = self.vect.transform(doc)
Run Code Online (Sandbox Code Playgroud)

问题是这会返回一个包含n行的矩阵,其中n是我的doc字符串的大小.我希望它只返回一个代表整个字符串的tf-idf的向量.我怎样才能将字符串视为单个文档,而不是每个字符都是文档?另外,我对文本挖掘很新,所以如果我在概念上做错了,那就太棒了.任何帮助表示赞赏.

alk*_*lko 45

如果只想为给定的词汇表计算tf-idf,请使用构造函数的vocabulary参数TfidfVectorizer,

vocabulary = "a list of words I want to look for in the documents".split()
vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', 
           stop_words='english', vocabulary=vocabulary)
Run Code Online (Sandbox Code Playgroud)

然后,为了适应(即计算计数)给定的corpus,即可迭代的文档,使用fit:

vect.fit(corpus)
Run Code Online (Sandbox Code Playgroud)

方法fit_transform是缩短

vect.fit(corpus)
corpus_tf_idf = vect.transform(corpus) 
Run Code Online (Sandbox Code Playgroud)

最后,transform方法接受语料库,因此对于单个文档,您应该将其作为列表传递,或者将其视为符号的可迭代,每个符号都是文档.

doc_tfidf = vect.transform([doc])
Run Code Online (Sandbox Code Playgroud)

  • @Sterling你使用`fit`或`fit_transform`(参见更新)来训练tfidf转换,并使用`transform`来应用而不需要计数更新 (6认同)
  • 那么fit_transform和transform有什么区别?我已阅读文档,但我不清楚.我们使用fit_transform来计算文档列表中每个术语的出现次数?然后转换...获取那些计数并计算文件列表的tf-idf向量? (4认同)