Python實(shí)現(xiàn)文本特征提取的方法詳解
1.字典文本特征提取 DictVectorizer()
1.1 one-hot編碼
創(chuàng)建一個(gè)字典,觀察如下數(shù)據(jù)形式的變化:
import pandas as pd
from sklearn.feature_extraction import DictVectorizer
data = [{'city': '洛陽(yáng)', 'temperature': 39},
{'city': '成都', 'temperature': 41},
{'city': '寧波', 'temperature': 42},
{'city': '佛山', 'temperature': 38}]
df1 = pd.DataFrame(data)
print(df1)
# one-hot編碼 因?yàn)閠emperature是數(shù)值型的,所以會(huì)保留原始值,只有字符串類型的才會(huì)生成虛擬變量
df2 = pd.get_dummies(df1)
print(df2)
輸出如下:

1.2 字典數(shù)據(jù)轉(zhuǎn)sparse矩陣
使用DictVectorizer()創(chuàng)建字典特征提取模型
# 1.創(chuàng)建對(duì)象 默認(rèn)sparse=True 返回的是sparse矩陣; sparse=False 返回的是ndarray矩陣 transfer = DictVectorizer() # 2.轉(zhuǎn)化數(shù)據(jù)并訓(xùn)練 trans_data = transfer.fit_transform(data) print(transfer.get_feature_names_out()) print(trans_data)

使用sparse矩陣沒有顯示0數(shù)據(jù),節(jié)約了內(nèi)存,更為簡(jiǎn)潔,這一點(diǎn)比ndarray矩陣更好。
2.英文文本特征提取
文本特征提取使用的是CountVectorizer文本特征提取模型,這里準(zhǔn)備了一段英文文本(I have a dream)。統(tǒng)計(jì)詞頻并得到sparse矩陣,代碼如下所示:
CountVectorizer()沒有sparse參數(shù),默認(rèn)采用sparse矩陣格式。且可以通過stop_words指定停用詞。
from sklearn.feature_extraction.text import CountVectorizer
data = ["I have a dream that one day this nation will rise up and live out the true meaning of its creed",
"We hold these truths to be self-evident, that all men are created equal",
"I have a dream that one day on the red hills of Georgia, "
"the sons of former slaves and the sons of former slave owners will be able to sit down together at the table of brotherhood",
"I have a dream that one day even the state of Mississippi",
" a state sweltering with the heat of injustice",
"sweltering with the heat of oppression",
"will be transformed into an oasis of freedom and justice",
"I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character",
"I have a dream today"]
# CountVectorizer文本特征提取模型
# 1.實(shí)例化 將"is"標(biāo)記為停用詞
c_transfer = CountVectorizer(stop_words=["is"])
# 2.調(diào)用fit_transform
c_trans_data = c_transfer.fit_transform(data)
# 打印特征名稱
print(c_transfer.get_feature_names_out())
# 打印sparse矩陣
print(c_trans_data)
輸出結(jié)果如下圖所示:

