python | spacy,一個神奇的 Python 庫!

本文來源公眾號“python”,僅用于學術分享,侵權刪,干貨滿滿。

原文鏈接:spacy,一個神奇的 Python 庫!

大家好,今天為大家分享一個神奇的 Python 庫 - spacy。

Github地址:https://github.com/explosion/spaCy

自然語言處理(NLP)是人工智能和數據科學中快速發展的領域。Python的spaCy庫是一個現代化的、工業級的NLP庫,提供了快速、高效和易于使用的API,適用于構建各種NLP應用。spaCy不僅支持多種語言,還包含豐富的預訓練模型和工具,能夠處理從分詞、詞性標注、命名實體識別到依存分析等任務。本文將詳細介紹spaCy庫,包括其安裝方法、主要特性、基本和高級功能,以及實際應用場景,幫助全面了解并掌握該庫的使用。

1 安裝

要使用spaCy庫,首先需要安裝它。可以通過pip工具方便地進行安裝。

以下是安裝步驟:

pip?install?spacy

安裝完成后,還需要下載預訓練模型。以下是下載英文模型的命令:

python?-m?spacy?download?en_core_web_sm

安裝完成后,可以通過導入spaCy庫來驗證是否安裝成功:

import?spacy
print("spaCy庫安裝成功!")

2 特性

  1. 高效的分詞和詞性標注:提供快速準確的分詞和詞性標注功能。

  2. 命名實體識別:內置命名實體識別(NER)模型,支持多種實體類型。

  3. 依存句法分析:支持依存句法分析,幫助理解句子結構。

  4. 詞向量支持:內置預訓練詞向量,支持詞嵌入和相似度計算。

  5. 多語言支持:支持多種語言,提供相應的預訓練模型。

3 基本功能

3.1 分詞和詞性標注

使用spaCy庫,可以方便地進行分詞和詞性標注。

以下是一個簡單的示例:

import?spacy#?加載預訓練模型
nlp?=?spacy.load("en_core_web_sm")#?處理文本
doc?=?nlp("SpaCy?is?an?amazing?NLP?library.")#?分詞和詞性標注
for?token?in?doc:print(f"Token:?{token.text},?POS:?{token.pos_}")

3.2 命名實體識別

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(f"Entity:?{ent.text},?Label:?{ent.label_}")

3.3 依存句法分析

spaCy庫支持依存句法分析,以下是一個示例:

import?spacy#?加載預訓練模型
nlp?=?spacy.load("en_core_web_sm")#?處理文本
doc?=?nlp("SpaCy?is?an?amazing?NLP?library.")#?依存句法分析
for?token?in?doc:print(f"Token:?{token.text},?Dependency:?{token.dep_},?Head:?{token.head.text}")

3.4 詞向量

spaCy庫內置了預訓練的詞向量,支持詞嵌入和相似度計算。

以下是一個示例:

import?spacy#?加載預訓練模型
nlp?=?spacy.load("en_core_web_md")#?獲取詞向量
token1?=?nlp("apple")
token2?=?nlp("orange")#?計算相似度
similarity?=?token1.similarity(token2)
print(f"相似度:?{similarity}")

4 高級功能

4.1 自定義分詞規則

spaCy允許用戶自定義分詞規則。

以下是一個示例:

import?spacy
from?spacy.tokenizer?import?Tokenizer#?加載預訓練模型
nlp?=?spacy.load("en_core_web_sm")#?自定義分詞規則
def?custom_tokenizer(nlp):return?Tokenizer(nlp.vocab,?rules={"appleorange":?[{"ORTH":?"appleorange"}]})nlp.tokenizer?=?custom_tokenizer(nlp)#?處理文本
doc?=?nlp("I?have?an?appleorange?and?a?banana.")
for?token?in?doc:print(f"Token:?{token.text}")

4.2 自定義命名實體

spaCy支持添加自定義命名實體。

以下是一個示例:

import?spacy
from?spacy.tokens?import?Span#?加載預訓練模型
nlp?=?spacy.load("en_core_web_sm")#?添加自定義命名實體
doc?=?nlp("Elon?Musk?is?the?CEO?of?SpaceX.")
org?=?Span(doc,?4,?5,?label="ORG")
doc.ents?=?list(doc.ents)?+?[org]for?ent?in?doc.ents:print(f"Entity:?{ent.text},?Label:?{ent.label_}")

