从 sklearn 输出中获取 tf / tfidf
Getting tf / tfidf from sklearn output
我的数据框是
df = pd.DataFrame({"person":['A','B','C'],"url":["google.kr","whosebug.com","yahoo.us"],"weight":[5,10,15]})
df2 = df.loc[np.repeat(df.index.values,df.weight)]
tfidf 是:
v = TfidfVectorizer(token_pattern='\S+',smooth_idf=False,norm=None)
x = v.fit_transform(df2['url'])
我使用
提取 idf
v.idf_
在漂亮的格式化数组中给出 idf。
我正在努力提取 tfidf 或仅提取 tf。
# for tfidf
x.toarray()
# for tf
v = CountVectorizer(token_pattern='\S+')
x = v.fit_transform(df2['url'])
x.toarray()
这给了我一个只包含 0,1 的数组。
对于词频 (TF),计数向量器正在计算 df2
每一行中每个标记的出现次数。换句话说,当您查看 df2
时,您会发现每一行中都会出现一个标记,这就是它为 1 或 0 的原因。因此,您必须对每列计数求和以获得整个行中的词频整个数据框,我想这就是你想要的?
# for tf
v = CountVectorizer(token_pattern='\S+')
x = v.fit_transform(df2['url'])
# gets term frequencies for each token
[sum(l) for l in list(zip(*x.toarray()))]
# see which tokens are which element
v.vocabulary_
输出
[5, 10, 15]
{'google.kr': 0, 'whosebug.com': 1, 'yahoo.us': 2}
zip
方法只是从数组中取消每个 'column' 的嵌套。如果你以前没有看过,你可以了解更多here。
你已经知道的 IDF,所以 TF-IDF 是 tf * idf
。
我的数据框是
df = pd.DataFrame({"person":['A','B','C'],"url":["google.kr","whosebug.com","yahoo.us"],"weight":[5,10,15]})
df2 = df.loc[np.repeat(df.index.values,df.weight)]
tfidf 是:
v = TfidfVectorizer(token_pattern='\S+',smooth_idf=False,norm=None)
x = v.fit_transform(df2['url'])
我使用
提取 idfv.idf_
在漂亮的格式化数组中给出 idf。
我正在努力提取 tfidf 或仅提取 tf。
# for tfidf
x.toarray()
# for tf
v = CountVectorizer(token_pattern='\S+')
x = v.fit_transform(df2['url'])
x.toarray()
这给了我一个只包含 0,1 的数组。
对于词频 (TF),计数向量器正在计算 df2
每一行中每个标记的出现次数。换句话说,当您查看 df2
时,您会发现每一行中都会出现一个标记,这就是它为 1 或 0 的原因。因此,您必须对每列计数求和以获得整个行中的词频整个数据框,我想这就是你想要的?
# for tf
v = CountVectorizer(token_pattern='\S+')
x = v.fit_transform(df2['url'])
# gets term frequencies for each token
[sum(l) for l in list(zip(*x.toarray()))]
# see which tokens are which element
v.vocabulary_
输出
[5, 10, 15]
{'google.kr': 0, 'whosebug.com': 1, 'yahoo.us': 2}
zip
方法只是从数组中取消每个 'column' 的嵌套。如果你以前没有看过,你可以了解更多here。
你已经知道的 IDF,所以 TF-IDF 是 tf * idf
。