CountVectorizer方法對中文進行特征提取

来源:https://www.cnblogs.com/henabo/archive/2019/09/25/11588437.html
-Advertisement-
Play Games

CountVectorizer方法進行特征提取 from sklearn.feature.extraction.text import CountVectorizer 這個方法根據分詞進行數量統計繼續文本分類 文本特征提取 作用:對文本進行特征值化 sklearn.feature_extractio ...


方法一:CountVectorizer方法進行特征提取

from sklearn.feature.extraction.text import CountVectorizer

這個方法根據分詞進行數量統計繼續文本分類

文本特征提取

作用:對文本進行特征值化

sklearn.feature_extraction.text.CountVectorizer(stop_words = [])

 返回:詞頻矩陣

CountVectorizer.fit_transform(X) X:文本或者包含文本字元串的可迭代對象

 返回:sparse矩陣 在後面加上 .toarray() 可以轉換為二維數組

CountVectorizer.inverse_transform(X) X:array數組或者sparse矩陣

 返回:轉換之前數據格

CountVectorizer.get_feature_names()

 返回:單詞列表,也可以說是返回特征名字



中文特征提取舉例(手動分詞)

from sklearn.feature_extraction.text import CountVectorizer
#中文 需要分詞,否則是以整句作為一個詞。英文則不需要,因為英文單詞本來就有空格
def chinese_text_count_demo():
    data = ["我 愛 北京 天安門", "天安門 上 太陽 升"]
    
    # 1、實例化一個轉換器類(為什麼叫轉化器,因為是將 文本 轉化為 數值)
    transfer = CountVectorizer()
    
    # 2、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    
    return None

if __name__ == '__main__':
    chinese_text_count_demo()

輸出結果:
data_new:
 [[1 1 0]
 [0 1 1]]
特征名字:
 ['北京', '天安門', '太陽']

解析:上面第一行表示的是,data第一句話

數字表示的是,這個 特征詞 出現的次數

中文特征提取舉例(使用jieba分詞)

首先你需要在自己的cmd命令行中下載jieba

pip3 install jieba / pip install jieba

from sklearn.feature_extraction.text import CountVectorizer
import jieba

def cut_word(text):
    #進行中文分詞
    return " ".join(list(jieba.cut(text)))
    # jieba.cut(text)返回的是一個生成器對象,需要轉換為迭代器
    #return "".join(jieba.lcut(text))
    #jieba.cut(text)直接返回一個列表list

def auto_chinese_text_count_demo():
    data = ["你說這該怎麼辦"
           ,"唐龍大聲問怎麼回事"
           ,"晚上找個地方喝幾盅怎麼樣"
           ,"老忠領他們到朱老明那裡站在大柏樹墳前說你看看這個地勢怎麼樣我們的人要是從城裡過來經過大渡口或是小渡口沿著千里堤"]
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    
    print("句子分詞後:\n", data_new)
    
    # 1、實例化一個轉換器類
    transfer = CountVectorizer(stop_words = ["",""])#停頓詞應該預處理清理,這裡只是示範
    
    # 2、調用fit_transform
    data_vector_value = transfer.fit_transform(data_new)
    print("data_vector_value:\n", data_vector_value.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    
    return None
    
    
if __name__ =='__main__':
    auto_chinese_text_count_demo()


輸出結果:
句子分詞後:
 ['你 說 這 該 怎麼辦', '唐龍 大聲 問 怎麼回事', '晚上 找個 地方 喝 幾盅 怎麼樣', '老忠領 他們 到 朱老明 那裡 站 在 大柏樹 墳前 說 你 看看 這個 地勢 怎麼樣 我們 的 人 要 是從 城裡 過來 經過 大渡口 或是 小 渡口 沿著 千里 堤']
data_vector_value:
 [[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0]
 [1 0 1 0 1 0 1 1 0 1 1 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1]]
特征名字:
 ['他們', '幾盅', '千里', '唐龍', '地勢', '地方', '墳前', '城裡', '大聲', '大柏樹', '大渡口', '怎麼辦', '怎麼回事', '怎麼樣', '我們', '或是', '找個', '是從', '晚上', '朱老明', '沿著', '渡口', '看看', '經過', '老忠領', '過來', '這個', '那裡']

 

方法二:TfidfVectorizer方法進行特征提取

from sklearn.feature_extraction.text import TfidfVectorizer

sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None)

返回:權重矩陣

TfidfVectorizer.fit_transform(X)

X:文本或者包括文本字元串的可迭代對象

返回:sparse矩陣

TfidfVectorizer.inverse_transform(X)

X:array數組或者sparse矩陣

返回:轉換之前數據格式

TfidfVectorizer.get_feature_names()

返回:單詞列表,也可以說是特征名字

 

TfidfVectorizer衡量的就是一個詞在文章中的重要程度

TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現的概率高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力。(適合:分類)

TF-IDF作用:用以評估一字詞對於一個文件集或一個語料庫中的其中一份文件的重要程度。

TfidfVectorizer = TF + IDF

  --> TF   - 詞頻(term frequency,tf)

  --> IDF - 逆向文檔頻率(inverse document frequency, idf)

  舉例:

  假設現在有兩個關鍵詞“經濟”,“非常”。

  現在基礎數據是1000篇文章的語料庫。其中1000篇文章“非常”一詞出現的頻率很高,10篇文章“經濟”一詞出現的很高。

  計算公式:

  TF(詞頻)= 出現的頻率/總次數

  IDF(逆向文檔頻率) = log10 (文件總數/包含該詞語的文件數目)

  TF-IDF = TF * IDF

  要求計算:

  現有兩篇文章

  文章A(100詞):10次“經濟” TF-IDF:0.2

    tf:10/100 = 0.1

    idf:lg (1000/10) = 2

  文章B(100詞):10次“非常” TF-IDF:0.1

    tf:10/100 = 0.1

    idf:lg (1000/100) = 1


