NLTK预处理后的TF-IDF加权

时间:2017-06-05 18:59:02

标签: python preprocessor tf-idf

我在机器学习之前做了一些文本预处理。我有两个功能(熊猫系列) - abstracttitle - 并使用以下函数预处理数据(给出一个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来加权这些功能 - 我该怎么做?

1 个答案:

答案 0 :(得分:0)

从我看到的,您有preprocessed变量中已过滤的单词列表。进行TF-IDF转换的一种方法是使用scikit-learnTfidfVectorizer。但是,该类会为您标记空间,即您可以提供每个包含字符串的已处理文档列表。因此,您必须将代码编辑为:

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_将包含词干词组的字典地图。