【发布时间】:2018-03-15 02:18:31
【问题描述】:
正如这里Python Tf idf algorithm 所建议的那样,我使用此代码来获取一组文档中单词的频率。
import pandas as pd
import csv
import os
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk import word_tokenize
from nltk.stem.porter import PorterStemmer
import codecs
def tokenize(text):
tokens = word_tokenize(text)
stems = []
for item in tokens: stems.append(PorterStemmer().stem(item))
return stems
with codecs.open("book1.txt",'r','utf-8') as i1,\
codecs.open("book2.txt",'r','utf-8') as i2,\
codecs.open("book3.txt",'r','utf-8') as i3:
# your corpus
t1=i1.read().replace('\n',' ')
t2=i2.read().replace('\n',' ')
t3=i3.read().replace('\n',' ')
text = [t1,t2,t3]
# word tokenize and stem
text = [" ".join(tokenize(txt.lower())) for txt in text]
vectorizer = TfidfVectorizer()
matrix = vectorizer.fit_transform(text).todense()
# transform the matrix to a pandas df
matrix = pd.DataFrame(matrix, columns=vectorizer.get_feature_names())
# sum over each document (axis=0)
top_words = matrix.sum(axis=0).sort_values(ascending=False)
top_words.to_csv('dict.csv', index=True, float_format="%f",encoding="utf-8")
在最后一行,我创建了一个 csv 文件,其中列出了所有单词及其频率。有没有办法给它们贴上标签,看看一个词是只属于第三个文件,还是属于所有?
我的目标是从 csv 文件中删除所有仅出现在第三个文档中的单词 (book3)
【问题讨论】:
-
您在该答案中缺少部分代码,特别是
tokenize()函数。 -
@Gabriel 对,对不起,我添加了它
-
您仍然缺少
word_tokenize()和PorterStemmer()导入。请确保您的代码运行,如果它没有清楚地解释发生了什么以及您希望它做什么。 -
@Gabriel 我错过了导入,抱歉
-
(现在您正在添加不需要的导入:
csv和os)如果您的目标是删除第 3 本书中出现的所有单词,为什么还要阅读它呢?你不能从一开始就简单地忽略它吗?如果是这样,为什么不呢?
标签: python csv export-to-csv tf-idf sklearn-pandas