4.3 訓練自定義模型

spaCy支持訓練自定義的NLP模型。

以下是一個示例,演示如何訓練自定義命名實體識別模型:

import?spacy
from?spacy.training.example?import?Example
from?spacy.util?import?minibatch,?compounding#?創建空白模型
nlp?=?spacy.blank("en")#?創建命名實體識別組件并添加到管道中
ner?=?nlp.add_pipe("ner")#?添加標簽
ner.add_label("ORG")#?準備訓練數據
TRAIN_DATA?=?[("SpaceX?is?a?company.",?{"entities":?[(0,?6,?"ORG")]}),("Google?is?another?company.",?{"entities":?[(0,?6,?"ORG")]})
]#?訓練模型
optimizer?=?nlp.begin_training()
for?itn?in?range(10):losses?=?{}batches?=?minibatch(TRAIN_DATA,?size=compounding(4.0,?32.0,?1.001))for?batch?in?batches:for?text,?annotations?in?batch:doc?=?nlp.make_doc(text)example?=?Example.from_dict(doc,?annotations)nlp.update([example],?drop=0.5,?sgd=optimizer,?losses=losses)print(losses)#?測試模型
doc?=?nlp("SpaceX?is?an?amazing?company.")
for?ent?in?doc.ents:print(f"Entity:?{ent.text},?Label:?{ent.label_}")

5 實際應用場景

5.1 文本分類

假設開發一個文本分類系統,用于將客戶反饋分類為不同的主題,可以使用spaCy庫實現這一功能。

import?spacy
from?spacy.training.example?import?Example#?加載預訓練模型
nlp?=?spacy.load("en_core_web_sm")#?添加文本分類器
textcat?=?nlp.add_pipe("textcat",?last=True)
textcat.add_label("POSITIVE")
textcat.add_label("NEGATIVE")#?準備訓練數據
TRAIN_DATA?=?[("I?love?this?product!",?{"cats":?{"POSITIVE":?1,?"NEGATIVE":?0}}),("This?is?the?worst?experience?ever.",?{"cats":?{"POSITIVE":?0,?"NEGATIVE":?1}})
]#?訓練模型
optimizer?=?nlp.begin_training()
for?itn?in?range(10):losses?=?{}for?text,?cats?in?TRAIN_DATA:doc?=?nlp.make_doc(text)example?=?Example.from_dict(doc,?cats)nlp.update([example],?drop=0.5,?sgd=optimizer,?losses=losses)print(losses)#?測試模型
doc?=?nlp("I?hate?this!")
print(doc.cats)

5.2 情感分析

假設開發一個情感分析系統,用于分析社交媒體上的用戶情感,可以使用spaCy庫實現這一功能。

import?spacy
from?spacy.training.example?import?Example#?加載預訓練模型
nlp?=?spacy.load("en_core_web_sm")#?添加文本分類器
textcat?=?nlp.add_pipe("textcat",?last=True)
textcat.add_label("POSITIVE")
textcat.add_label("NEGATIVE")#?準備訓練數據
TRAIN_DATA?=?[("I?am?very?happy?today!",?{"cats":?{"POSITIVE":?1,?"NEGATIVE":?0}}),("I?feel?so?sad?and?depressed.",?{"cats":?{"POSITIVE":?0,?"NEGATIVE":?1}})
]#?訓練模型
optimizer?=?nlp.begin_training()
for?itn?in?range(10):losses?=?{}for?text,?cats?in?TRAIN_DATA:doc?=?nlp.make_doc(text)example?=?Example.from_dict(doc,?cats)nlp.update([example],?drop=0.5,?sgd=optimizer,?losses=losses)print(losses)#?測試模型
doc?=?nlp("This?is?an?amazing?day!")
print(doc.cats)

5.3 實體識別與信息抽取

假設開發一個信息抽取系統,需要從新聞文章中提取公司名稱和產品名稱,可以使用spaCy庫實現這一功能。

import?spacy#?加載預訓練模型
nlp?=?spacy.load("en_core_web_sm")#?處理文本
doc?=?nlp("Apple?announced?the?release?of?the?new?iPhone?13?in?their?latest?event.")#?命名實體識別
for?ent?in?doc.ents:if?ent.label_?in?["ORG",?"PRODUCT"]:print(f"Entity:?{ent.text},?Label:?{ent.label_}")

