我在机器学习之前做了一些文本预处理。我有两个功能(熊猫系列) - abstract
和title
- 并使用以下函数预处理数据(给出一个numpy数组,其中每行包含一个训练示例的功能):
def preprocessText(data):
stemmer = nltk.stem.porter.PorterStemmer()
preprocessed = []
for each in data:
tokens = nltk.word_tokenize(each.lower().translate(xlate))
filtered = [word for word in tokens if word not in stopwords]
preprocessed.append([stemmer.stem(item) for item in filtered])
print(Counter(sum([list(x) for x in preprocessed], [])))
return np.array(preprocessed)
我现在需要使用TF-IDF来加权这些功能 - 我该怎么做?
答案 0 :(得分:0)
从我看到的,您有preprocessed
变量中已过滤的单词列表。进行TF-IDF转换的一种方法是使用scikit-learn
,TfidfVectorizer
。但是,该类会为您标记空间,即您可以提供每个包含字符串的已处理文档列表。因此,您必须将代码编辑为:
preprocessed.append(' '.join([stemmer.stem(item) for item in filtered]))
然后您可以按如下方式转换文档列表
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_model = TfidfVectorizer() # specify parameters here
X_tfidf = tfidf_model.fit_transform(preprocessed)
输出将是稀疏压缩稀疏行(CSR)格式的矩阵,您可以在以后转换为numpy数组。
tfidf_model.vocabulary_
将包含词干词组的字典地图。