2017-06-05 69 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。