6 總結

spaCy庫是一個功能強大且易于使用的自然語言處理工具,能夠幫助開發者高效地處理各種NLP任務。通過支持高效的分詞和詞性標注、命名實體識別、依存句法分析、詞向量、多語言處理等特性,spaCy庫能夠滿足各種自然語言處理需求。本文詳細介紹了spaCy庫的安裝方法、主要特性、基本和高級功能,以及實際應用場景。希望本文能幫助大家全面掌握spaCy庫的使用,并在實際項目中發揮其優勢。

THE END !

文章結束,感謝閱讀。您的點贊,收藏,評論是我繼續更新的動力。大家有推薦的公眾號可以評論區留言,共同學習,一起進步。

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

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

相關文章

一個全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核詳解》(可下載)

隨著摩爾定律的逐漸放緩,傳統的芯片設計方法面臨著越來越多的挑戰。而FPGA以其并行處理能力和可編程性,為解決復雜問題提供了新的途徑。它允許設計者在同一個芯片上實現多種不同的功能模塊,極大地提高了資源的利用率和系統的綜合性能。 FPGA…

領域數據模型建設步驟

領域數據模型建設步驟 以某音樂app為例: 1.數據調研和業務調研,識別業務過程,實體,關鍵指標 業務過程:播放,收藏,下載,點擊,購買,支付 實體:音樂&#xff0c…

HCIA-ARP

