探索自然語言處理NLP的Python世界

文本預處理:數據清洗與標準化

在自然語言處理(NLP)的旅程中,文本預處理是至關重要的第一步。原始文本數據往往包含噪聲、不一致性以及各種格式問題,直接影響后續模型的性能。文本預處理旨在將文本轉化為統一、規范的格式,便于計算機理解和處理。

1. 文本清洗

文本清洗涉及去除無關字符、標點符號、數字、HTML標簽等。例如,使用Python的re庫進行正則表達式匹配,可以有效移除不需要的字符。

import redef clean_text(text):# 移除HTML標簽text = re.sub(r'<.*?>', '', text)# 移除非字母字符text = re.sub(r'[^a-zA-Z\s]', '', text)# 轉換為小寫text = text.lower()return textsample_text = "<p>Hello, World! 123</p>"
cleaned_text = clean_text(sample_text)
print(cleaned_text)  # 輸出: hello world
2. 分詞與詞干提取

分詞是將連續文本分割成單詞或術語的過程。對于英文,可以使用nltk庫的word_tokenize函數。詞干提取則是將詞匯還原為其基本形式,如將“running”轉換為“run”。

from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmerdef tokenize_and_stem(text):tokens = word_tokenize(text)stemmer = PorterStemmer()stems = [stemmer.stem(token) for token in tokens]return stemstokens = tokenize_and_stem("running quickly")
print(tokens)  # 輸出: ['run', 'quickli']
3. 停用詞過濾

停用詞是指在文本處理中常被忽略的高頻詞匯,如“the”、“is”等。過濾停用詞可以減少數據維度,提高處理效率。

from nltk.corpus import stopwordsdef remove_stopwords(tokens):stop_words = set(stopwords.words('english'))filtered_tokens = [token for token in tokens if token not in stop_words]return filtered_tokensfiltered_tokens = remove_stopwords(tokens)
print(filtered_tokens)  # 輸出: ['run', 'quickli']

詞向量表示:從文本到數值空間

為了使計算機能夠處理文本數據,需要將文本轉換為數值形式。詞向量表示是一種將詞語映射到多維空間的方法,其中每個詞由一個實數向量表示,向量之間的距離反映了詞之間的語義相似度。

1. 詞袋模型(Bag of Words)

詞袋模型是一種簡單且廣泛使用的文本表示方法,它忽略了文本中的順序和語法結構,僅考慮詞匯的出現頻率。

from sklearn.feature_extraction.text import CountVectorizerdocuments = ["I love programming", "Python is awesome"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)
print(X.toarray())
# 輸出: [[0 1 1] [1 0 1]] 對應詞匯表 ['awesome', 'programming', 'python']
2. TF-IDF加權

TF-IDF(Term Frequency-Inverse Document Frequency)是一種統計方法,用于評估一個詞語對于一個文檔集或一個語料庫中的其中一份文檔的重要程度。

from sklearn.feature_extraction.text import TfidfVectorizertfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(documents)
print(X_tfidf.toarray())
# 輸出: TF-IDF權重矩陣,反映每個詞在文檔中的重要性
3. Word2Vec與GloVe

Word2Vec和GloVe是兩種流行的詞嵌入技術,它們能夠捕捉詞語之間的語義關系。Word2Vec通過神經網絡訓練得到詞向量,而GloVe則基于全局詞共現統計信息。

