1. 程式人生 > >Pyhton 基於scikit的TFIDF特徵抽取如何使用

Pyhton 基於scikit的TFIDF特徵抽取如何使用

  在對文字分析中 抽取特徵有很多方法,TF-IDF方法抽取文字特徵詞效果還是很不錯的,TF-IDF方法可以表徵一個詞的辨識度,比較官方的解釋是:TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式常被搜尋引擎應用,作為檔案與使用者查詢之間相關程度的度量或評級。除了TF-IDF以外,因特網上的搜尋引擎還會使用基於連結分析的評級方法,以確定檔案在搜尋結果中出現的順序。

那麼在實際工程應用中我們該如何提取文件的TF-IDF值呢,scikit-learn已經提供了一套非常完善的方法了,怎麼用就直接上程式碼了,在處理過程中經常會遇到一些字串編碼的問題,解決方法可以參考

這裡

#-*-coding:utf8-*-
from sklearn.feature_extraction.text import TfidfVectorizer
from keras.preprocessing import text
from collections import OrderedDict
import os

max_word_length = 30
min_word_length = 3


class TFIDFExtractor:
    def __init__(self, sample_folder, topn):
        self._sample_folder = sample_folder
        self._topn = topn # select the topn keywords by tfidf value
        self._to_vectorize_word = []   # the word is filtered by simple rule (max_word_length > length > min_word_length)
        self._words = []
        self._wordweight = [[]]
        self._topn_word = {}


    def extract_word_vector(self):
        for root, dirs, samples in os.walk(self._sample_folder):
            for sample in samples:
                with open(os.path.join(root, sample), 'r+') as fd:
                    words = text.text_to_word_sequence(fd.read(),
                                               filters='!"#$%&()*+,-./:;<=>
[email protected]
[\\]^_`{|}~\t\n', lower=True, split=" ") line = '' for word in words: if min_word_length < len(word) < max_word_length: line += word + ' ' line.rstrip(' ') self._to_vectorize_word.append(line) def compute_tfidf(self): print 'compute tfidf' try: vectorizer = TfidfVectorizer() self._wordweight = vectorizer.fit_transform(self._to_vectorize_word).toarray() self._words = vectorizer.get_feature_names() except UnicodeDecodeError: print 'get exception' def extracto_topn_keyword(self): print 'extract topn words' rows = len(self._wordweight) columns = len(self._wordweight[0]) new_arr = [[r[col] for r in self._wordweight] for col in xrange(columns)] for i in range(len(self._words)): self._topn_word[self._words[i]] = max(new_arr[i]) def get_topn_keyword(self): return self._topn_word.keys() def dump_topn_word_tofile(self): ordered_dict = OrderedDict(sorted(self._topn_word.items(), key=lambda x: x[1], reverse=True)) with open(os.path.join(os.getcwd(), 'TFIDF_Sorted.txt'), 'w+') as fd: for key, value in ordered_dict.items(): try: fd.write((key +':' + str(value))) fd.write(',\n') except UnicodeEncodeError: print 'encode error' def auto(self): self.extract_word_vector() self.compute_tfidf() self.extracto_topn_keyword() self.dump_topn_word_tofile()


相關推薦

Pyhton 基於scikit的TFIDF特徵抽取如何使用

  在對文字分析中 抽取特徵有很多方法,TF-IDF方法抽取文字特徵詞效果還是很不錯的,TF-IDF方法可以表徵一個詞的辨識度,比較官方的解釋是:TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的

【機器學習--opencv3.4.1版本基於Hog特徵描述子Svm對經典手寫數字識別】

 方向梯度直方圖(Histogram of Oriented Gradient, HOG)特徵是一種在計算機視覺和影象處理中用來進行物體檢測的特徵描述子。HOG特徵通過計算和統計影象區域性區域的梯度方向直方圖來構成特徵。 #include <iostream> #inc

機器學習特徵值特徵抽取

根據文字的的特徵值,進行特徵值的抽取 from sklearn.feature_extraction import DictVectorizer from sklearn.feature_extraction.text import CountVectorizer def coun

基於物件特徵的推薦

(本實驗選用資料為真實電商脫敏資料,僅用於學習,請勿商用) 在上一期基於協同過濾的的推薦場景中,我們介紹瞭如何通過PAI快速搭建一個基於協同過濾方案的推薦系統,這一節會介紹一些如何基於推薦物件特徵的推薦方法。 首先看下整個業務流程圖,這是一個基於物件特徵的推薦場景的通用流程: 首先把資料匯入M

Deep Feature Interpolation for Image Content Changes(基於深度特徵插值的影象屬性轉換方法)

引言: 我們提供了一種基於深度特徵插值的方法,一種線性資料驅動的自動化高維空間轉換的方法,就如名字所說的,DFI僅僅基於使用經過預訓練的深度卷積特徵簡單的線性插值。我們發現雖然其方法比較簡單,但是DFI能夠顯示高水準的風格轉換例如在“臉部年輕化和衰老轉化”,“戴眼鏡”,“新

OpenCV中基於Haar特徵和級聯分類器的人臉檢測(三)

使用機器學習的方法進行人臉檢測的第一步需要訓練人臉分類器,這是一個耗時耗力的過程,需要收集大量的正負樣本,並且樣本質量的好壞對結果影響巨大,如果樣本沒有處理好,再優秀的機器學習分類演算法都是零。 今年3月23日,微軟公司在推特(Twitter)社交平臺上推出了一個基於機

乾貨 | Matlab實現單目視覺里程計基於SURF特徵(程式碼類)

博主github:https://github.com/MichaelBeechan    博主CSDN:https://blog.csdn.net/u011344545  SURF特徵提取參考:https://blog.csdn.net/u01134454

NLP原理,本質,資訊理論,文字特徵抽取和預處理

自然語言處理基本概念 語言的數學本質 語言的出現是為了通訊,通訊的本質是為了傳遞資訊。字母,文字,數字都是資訊編碼的不同單元。任何一種語言都是一種編解碼演算法。 我們通過語言把要表達的意思傳遞出來,實際上就是用語言將大腦中的資訊進行了一次編碼,形成了一串文字。

CountVectorizer與TfidfVectorizer 對文字特徵特徵抽取

對新聞文字資料使用CountVectorizer與TfidfVectorizer  抽取特徵,使用樸素貝葉斯進行分類。 # -*- coding:utf-8 -*- if __name__ == '__main__': print "hello" # 從sklearn.

基於LBP特徵的級聯分類器檢測與訓練原理解析

LBP特徵 LBP(Local Binary Pattern,區域性二值模式)是一種用來描述影象區域性紋理特徵的運算元;它具有旋轉不變性和灰度不變性等顯著的優點。它是首先由T. Ojala, M.Pietikäinen, 和 D. Harwood 在199

字典特徵抽取

#特徵抽取 feature_extraction #導包 # from sklearn.feature_extraction.text import CountVectorizer # # vector = CountVectorizer() # # res = vector.fit_tra

機器學習 -- 1 特徵抽取

1 概述 使用Scikit-learn提供的特徵抽取API進行特徵的抽取 字典特徵抽取 from sklearn.feature_extraction import DictVectorizer # 1 例項化DictVectorizer def dicvec(

2_Python實現基於人臉特徵的美顏演算法(20181224)

Python實現基於人臉特徵的美顏演算法(20181224) https://zhuanlan.zhihu.com/p/29718304 https://github.com/BradLarson/GPUImage https://bl

特徵抽取特徵選擇

特徵抽取:特徵抽取後的新特徵是原來特徵的一個對映 特徵選擇:特徵選擇後的特徵是原來特徵的一個子集 特徵抽取的方法主要是通過屬性間的關係,如組合不同的屬性得到新的屬性,這樣就改變了原來的特徵空間。 特徵選擇的方法是從原始特徵資料集中選擇出子集,是一種包含關係,沒有改變原始的

用Python開始機器學習(5:文字特徵抽取與向量化)

假設我們剛看完諾蘭的大片《星際穿越》,設想如何讓機器來自動分析各位觀眾對電影的評價到底是“贊”(positive)還是“踩”(negative)呢? 這類問題就屬於情感分析問題。這類問題處理的第一步,就是將文字轉換為特徵。 因此,這章我們只學習第一步,如何從文字中抽取特徵,並將其向量化。 由於中文的處理涉及

基於SVM特徵選擇的問題記錄

E:\Project_CAD\venv\lib\site-packages\sklearn\svm\base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the numbe

sparkmllib 特徵抽取特徵轉換及特徵選擇

特徵抽取 TF-IDF TF-IDF一般應用於文字挖掘中,用來反映一個特徵項的重要性。設特徵項為 t,文件為d,文件集為D。特徵頻率( term frequency)TF(t,d) 為特徵項在文件d中出現在次數。 文件頻率(document freque

14.【進階】特徵提升之特徵抽取----DictVectorizer

說明:DictVectorizer的處理物件是符號化(非數字化)的但是具有一定結構的特徵資料,如字典等,將符號轉成數字0/1表示。 #-*- coding:utf-8 -*- #學習目標:使用DictVectorizer對使用字典儲存的資料進行特徵抽取和

OpenCV2學習筆記(十三):基於SURF特徵的影象匹配

SURF演算法是著名的尺度不變特徵檢測器SIFT(Scale-Invariant Features Transform)的高效變種,它為每個檢測到的特徵定義了位置和尺度,其中尺度的值可用於定義圍繞特徵點的視窗大小,使得每個特徵點都與眾不同。這裡便是使用SURF演

機器學習特徵工程之特徵抽取

1.資料集 資料集是特徵抽取的源資料。常用資料集的結構組成:特徵值+目標值。 資料中對於特徵的處理 pandas:一個數據讀取非常方便以及基本的處理格式的工具。 sklearn:對於特徵的處理提供了強大的介面。 2.資料的特徵工程 2