ARP的由來 ARP這一種協議它會是在我們HCIA中第一個需要完全掌握的一個協議,不然對于數據通訊來說大家都會一直覺得很繞圈 協議棧,網線,網卡,它們組成了我們最小的數據通信的小脈絡注:可以了解ARP攻擊(冒充訪…

使用Java和MyBatis獲取表頭與數據

使用Java和MyBatis獲取表頭與數據 在數據處理與展示中,經常需要將數據庫查詢結果中的表頭(列名)與實際數據提取出來。本文將介紹如何通過Java的JDBC和MyBatis來實現這一需求。 1. 使用JDBC獲取表頭與數據 在JDBC中,可以使用Res…

文獻解讀-群體基因組第二期|《中國人群中PAX2新生突變的檢測及表型分析:一項單中心研究》

關鍵詞:應用遺傳流行病學;群體測序;群體基因組;基因組變異檢測; 文獻簡介 標題(英文):Detection of De Novo PAX2 Variants and Phenotypes in Chinese Population: A Single-Cente…

new CCDIKSolver( OOI.kira, iks ); // 創建逆運動學求解器

demo案例 new CCDIKSolver(OOI.kira, iks); 在使用某個特定的庫或框架來創建一個逆運動學(Inverse Kinematics, IK)求解器實例。逆運動學在機器人學、動畫和計算機圖形學等領域中非常重要,它用于根據期望的末端執行器(如機器人的…

Compose第四彈 Compose項目

目標: 1.可供學習的Compose項目 一、官方提供項目 谷歌官方提供的Compose項目: GitHub - android/compose-samples: Official Jetpack Compose samples. 項目及主要頁面展現 1.1 Reply項目 1.首頁底部TAB欄 2.側邊欄菜單:拖動滑出和收起…

建設現代智能工業-智能化、數字化、自動化節能減排

建設現代智能工業-智能化節能減排 遵循“一體化”能源管理(Integrated Energy Management)的設計宗旨,集成城市各領域(如工業.交通、建筑等)的能源生產和消費信息,面向城市政府、企業、公眾三類實體,提供“一體化”的綜合能源管理…

uniapp h5項目切換導航欄及動態渲染按鈕顏色

1.效果圖 2.html,動態渲染按鈕樣式---三元判斷 <!-- 切換欄 --><view class"statusList"><block v-for"(item,index) in list" :key"index"><view class"swiper-tab-list" :class"current item.id?activ…

CEEMDAN +組合預測模型(CNN-Transfromer + XGBoost)

注意&#xff1a;本模型繼續加入 組合預測模型全家桶 中&#xff0c;之前購買的同學請及時更新下載! 往期精彩內容&#xff1a; 時序預測&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析與比較-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU預測模…

靜態加速和動態加速是啥區別

以下是兩者之間的主要區別&#xff1a; 加速對象與內容&#xff1a; 靜態加速&#xff1a;主要針對網頁中的靜態資源&#xff0c;如HTML文件、CSS文件、JavaScript文件、圖片、Flash動畫等。這些資源的特點是更新頻率較低&#xff0c;適合通過緩存技術加速。 動態加速&#xf…

網絡學習(11) |深入解析客戶端緩存與服務器緩存:HTTP緩存控制頭字段及優化實踐

文章目錄 客戶端緩存與服務器緩存的區別客戶端緩存瀏覽器緩存應用程序緩存優點缺點 服務器緩存優點缺點 HTTP緩存控制頭字段Cache-ControlExpiresLast-ModifiedETag 緩存策略的優化與實踐經驗分享1. 使用合適的緩存頭字段2. 結合使用Last-Modified和ETag3. 利用CDN進行緩存4. 實…

【JAVA WEB實用與優化技巧】如何自己封裝一個自定義UI的Swagger組件,包含Swagger如何處理JWT無狀態鑒權自動TOKEN獲取

目錄 一、Swagger 簡介1. 什么是 Swagger&#xff1f;2. 如何使用 Swagger3. Springboot 中swagger的使用示例1. maven 引入安裝2. java配置 二、Swagger UI存在的缺點1.不夠方便直觀2.請求的參數沒有緩存3.不夠美觀4.如果是JWT 無狀態登錄&#xff0c;Swagger使用起來就沒有那…

STL-stack的使用及其模擬實現

在C標準庫中&#xff0c;stack是一種容器適配器&#xff0c;它以后進先出的方式組織數據&#xff0c;其刪除只能從容器的棧頂進行元素的插入與取出操作。 stack的使用 stack的構造函數 stack的成員函數 empty&#xff1a;判斷棧是否為空back&#xff1a;返回當前棧中元素的數量…

docker之自制django鏡像

一&#xff0c;安裝docker&#xff08;本作者往期文章有docker安裝 &#xff0c;或者更詳細的有關docker安裝&#xff09; 二&#xff0c;拉取centos7鏡像 docker pull centos:7 三&#xff0c;創建容器 docker run -id -v /root/docker/soft:/soft -p 8000:8000 --name djang…

Redis實踐記錄與總結

最近生產環境緩存數據庫數據過大&#xff08;如何搭建單服務redis緩存數據庫&#xff1f;以及可視化工具Another Redis Desktop Manager使用&#xff09;&#xff0c;導致在對數據庫做rdb快照備份時消耗內存過大&#xff0c;緩存數據庫宕機一小時。基礎運維通過增加虛擬機內存暫…

spark相關知識

1.Spark的特點 Spark的設計遵循“一個軟件棧滿足不同應用場景”的理念&#xff0c;逐漸形成了一套完整的生態系統&#xff0c;既能夠提供內存計算框架&#xff0c;也可以支持SQL即席查詢、實時流式計算、機器學習和圖計算等。 運行速度快&#xff0c;易使用&#xff0c;強大的技…

kube-prometheus-stack 識別 k8s 集群內所有的 ServiceMonitor 和 PrometheusRule

默認情況下&#xff0c;kube-prometheus-stack 只自己創建的 ServiceMonitor&#xff0c;如果 k8s 集群內有多個非 kube-prometheus-stack 創建的 ServiceMonitor&#xff0c;不會被識別到。PrometheusRule 同理。 要識別所有的 ServiceMonitor 和 PrometheusRule &#xff0c;…

推薦一個 Java 開源企業級新能源汽車智能共享充電樁管理平臺

文末可獲取 Orise 平臺源碼 01 Orise 智能充電樁管理平臺 奧升( Orise ) 新能源汽車充電樁管理 Saas 云平臺是一個集充電設備管理、用戶充電管理、線上小程序內容管理于一體的綜合管理平臺。Orise充電樁平臺支持高并發業務、業務動態伸縮、樁通信負載均衡&#xff0c;通過Docke…

關于 kubernetes 的9個核心問題解答

本文通過提問題的方式對在 Kubernetes 集群建設中&#xff0c;不同的網絡組件、存儲方案、CI/CD工具、監控系統、網關服務以及服務網格&#xff08;如 Istio&#xff09;等選擇給出一定的參考解答&#xff1b;但在實際工作中需要緊密結合業務規模、系統性能需求、安全性要求以及…