from sklearn.feature_extraction.text import TfidfVectorizer
import jieba

def cut_word(text):
    #進行中文分詞
    return " ".join(list(jieba.cut(text)))
    # jieba.cut(text)返回的是一個生成器對象,需要轉換為迭代器
    #return "".join(jieba.lcut(text))
    #jieba.cut(text)直接返回一個列表list

def tf_idf_demo():
    data = ["你說這該怎麼辦"
           ,"唐龍大聲問怎麼回事"
           ,"晚上找個地方喝幾盅怎麼樣"
           ,"老忠領他們到朱老明那裡站在大柏樹墳前說你看看這個地勢怎麼樣我們的人要是從城裡過來經過大渡口或是小渡口沿著千里堤"]
    
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    
    transfer = TfidfVectorizer( stop_words = ["",""])
    
    data_feature_value = transfer.fit_transform(data_new)
    print("data_feature_value:\n", data_feature_value.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    
    return None

if __name__ =='__main__':
    tf_idf_demo()


輸出結果:
data_feature_value:
 [[0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         1.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.         0.57735027 0.         0.
  0.         0.         0.57735027 0.         0.         0.
  0.57735027 0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.         0.46516193 0.         0.         0.         0.46516193
  0.         0.         0.         0.         0.         0.
  0.         0.36673901 0.         0.         0.46516193 0.
  0.46516193 0.         0.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.22575266 0.         0.22575266 0.         0.22575266 0.
  0.22575266 0.22575266 0.         0.22575266 0.22575266 0.
  0.         0.17798599 0.22575266 0.22575266 0.         0.22575266
  0.         0.22575266 0.22575266 0.22575266 0.22575266 0.22575266
  0.22575266 0.22575266 0.22575266 0.22575266]]
特征名字:
 ['他們', '幾盅', '千里', '唐龍', '地勢', '地方', '墳前', '城裡', '大聲', '大柏樹', '大渡口', '怎麼辦', '怎麼回事', '怎麼樣', '我們', '或是', '找個', '是從', '晚上', '朱老明', '沿著', '渡口', '看看', '經過', '老忠領', '過來', '這個', '那裡']

 

 

參考鏈接:https://www.cnblogs.com/ftl1012/p/10498480.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 場景 Ubuntu Server 上使用Docker Compose 部署Nexus(圖文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101111611 在上面已經實現部署Nexus後的效果是 為什麼要搭建私服 有時合 ...
  • 程式結構設計理論 作者:鄧能財 2019年9月24日 個人簡介 姓名:鄧能財 年齡:26 畢業學校:東華理工大學 院系:理學院 專業:信息與計算科學 郵箱:[email protected] [明德厚學,愛國榮校] 本文的PPT版、以及作為案例的App項目可以從這裡下載: "程式結構設計理論(And ...
  • 概述 簡單介紹一下七大設計原則: 開閉原則 :是所有面向對象設計的核心,對擴展開放,對修改關閉 依賴倒置原則 :針對介面編程,依賴於抽象而不依賴於具體 單一職責原則 :一個介面只負責一件事情,只能有一個原因導致類變化 介面隔離原則 :使用多個專門的介面,而不是使用一個總介面 迪米特法則(最少知道原則 ...
  • 設計模式 七大設計原則(一) 概述 簡單介紹一下七大設計原則: 開閉原則:是所有面向對象設計的核心,對擴展開放,對修改關閉 依賴倒置原則:針對介面編程,依賴於抽象而不依賴於具體 單一職責原則:一個介面只負責一件事情,只能有一個原因導致類變化 介面隔離原則:使用多個專門的介面,而不是使用一個總介面 迪 ...
  • 官網:www.fhadmin.org 特別註意: Springboot 工作流 前後分離 + 跨域 版本 (許可權控制到菜單和按鈕) 後臺框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+介面 前端頁面:html +vue.js 形式 jquery aj ...
  • 前言 我們學習瞭解完了創建型設計模式和結構型設計模式,今天我們開始學習並瞭解行為型設計模式。今天我們首先來看這麼一個設計模式——模板方法模式。這個模式我們在平常開發中總會不自覺的使用到。就像我們平時一樣的各種網站模板、建立模板、PPT模板等等。啥意思呢?簡單,也就是把共同的東西拿出來,你需要具體去實 ...
  • 一 創建模型 表和表之間的關係 一對一、多對一、多對多 ,用book表和publish表自己來想想關係,想想裡面的操作,加外鍵約束和不加外鍵約束的區別,一對一的外鍵約束是在一對多的約束上加上唯一約束。 實例:我們來假定下麵這些概念,欄位和關係 作者模型:一個作者有姓名和年齡。 作者詳細模型:把作者的 ...
  • 2019-09-25-23:28:09 內置函數的使用 一.數據類型(4種) 1.int() 2.float() 這個是浮點數 3.bool() 4.complex() 創建一個複數. 第一個參數為實部, 第二個參數為虛部(感覺會很少用到這個) 二.進位轉換 1.bin() 將給的參數轉換成二進位 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...