3.中文文本特征提取
準(zhǔn)備一段中文文本(data.txt),以水滸傳中風(fēng)雪山神廟情節(jié)為例:
大雪下的正緊,林沖和差撥兩個(gè)在路上又沒買酒吃處。早來到草料場(chǎng)外,看時(shí),一周遭有些黃土墻,兩扇大門。推開看里面時(shí),七八間草房做著倉(cāng)廒,四下里都是馬草堆,中間兩座草廳。到那廳里,只見那老軍在里面向火。差撥說道:“管營(yíng)差這個(gè)林沖來替你回天王堂看守,你可即便交割?!崩宪娔昧髓€匙,引著林沖,分付道:“倉(cāng)廒內(nèi)自有官司封記,這幾堆草一堆堆都有數(shù)目?!崩宪姸键c(diǎn)見了堆數(shù),又引林沖到草廳上。老軍收拾行李,臨了說道:“火盆、鍋?zhàn)?、碗碟,都借與你?!绷譀_道:“天王堂內(nèi)我也有在那里,你要便拿了去?!崩宪娭副谏蠏煲粋€(gè)大葫蘆,說道:“你若買酒吃時(shí),只出草場(chǎng),投東大路去三二里,便有市井?!崩宪娮院筒顡芑貭I(yíng)里來。 只說林沖就床上放了包裹被臥,就坐下生些焰火起來。屋邊有一堆柴炭,拿幾塊來生在地爐里。仰面看那草屋時(shí),四下里崩壞了,又被朔風(fēng)吹撼,搖振得動(dòng)。林沖道:“這屋如何過得一冬?待雪晴了,去城中喚個(gè)泥水匠來修理?!毕蛄艘换鼗穑X得身上寒冷,尋思:“卻才老軍所說五里路外有那市井,何不去沽些酒來吃?”便去包里取些碎銀子,把花槍挑了酒葫蘆,將火炭蓋了,取氈笠子戴上,拿了鑰匙,出來把草廳門拽上。出到大門首,把兩扇草場(chǎng)門反拽上,鎖了。帶了鑰匙,信步投東。雪地里踏著碎瓊亂玉,迤邐背著北風(fēng)而行。那雪正下得緊。 行不上半里多路,看見一所古廟。林沖頂禮道:“神明庇佑,改日來燒錢紙。”又行了一回,望見一簇人家。林沖住腳看時(shí),見籬笆中挑著一個(gè)草帚兒在露天里。林沖徑到店里,主人道:“客人那里來?”林沖道:“你認(rèn)得這個(gè)葫蘆么?”主人看了道:“這葫蘆是草料場(chǎng)老軍的?!绷譀_道:“如何便認(rèn)的?”店主道:“既是草料場(chǎng)看守大哥,且請(qǐng)少坐。天氣寒冷,且酌三杯權(quán)當(dāng)接風(fēng)?!钡昙仪幸槐P熟牛肉,燙一壺?zé)峋?,?qǐng)林沖吃。又自買了些牛肉,又吃了數(shù)杯。就又買了一葫蘆酒,包了那兩塊牛肉,留下碎銀子,把花槍挑了酒葫蘆,懷內(nèi)揣了牛肉,叫聲相擾,便出籬笆門,依舊迎著朔風(fēng)回來??茨茄?,到晚越下的緊了。古時(shí)有個(gè)書生,做了一個(gè)詞,單題那貧苦的恨雪: 廣莫嚴(yán)風(fēng)刮地,這雪兒下的正好。扯絮挦綿,裁幾片大如栲栳。見林間竹屋茅茨,爭(zhēng)些兒被他壓倒。富室豪家,卻言道壓瘴猶嫌少。向的是獸炭紅爐,穿的是綿衣絮襖。手捻梅花,唱道國(guó)家祥瑞,不念貧民些小。高臥有幽人,吟詠多詩(shī)草。
對(duì)中文提取文本特征,需要安裝并使用到j(luò)ieba庫(kù)。使用該庫(kù)將文本處理成為空格連接詞語(yǔ)的格式,再使用CountVectorizer文本特征提取模型進(jìn)行提取即可。
代碼示例如下:
import jieba
from sklearn.feature_extraction.text import CountVectorizer
# 將文本轉(zhuǎn)為以空格相連的字符串
def cut_word(sent):
return " ".join(list(jieba.cut(sent)))
# 將文本以行為單位,去除空格,并置于列表中。格式形如:["第一行","第二行",..."n"]
with open("./論文.txt", "r") as f:
data = [line.replace("\n", "") for line in f.readlines()]
lis = []
# 將每一行的詞匯以空格連接
for temp in data:
lis.append(cut_word(temp))
transfer = CountVectorizer()
trans_data = transfer.fit_transform(lis)
print(transfer.get_feature_names())
# 輸出sparse數(shù)組
print(trans_data)
# 轉(zhuǎn)為ndarray數(shù)組(如果需要)
print(trans_data.toarray())
程序執(zhí)行效果如下:

轉(zhuǎn)換得到的ndarray數(shù)組形式(如果需要)如圖所示:

4. TF-IDF 文本特征提取 TfidfVectorizer()
TF-IDF文本提取器可以用來評(píng)估一字詞對(duì)于一個(gè)文件集或者一個(gè)語(yǔ)料庫(kù)中的其中一份文件的重要程度。
代碼展示如下:
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cut_word(sent):
return " ".join(list(jieba.cut(sent)))
with open("data.txt", "r") as f:
data = [line.replace("\n", "") for line in f.readlines()]
lis = []
for temp in data:
# print(cut_word(temp))
lis.append(cut_word(temp))
transfer = TfidfVectorizer()
print(transfer.get_feature_names())
print(trans_data)
程序執(zhí)行結(jié)果如下:

到此這篇關(guān)于Python實(shí)現(xiàn)文本特征提取的方法詳解的文章就介紹到這了,更多相關(guān)Python文本特征提取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用PyInstaller庫(kù)把Python程序打包成exe
這篇文章介紹了使用PyInstaller庫(kù)把Python程序打包成exe的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
python中的插值 scipy-interp的實(shí)現(xiàn)代碼
這篇文章主要介紹了python中的插值 scipy-interp的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-07-07
使用Python的time庫(kù)格式化時(shí)間的方法
通過使用Python的time庫(kù),我們可以方便地進(jìn)行時(shí)間處理、格式化、解析和計(jì)算等操作,本文介紹了time庫(kù)的一些常見功能和使用方法,包括格式化時(shí)間、解析時(shí)間戳、獲取當(dāng)前時(shí)間、計(jì)算時(shí)間差等,感興趣的朋友一起看看吧2023-11-11
Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理實(shí)例解析
這篇文章主要介紹了Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
python庫(kù)JsonSchema驗(yàn)證JSON數(shù)據(jù)結(jié)構(gòu)使用詳解
這篇文章主要為大家介紹了python庫(kù)JsonSchema驗(yàn)證JSON數(shù)據(jù)結(jié)構(gòu)的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python matplotlib實(shí)現(xiàn)多重圖的繪制
Matplotlib作為Python的2D繪圖庫(kù),它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形。本文將利用Matplotlib庫(kù)繪制多重圖,感興趣的可以了解一下2022-03-03
Mac OS X10.9安裝的Python2.7升級(jí)Python3.3步驟詳解
Mac OS X10.9默認(rèn)帶了Python2.7,不過現(xiàn)在Python3.3.3出來了,如果想使用最新版本,趕緊升級(jí)下吧?;静襟E如下2013-12-12

