2017-06-05 37 views
0

我在机器学习之前做了一些文本预处理。我有两个特点(熊猫系列) - abstracttitle - 并使用以下功能对数据进行预处理(给人一种numpy的阵列,其中每行包含一个训练样本的特征):TF-IDF NLTK预处理后的权重

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

从我看到的,你有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)格式矩阵在那里你可以变身以后再用数组排列。

tfidf_model.vocabulary_将包含干扰词的词典映射到id。