from gensim.models import Word2Vecsentences = [["i", "love", "programming"], ["python", "is", "awesome"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
word_vector = model.wv['programming']
print(word_vector)  # 輸出: 100維的詞向量

文本分類:情感分析實戰

文本分類是NLP中的一個重要任務,它涉及將文本分配到預定義的類別中。情感分析作為文本分類的一個典型應用,旨在判斷文本的情感傾向(正面、負面或中性)。

1. 數據集準備與探索

以IMDb電影評論數據集為例,該數據集包含大量帶標簽的電影評論,適合用于訓練情感分析模型。

import pandas as pd# 假設已下載并解壓IMDb數據集
df = pd.read_csv('imdb_reviews.csv')
print(df.head())
# 輸出: 包含評論文本和相應情感標簽的數據框
2. 數據預處理與特征提取

對評論文本進行預處理,包括清洗、分詞、去除停用詞等步驟,然后使用TF-IDF向量化文本。

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer# 數據清洗函數(前文已定義)
df['cleaned_text'] = df['review'].apply(clean_text)# 分割數據集
X_train, X_test, y_train, y_test = train_test_split(df['cleaned_text'], df['sentiment'], test_size=0.2, random_state=42)# 特征提取
tfidf = TfidfVectorizer(max_features=5000)
X_train_tfidf = tfidf.fit_transform(X_train)
X_test_tfidf = tfidf.transform(X_test)
3. 模型訓練與評估

使用邏輯回歸模型進行訓練,并評估其在測試集上的表現。

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report# 模型訓練
model = LogisticRegression()
model.fit(X_train_tfidf, y_train)# 預測與評估
y_pred = model.predict(X_test_tfidf)
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
print(classification_report(y_test, y_pred))

命名實體識別(NER):提取關鍵信息

命名實體識別(NER)是NLP中的一項任務,旨在從文本中識別出具有特定意義的實體,如人名、地名、組織機構名等。這對于信息提取、知識圖譜構建等應用至關重要。

1. 使用預訓練模型進行NER

利用spaCy庫提供的預訓練模型,可以方便地進行命名實體識別。

import spacy# 加載預訓練模型
nlp = spacy.load('en_core_web_sm')# 處理文本
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for ent in doc.ents:print(ent.text, ent.start_char, ent.end_char, ent.label_)
# 輸出: Apple 0 5 ORG, U.K. 25 28 GPE, $1 billion 36 46 MONEY
2. 自定義NER模型訓練

對于特定領域的NER任務,可能需要訓練自定義模型。以下是使用spaCy進行自定義NER的示例。

from spacy.training import Example
from spacy.util import minibatch, compounding# 準備訓練數據(標注的實體)
TRAINING_DATA = [("Barack Obama was born in Hawaii.", {'entities': [(0, 12, 'PERSON')]}),# 更多標注數據...
]# 創建空白模型
nlp = spacy.blank('en')
ner = nlp.create_pipe('ner')
nlp.add_pipe(ner)# 添加標注數據到模型
for _, annotations in TRAINING_DATA:for ent in annotations['entities']:ner.add_label(ent[2])# 訓練模型
optimizer = nlp.begin_training()
for itn in range(10):random.shuffle(TRAINING_DATA)losses = {}for text, annotations in TRAINING_DATA:doc = nlp.make_doc(text)example = Example.from_dict(doc, annotations)nlp.update([example], drop=0.5)print(f'Loss after iteration {itn}: {losses}')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92482.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92482.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ECMAScript(簡稱 ES)和 JavaScript 的關系

ECMAScript&#xff08;簡稱ES&#xff09;和JavaScript的關系常常令人困惑。簡單來說&#xff1a;ECMAScript是標準&#xff0c;JavaScript是實現。以下從多個維度詳細解析它們的區別與聯系&#xff1a; 一、定義與核心關系ECMAScript 標準化規范&#xff1a;由ECMA國際&#…

筆試——Day16

文章目錄第一題題目思路代碼第二題題目&#xff1a;思路代碼第三題題目&#xff1a;思路代碼優化&#xff08;滑動窗口&#xff09;第一題 題目 字符串替換 思路 模擬 當遍歷到正常字符時&#xff0c;直接加入結果答案&#xff1b;當遍歷到占位符時&#xff0c;按順序使用arg…

第十四屆藍橋杯青少Scratch國賽真題——太空大戰

明天藍橋杯大賽青少組省賽報名就開始報名了&#xff0c;小伙伴們記得設好鬧鐘&#xff0c;去搶報呀~&#xff08;去年是名額有限&#xff0c;全靠搶&#xff0c;今年估計也是&#xff0c;大家伙記得快點報名就對了&#xff09;報名通道將于&#x1f4c5;2025年7月23日13&#x…

小玩 Lifecycle

導包 [versions] lifecycle_version "2.3.1"[libraries] androidx-viewmodel { group "androidx.lifecycle", name "lifecycle-viewmodel-ktx", version.ref "lifecycle_version" } androidx-livedata { group "androidx…

HttpSecurity詳解

HttpSecurity 是 Spring Security 中用于配置 HTTP 安全性的核心類。它允許你定義各種安全規則和過濾器,以保護 Web 應用程序中的不同 URL 和請求。下面是對 HttpSecurity 中常見配置的詳細解析,以及每個配置的意義。 1. csrf 配置: http.csrf(customizers -> customi…

FFmpeg+javacpp中仿ffplay播放

FFmpegjavacpp中仿ffplay播放1、[ffplay 基于 SDL 和 FFmpeg 庫的簡單媒體播放器](https://ffmpeg.org/ffplay.html)2、FFmpeg幀捕獲器 : FFmpegFrameGrabber2.1 grabSamples()2.2 grabImage()2.3 grab() 獲取音視頻幀FFmpegjavacppjavacv使用 ffmpeg-6.0\fftools\ffplay.c 1、…

【后端】 FastAPI

&#x1f680; FastAPI 是什么&#xff1f;FastAPI 是一個用于構建 Web API 的 Python 框架。可以理解成&#xff1a;&#x1f9f0; “一個工具箱&#xff0c;讓你用 Python 寫出能被瀏覽器、App、小程序調用的接口&#xff08;API&#xff09;。”&#x1f527; 那什么是 API&…

不畫一張架構圖講透架構思維

&#x1f449;目錄1 架構的定義2 架構是為了解無解的問題-分工3 抱殘守缺的好架構應該是怎樣的4 適可而止的設計、恰如其分的架構與成敗論英雄本文深入探討軟件架構的本質與設計方法論&#xff0c;從架構定義演變到現代架構實踐挑戰&#xff0c;系統分析架構設計面臨的業務復雜…

SpringCloudGateWay 使用nacos網關自動負載均衡

安裝好nacos后&#xff08;參考以前文章SpringCloud 使用nacos注冊服務&#xff0c;使用openFeign調用服務-CSDN博客&#xff09; 新建一個項目&#xff0c;添加 spring-cloud-starter-gateway-server-webmvc spring-cloud-loadbalancer spring-cloud-starter-alibaba-nacos-d…

Hiredis 構建 Redis 命令實戰指南

一、同步命令構造 1.1 redisCommand(fmt, …) 最常用的同步接口即 redisCommand&#xff0c;其原型如下&#xff1a; void *redisCommand(redisContext *c, const char *format, ...);參數 c&#xff1a;已連接的 redisContext*format&#xff1a;與 printf 類似的格式字符串//…

【數據庫】國產數據庫的新機遇:電科金倉以融合技術同步全球競爭

7月15日&#xff0c;國產數據庫廠商中電科金倉&#xff08;北京&#xff09;科技股份有限公司&#xff08;以下簡稱“電科金倉”&#xff09;在北京舉行了一場技術發布會&#xff0c;集中發布四款核心產品&#xff1a;AI時代的融合數據庫KES V9 2025、企業級統一管控平臺KEMCC、…

大模型 Function Call 的實現步驟及示例詳解

大模型 Function Call 的實現步驟及示例詳解一、Function Call的核心流程拆解二、結合代碼詳解Function Call實現步驟1&#xff1a;定義工具&#xff08;對應代碼中的tools列表&#xff09;步驟2&#xff1a;實現工具函數&#xff08;對應代碼中的get_current_weather和get_cur…

Linux運維新手的修煉手扎之第24天

mysql服務1 mysql命令客戶端(mysql.cnf)命令 \c--ctrl c \s--顯示當前狀態 \r--客戶端重新連接 \h--查看幫助信息 exit退出客戶端 \G--垂直格式顯示查詢結果連接MySQL服務器--[rootrocky9 ~]# mysql(mysql -u用戶名 - p密碼 -h服務端ip -P服務端port -S服務端sock -e "my…

面向對象分析與設計40講(7)設計原則之合成復用原則

文章目錄 一、概念 二、示例(C++ 實現) 1. 違反合成復用原則的示例(過度使用繼承) 2. 遵循合成復用原則的示例(使用組合) 三、總結 1. 繼承是“強綁定”,組合是“弱關聯” 2. 繼承固化“靜態結構”,組合支持“動態變化” 3. 繼承放大“設計缺陷”,組合隔離“局部問題”…

Git 完全手冊:從入門到團隊協作實戰(4)

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《C修煉之路》、《Linux修煉&#xff1a;終端之內 洞悉真理…

解決Spring事務中RPC調用無法回滾的問題

文章目錄問題分析解決方案實現原理解析執行流程說明運行實例正常流程執行執行異常流程關鍵優勢在分布式系統開發中&#xff0c;我們經常會遇到本地事務與遠程服務調用結合的場景。當本地事務包含RPC調用時&#xff0c;如果事務回滾&#xff0c;RPC調用已經執行就會導致數據不一…

sqli-labs通關筆記-第13關 POST報錯型注入(單引號括號閉合 手工注入+腳本注入兩種方法)

目錄 一、字符型注入 二、limit函數 三、GET方法與POST方法 四、源碼分析 1、代碼審計 2、SQL注入安全分析 3、報錯型注入與聯合注入 五、滲透實戰 1、進入靶場 2、注入點分析 &#xff08;1&#xff09;SQL語句 &#xff08;2&#xff09;admin) #注入探測 &…

康復器材動靜態性能測試臺:精準檢測,為康復器械安全保駕護航

在康復醫療領域&#xff0c;無論是輪椅、拐杖、假肢還是康復床&#xff0c;每一件器械的強度與穩定性都直接關系到使用者的安全與康復效果。如何確保這些器械在實際使用中經得起反復考驗&#xff1f;Delta德爾塔儀器推出的康復器材動靜態性能測試臺&#xff0c;憑借其高精度、智…

vue3中el-table表頭篩選

效果如下&#xff0c;可以勾選表頭進行隱藏&#xff0c;也可以對表頭進行拖動排序index主界面 <script> let tempHead []; const showFilter ref<boolean>(false); let tableHeadList ref<TableHeadItem[]>([{ prop: "displayId", label: "…

數據結構 之 【排序】(直接選擇排序、堆排序、冒泡排序)

目錄 1.直接選擇排序 1.1直接選擇排序的思想 1.2直接選擇排序的代碼邏輯 1.3完整排序代碼 1.3.1一次只選一個最值 1.3.2一次篩選出兩個最值 1.4直接選擇排序的時間復雜度與空間復雜度 2.堆排序 2.1堆排序的思想 2.2堆排序的具體步驟 2.3堆排序圖解 2.4完整排序代碼…