nun*_*usa 3 python nlp machine-learning tf-idf scikit-learn
我有一组维基百科的文本.
使用tf-idf,我可以定义每个单词的权重.以上是代码:
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
wiki = pd.read_csv('people_wiki.csv')
tfidf_vectorizer = TfidfVectorizer(max_features= 1000000)
tfidf = tfidf_vectorizer.fit_transform(wiki['text'])
Run Code Online (Sandbox Code Playgroud)
目标是查看tf-idf列中显示的权重:
文件'people_wiki.csv'在这里:
TfidfVectorizer有一个vocabulary_属性,对你想要的东西非常有用.此属性是字典,其中单词作为键,单词具有相应的列索引作为值.
对于下面的例子,我想要该字典的反转,我使用字典理解.
tfidf_vec = TfidfVectorizer()
transformed = tfidf_vec.fit_transform(raw_documents=['this is a quick example','just to show off'])
index_value={i[1]:i[0] for i in tfidf_vec.vocabulary_.items()}
Run Code Online (Sandbox Code Playgroud)
index_value 将进一步用作查找表.
fit_transform返回压缩稀疏行格式矩阵.对您想要实现的目标有用的属性是indices和data.indices返回实际包含数据的所有索引并data返回这些索引中的所有数据.
循环返回的transformed稀疏矩阵如下.
fully_indexed = []
for row in transformed:
fully_indexed.append({index_value[column]:value for (column,value) in zip(row.indices,row.data)})
Run Code Online (Sandbox Code Playgroud)
返回包含以下内容的词典列表.
[{'example': 0.5, 'is': 0.5, 'quick': 0.5, 'this': 0.5},
{'just': 0.5, 'off': 0.5, 'show': 0.5, 'to': 0.5}]
Run Code Online (Sandbox Code Playgroud)
请注意,这样做只会返回特定文档的非零值.查看我的示例中的第一个文档,'just', 0.0字典中没有键值对.如果你想包括那些你需要稍微调整一下最后字典理解的那些.
像这样
fully_indexed = []
transformed = np.array(transformed.todense())
for row in transformed:
fully_indexed.append({index_value[column]:value for (column,value) in enumerate(row)})
Run Code Online (Sandbox Code Playgroud)
我们创建一个密集版本的矩阵作为numpy数组循环在numpy数组的每一行枚举内容,然后填充字典列表.这样做会导致输出也包括文档中不存在的所有单词.
[{'example': 0.5,'is': 0.5,'just': 0.0,'off': 0.0,'quick': 0.5,'show': 0.0,'this': 0.5,'to': 0.0},
{'example': 0.0,'is': 0.0,'just': 0.5,'off': 0.5,'quick': 0.0,'show': 0.5,'this': 0.0,'to': 0.5}]
Run Code Online (Sandbox Code Playgroud)
然后,您可以将字典添加到数据框中.
df['tf_idf'] = fully_indexed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |