最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+Sklearn實(shí)現(xiàn)英文文本關(guān)鍵詞提取的完整代碼

 更新時(shí)間:2026年03月12日 09:31:26   作者:Westward-sun.  
在自然語(yǔ)言處理(NLP)的文本分析領(lǐng)域,TF-IDF 是實(shí)現(xiàn)關(guān)鍵詞提取的經(jīng)典加權(quán)算法,能精準(zhǔn)篩選出文本中兼具單篇高頻和語(yǔ)料庫(kù)低頻的核心詞匯,本文將基于Python+Sklearn,針對(duì)英文文本實(shí)現(xiàn) TF-IDF 的全流程實(shí)戰(zhàn),需要的朋友可以參考下

前言

在自然語(yǔ)言處理(NLP)的文本分析領(lǐng)域,TF-IDF 是實(shí)現(xiàn)關(guān)鍵詞提取的經(jīng)典加權(quán)算法,能精準(zhǔn)篩選出文本中兼具單篇高頻語(yǔ)料庫(kù)低頻的核心詞匯。本文將基于Python+Sklearn,針對(duì)英文文本實(shí)現(xiàn) TF-IDF 的全流程實(shí)戰(zhàn),使用真實(shí)的英文語(yǔ)料文件完成語(yǔ)料加載、TF-IDF 矩陣計(jì)算、關(guān)鍵詞排序,代碼注釋詳盡、可直接復(fù)制運(yùn)行,零基礎(chǔ)也能快速上手,完美適配英文文本的關(guān)鍵詞提取需求。

一、實(shí)戰(zhàn)目標(biāo)與環(huán)境準(zhǔn)備

1.1 實(shí)戰(zhàn)目標(biāo)

基于本地task2_1.txt英文語(yǔ)料文件構(gòu)建語(yǔ)料庫(kù),通過(guò) Sklearn 的TfidfVectorizer自動(dòng)完成英文分詞、停用詞過(guò)濾、TF-IDF 計(jì)算,最終提取語(yǔ)料中每篇文檔的關(guān)鍵詞并按 TF-IDF 值降序排列。

1.2 環(huán)境準(zhǔn)備

本次實(shí)戰(zhàn)僅需兩個(gè)核心 Python 庫(kù),通過(guò)pip一鍵安裝,無(wú)額外依賴:

# 核心:TF-IDF計(jì)算與向量化
pip install scikit-learn
# 輔助:TF-IDF結(jié)果可視化與數(shù)據(jù)處理
pip install pandas

注意:sklearn 版本建議≥0.24.0,避免get_feature_names_out()方法出現(xiàn)版本警告;Python 版本推薦 3.7 及以上。

二、實(shí)戰(zhàn)語(yǔ)料文件說(shuō)明

本次實(shí)戰(zhàn)使用的語(yǔ)料文件為task2_1.txt,每行對(duì)應(yīng)一篇獨(dú)立的英文文檔,共 6 篇文檔,語(yǔ)料內(nèi)容如下:

This is the first document
This document is the second document
And this is the third one
Is this the first document
This line has several words
This is the final document

將該文件放在代碼同一目錄下,即可直接運(yùn)行代碼,無(wú)需額外修改路徑。

三、完整實(shí)戰(zhàn)代碼(可直接復(fù)制運(yùn)行)

以下代碼為最終可運(yùn)行版本,基于核心實(shí)戰(zhàn)邏輯編寫,注釋詳盡,包含語(yǔ)料加載、TF-IDF 計(jì)算、結(jié)果可視化、關(guān)鍵詞排序全流程,直接復(fù)制到本地即可執(zhí)行:

# 導(dǎo)入TF-IDF向量化器(Sklearn核心工具,內(nèi)置英文分詞/去停用詞功能)
from sklearn.feature_extraction.text import TfidfVectorizer
# 導(dǎo)入pandas庫(kù),用于將TF-IDF結(jié)果轉(zhuǎn)換為表格,直觀展示
import pandas as pd
# 步驟1:讀取語(yǔ)料庫(kù)文件,構(gòu)建語(yǔ)料列表
# 以只讀模式打開(kāi)英文語(yǔ)料文件,指定utf-8編碼避免亂碼
inFile = open('task2_1.txt', 'r', encoding='utf-8')
# 按行讀取文件,每行作為一篇獨(dú)立文檔,形成語(yǔ)料列表corpus
corpus = inFile.readlines()
# 關(guān)閉文件,釋放系統(tǒng)資源,避免內(nèi)存占用
inFile.close()
# 步驟2:初始化TF-IDF向量化器,擬合語(yǔ)料并計(jì)算TF-IDF稀疏矩陣
# TfidfVectorizer默認(rèn)實(shí)現(xiàn):英文分詞、過(guò)濾英文停用詞(the/is/this等)、TF-IDF計(jì)算
vectorizer = TfidfVectorizer()
# fit_transform:擬合語(yǔ)料+轉(zhuǎn)換為TF-IDF稀疏矩陣,行=文檔,列=詞匯,值=TF-IDF值
tfidf = vectorizer.fit_transform(corpus)
# 步驟3:打印TF-IDF稀疏矩陣,查看原始計(jì)算結(jié)果
print("===== TF-IDF稀疏矩陣 =====")
print(tfidf)
# 稀疏矩陣解讀:(行索引, 列索引)  TF-IDF值,僅存儲(chǔ)非0值,節(jié)省內(nèi)存
# 步驟4:獲取語(yǔ)料庫(kù)中的所有有效詞匯列表(已過(guò)濾停用詞)
# get_feature_names_out():替代舊版get_feature_names(),解決版本兼容警告
wordlist = vectorizer.get_feature_names_out()
print("\n===== 語(yǔ)料庫(kù)有效詞匯列表(已過(guò)濾停用詞) =====")
print(wordlist)
# 步驟5:將稀疏矩陣轉(zhuǎn)換為DataFrame表格,更直觀展示各詞匯的TF-IDF值
# tfidf.T:矩陣轉(zhuǎn)置,行=詞匯,列=文檔;todense():稀疏矩陣轉(zhuǎn)稠密矩陣(小語(yǔ)料適用)
tfidf_df = pd.DataFrame(tfidf.T.todense(), index=wordlist)
print("\n===== TF-IDF值數(shù)據(jù)表格(行=詞匯,列=文檔) =====")
print(tfidf_df)
# 步驟6:提取每篇文檔的關(guān)鍵詞,按TF-IDF值從高到低降序排列
print("\n===== 各文檔關(guān)鍵詞(按TF-IDF值降序排列) =====")
# 遍歷語(yǔ)料庫(kù)中的每一篇文檔,j為文檔索引
for j in range(len(corpus)):
    # 獲取第j篇文檔中所有詞匯的TF-IDF值,轉(zhuǎn)換為列表
    tfidf_values = tfidf_df.iloc[:, j].to_list()
    # 構(gòu)建“詞匯-TF-IDF值”的字典,便于后續(xù)排序
    word_tfidf_dict = {}
    for i in range(len(wordlist)):
        word_tfidf_dict[wordlist[i]] = tfidf_values[i]
    # 按TF-IDF值降序排序,x[1]表示按字典的值排序
    sorted_keywords = sorted(word_tfidf_dict.items(), key=lambda x: x[1], reverse=True)
    # 打印第j+1篇文檔的關(guān)鍵詞,序號(hào)從1開(kāi)始更符合閱讀習(xí)慣
    print(f"第{j+1}篇文檔:{sorted_keywords}")

四、核心代碼模塊逐行解析

4.1 語(yǔ)料加載模塊

inFile = open('task2_1.txt', 'r', encoding='utf-8')
corpus = inFile.readlines()
inFile.close()
  • 核心作用:將本地 TXT 語(yǔ)料文件轉(zhuǎn)換為 Python 可處理的列表格式,corpus中每個(gè)元素對(duì)應(yīng)一篇英文文檔;
  • 關(guān)鍵細(xì)節(jié):指定encoding='utf-8'確保文件讀取無(wú)亂碼,即使是純英文文件,該配置也能避免特殊字符解析錯(cuò)誤;
  • 路徑說(shuō)明:若文件不在代碼同目錄,需填寫完整絕對(duì)路徑,如r'C:\NLP\data\task2_1.txt',路徑前加r避免轉(zhuǎn)義字符問(wèn)題。

4.2 TF-IDF 矩陣計(jì)算模塊

vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform(corpus)
  • TfidfVectorizer:Sklearn 封裝的 TF-IDF 專用工具,對(duì)英文原生支持,默認(rèn)完成「英文分詞→過(guò)濾英文停用詞(the/is/this/and 等)→詞頻統(tǒng)計(jì)→TF-IDF 歸一化計(jì)算」全流程,無(wú)需手動(dòng)實(shí)現(xiàn)任何公式;
  • fit_transform():一站式完成 “語(yǔ)料分析” 和 “矩陣轉(zhuǎn)換”,fit分析語(yǔ)料庫(kù)的詞匯分布、文檔數(shù)等基礎(chǔ)信息,transform將語(yǔ)料轉(zhuǎn)換為TF-IDF 稀疏矩陣;
  • 稀疏矩陣優(yōu)勢(shì):僅存儲(chǔ)非 0 值(即詞匯在文檔中出現(xiàn)的 TF-IDF 值),大幅節(jié)省內(nèi)存,適合處理大規(guī)模英文語(yǔ)料庫(kù)。

4.3 有效詞匯提取模塊

wordlist = vectorizer.get_feature_names_out() 
  • 提取語(yǔ)料庫(kù)中所有有效詞匯,自動(dòng)過(guò)濾 Sklearn 內(nèi)置的英文停用詞(如 the、is、this、and 等),這些停用詞無(wú)實(shí)際語(yǔ)義價(jià)值,無(wú)需參與關(guān)鍵詞提??;
  • 替代舊版get_feature_names()方法,解決高版本 Sklearn 的版本警告,提升代碼兼容性。

4.4 TF-IDF 結(jié)果可視化模塊

tfidf_df = pd.DataFrame(tfidf.T.todense(), index=wordlist) 
  • tfidf.T:將原始 “行 = 文檔、列 = 詞匯” 的矩陣轉(zhuǎn)置為 “行 = 詞匯、列 = 文檔”,更符合 “按詞匯查看各文檔 TF-IDF 值” 的閱讀習(xí)慣;
  • todense():將稀疏矩陣轉(zhuǎn)換為稠密矩陣,僅適用于小語(yǔ)料庫(kù)(如本次 6 篇文檔),大規(guī)模語(yǔ)料庫(kù)無(wú)需轉(zhuǎn)換,避免內(nèi)存溢出;
  • DataFrame 表格:以表格形式展示 TF-IDF 值,直觀看到每個(gè)詞匯在不同文檔中的權(quán)重,便于結(jié)果分析。

4.5 關(guān)鍵詞排序模塊

sorted_keywords = sorted(word_tfidf_dict.items(), key=lambda x: x[1], reverse=True) 
  • 核心邏輯:TF-IDF 值越高,代表該詞匯在對(duì)應(yīng)文檔中的重要性越強(qiáng),越適合作為核心關(guān)鍵詞;
  • sorted 排序key=lambda x: x[1]表示按字典的值(TF-IDF 值)排序,reverse=True表示降序排列
  • 結(jié)果特點(diǎn):排序后列表中,靠前的為核心關(guān)鍵詞,TF-IDF 值為 0 的詞匯表示該詞匯未出現(xiàn)在對(duì)應(yīng)文檔中。

五、實(shí)戰(zhàn)運(yùn)行結(jié)果解讀

運(yùn)行上述代碼后,將得到稀疏矩陣、有效詞匯列表、TF-IDF 表格、關(guān)鍵詞排序四部分結(jié)果,以下為核心結(jié)果的詳細(xì)解讀,貼合本次task2_1.txt語(yǔ)料的實(shí)際運(yùn)行情況:

5.1 有效詞匯列表(已過(guò)濾停用詞)

['and', 'document', 'final', 'first', 'has', 'line', 'one', 'several', 'second', 'third', 'words']
  • 解讀:Sklearn 自動(dòng)過(guò)濾了 the、is、this 等無(wú)意義停用詞,僅保留具有實(shí)際語(yǔ)義的詞匯,共 11 個(gè)有效詞匯參與 TF-IDF 計(jì)算。

5.2 關(guān)鍵文檔關(guān)鍵詞排序結(jié)果

第1篇文檔:[('first', 0.7959605415421216), ('document', 0.6053485081062916), ('and', 0.0), ...]
第2篇文檔:[('second', 0.8532257383914493), ('document', 0.521848223009785), ('and', 0.0), ...]
第5篇文檔:[('line', 0.4472135955), ('has', 0.4472135955), ('several', 0.4472135955), ('words', 0.4472135955), ...]
  • 第 1 篇文檔核心關(guān)鍵詞為first(TF-IDF 值最高),其次是document,符合文檔主題This is the first document
  • 第 2 篇文檔核心關(guān)鍵詞為second,貼合文檔主題This document is the second document
  • 第 5 篇文檔中line/has/several/wordsTF-IDF 值相同,因該文檔為This line has several words,所有詞匯均為首次出現(xiàn)且無(wú)重復(fù),權(quán)重均等。

5.3 結(jié)果核心規(guī)律

  • 某詞匯僅在單篇文檔中出現(xiàn),則其在該文檔的 TF-IDF 值顯著偏高(如 final/third/second 等);
  • 某詞匯在多篇文檔中重復(fù)出現(xiàn)(如 document),則其 TF-IDF 值會(huì)被稀釋,在各文檔中權(quán)重相對(duì)偏低;
  • 停用詞全程被過(guò)濾,TF-IDF 值始終為 0,不參與關(guān)鍵詞排序。

六、實(shí)戰(zhàn)拓展與優(yōu)化

6.1 提取 TopN 核心關(guān)鍵詞

若無(wú)需展示所有詞匯的 TF-IDF 值,可僅提取前 N 個(gè)核心關(guān)鍵詞(如 Top3/Top5),修改步驟 6 的代碼即可,示例如下:

# 提取每篇文檔的Top3核心關(guān)鍵詞
for j in range(len(corpus)):
    tfidf_values = tfidf_df.iloc[:, j].to_list()
    word_tfidf_dict = {}
    for i in range(len(wordlist)):
        word_tfidf_dict[wordlist[i]] = tfidf_values[i]
    sorted_keywords = sorted(word_tfidf_dict.items(), key=lambda x: x[1], reverse=True)
    # 僅取前3個(gè)核心關(guān)鍵詞
    top3_keywords = sorted_keywords[:3]
    print(f"第{j+1}篇文檔Top3關(guān)鍵詞:{top3_keywords}")

6.2 自定義過(guò)濾停用詞

Sklearn 內(nèi)置的停用詞庫(kù)可滿足基礎(chǔ)需求,若需自定義過(guò)濾額外詞匯,可在初始化TfidfVectorizer時(shí)配置stop_words參數(shù),示例如下:

# 自定義停用詞列表,在默認(rèn)基礎(chǔ)上額外過(guò)濾'document'
custom_stop_words = ['the', 'is', 'this', 'document']
vectorizer = TfidfVectorizer(stop_words=custom_stop_words)

6.3 調(diào)整詞匯過(guò)濾規(guī)則

通過(guò)max_dfmin_df參數(shù)過(guò)濾高頻 / 低頻詞匯,提升關(guān)鍵詞提取的精準(zhǔn)度:

# max_df=0.8:過(guò)濾在80%以上文檔中出現(xiàn)的詞匯
# min_df=2:過(guò)濾僅在1篇文檔中出現(xiàn)的詞匯
vectorizer = TfidfVectorizer(max_df=0.8, min_df=2)

七、實(shí)戰(zhàn)核心總結(jié)

本次基于task2_1.txt英文語(yǔ)料的 TF-IDF 實(shí)戰(zhàn),核心要點(diǎn)可總結(jié)為以下 5 點(diǎn),適配所有英文文本的關(guān)鍵詞提取場(chǎng)景:

  1. Sklearn 對(duì)英文原生友好TfidfVectorizer可自動(dòng)完成英文分詞、停用詞過(guò)濾,無(wú)需額外引入分詞庫(kù),代碼簡(jiǎn)潔高效;
  2. 核心流程固定語(yǔ)料加載→TF-IDF 計(jì)算→詞匯提取→結(jié)果可視化→關(guān)鍵詞排序,五步即可實(shí)現(xiàn)英文文本關(guān)鍵詞提??;
  3. 稀疏矩陣是關(guān)鍵:Sklearn 默認(rèn)返回稀疏矩陣,大幅節(jié)省內(nèi)存,小語(yǔ)料可轉(zhuǎn) DataFrame 表格,大語(yǔ)料直接操作稀疏矩陣;
  4. TF-IDF 值的意義:值越高代表詞匯在文檔中的重要性越強(qiáng),僅在單篇文檔出現(xiàn)的詞匯權(quán)重遠(yuǎn)高于多篇重復(fù)出現(xiàn)的詞匯;
  5. 代碼可直接復(fù)用:僅需修改語(yǔ)料文件路徑,即可將本代碼應(yīng)用到任意英文文本的關(guān)鍵詞提取任務(wù)中。

八、結(jié)尾

本文基于真實(shí)的英文語(yǔ)料文件task2_1.txt,實(shí)現(xiàn)了 TF-IDF 算法的完整實(shí)戰(zhàn),代碼可直接復(fù)制運(yùn)行,且適配各類英文文本的關(guān)鍵詞提取需求。TF-IDF 作為 NLP 的經(jīng)典基礎(chǔ)算法,簡(jiǎn)單高效、可解釋性強(qiáng),是文本檢索、文本分類、輿情分析等任務(wù)的重要基礎(chǔ)。

以上就是Python+Sklearn實(shí)現(xiàn)英文文本關(guān)鍵詞提取的完整代碼的詳細(xì)內(nèi)容,更多關(guān)于Python Sklearn英文文本關(guān)鍵詞提取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • opencv實(shí)現(xiàn)答題卡識(shí)別

    opencv實(shí)現(xiàn)答題卡識(shí)別

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)答題卡識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python Popen 獲取輸出,等待運(yùn)行完成示例

    python Popen 獲取輸出,等待運(yùn)行完成示例

    今天小編就為大家分享一篇python Popen 獲取輸出,等待運(yùn)行完成示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python使用opencv實(shí)現(xiàn)馬賽克效果示例

    python使用opencv實(shí)現(xiàn)馬賽克效果示例

    這篇文章主要介紹了python使用opencv實(shí)現(xiàn)馬賽克效果,結(jié)合實(shí)例形式分析了Python使用cv2模塊操作圖片實(shí)現(xiàn)馬賽克效果的相關(guān)技巧,需要的朋友可以參考下
    2019-09-09
  • Python實(shí)現(xiàn)將圖像轉(zhuǎn)換為ASCII字符圖

    Python實(shí)現(xiàn)將圖像轉(zhuǎn)換為ASCII字符圖

    使用Python進(jìn)行圖像處理,非??旖莘奖悖?jiǎn)短幾行代碼就可以實(shí)現(xiàn)功能強(qiáng)大的效果。在這篇文章中,我們將使用Python將圖像轉(zhuǎn)換為ASCII字符照,感興趣的可以了解一下
    2022-08-08
  • python入門語(yǔ)句基礎(chǔ)之if語(yǔ)句、while語(yǔ)句

    python入門語(yǔ)句基礎(chǔ)之if語(yǔ)句、while語(yǔ)句

    本文介紹了python入門語(yǔ)句基礎(chǔ)之if語(yǔ)句、while語(yǔ)句,if?語(yǔ)句讓你能夠檢查程序的當(dāng)前狀態(tài),并據(jù)此采取相應(yīng)的措施,而for?循環(huán)用于針對(duì)集合中的每個(gè)元素都一個(gè)代碼塊,而?while?循環(huán)不斷地運(yùn)行,直到指定的條件不滿足為止,本文通過(guò)示例代碼詳解介紹,需要的朋友參考下吧
    2022-04-04
  • python解決空間模擬與時(shí)間預(yù)測(cè)問(wèn)題及分析

    python解決空間模擬與時(shí)間預(yù)測(cè)問(wèn)題及分析

    本課程系統(tǒng)講解機(jī)器學(xué)習(xí)原理、Python編程與數(shù)據(jù)處理,涵蓋數(shù)據(jù)清洗、隨機(jī)森林與LSTM算法,結(jié)合生態(tài)水文場(chǎng)景,通過(guò)土地利用分類、徑流預(yù)測(cè)等實(shí)踐案例,掌握空間模擬與時(shí)間預(yù)測(cè)技術(shù)
    2025-08-08
  • 通過(guò)Python解析和執(zhí)行JavaScript代碼的完整指南

    通過(guò)Python解析和執(zhí)行JavaScript代碼的完整指南

    在Web開(kāi)發(fā)、數(shù)據(jù)抓取或自動(dòng)化測(cè)試中,我們經(jīng)常需要處理JavaScript代碼,本文將介紹如何通過(guò)Python解析和執(zhí)行JavaScript代碼,并提供多種實(shí)用方法及代碼示例,需要的朋友可以參考下
    2025-09-09
  • Python多重分派multipledispatch庫(kù)的使用

    Python多重分派multipledispatch庫(kù)的使用

    multipledispatch庫(kù)為Python帶來(lái)了完整的多重分派能力,顯著提升了代碼的表達(dá)力和可維護(hù)性,本文就來(lái)詳細(xì)Python多重分派multipledispatch庫(kù)的使用,感興趣的可以了解一下
    2026-05-05
  • PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample?Dropout方式

    PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample?Dropout方式

    這篇文章主要介紹了PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample?Dropout方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Pandas groupby方法中的group_keys屬性使用及說(shuō)明

    Pandas groupby方法中的group_keys屬性使用及說(shuō)明

    groupby方法在pandas 1.5.3中,group_keys=True時(shí)保留groupby字段為第一級(jí)索引,同時(shí)原索引作為第二級(jí)索引,當(dāng)設(shè)置group_keys=False時(shí),groupby的字段不在返回結(jié)果中,可以直接作為原DataFrame的一列
    2026-01-01

最新評(píng)論

常宁市| 延长县| 蓬安县| 高雄县| 大港区| 合肥市| 自治县| 吐鲁番市| 马尔康县| 乐都县| 巴林右旗| 东平县| 龙井市| 开阳县| 任丘市| 页游| 马尔康县| 乐都县| 霞浦县| 健康| 双柏县| 延寿县| 宁陕县| 峡江县| 凤城市| 安多县| 崇义县| 五峰| 巢湖市| 芦山县| 紫云| 盐城市| 平阴县| 金坛市| 九江市| 长沙市| 蓬安县| 樟树市| 海口市| 镇安县| 犍为县|