【NLP】24. spaCy 教程:自然語言處理核心操作指南(進階)

spaCy 中文教程:自然語言處理核心操作指南(進階)

1. 識別文本中帶有“百分號”的數字

import spacy# 創建一個空的英文語言模型
nlp = spacy.blank("en")# 處理輸入文本
doc = nlp("In 1990, more than 60% of people in East Asia were in extreme poverty. Now less than 4% are.")# 遍歷文檔中的每個詞
for token in doc:if token.like_num:  # 判斷該詞是否看起來像一個數字# 獲取下一個詞next_token = doc[token.i + 1]if next_token.text == "%":print("找到百分比:", token.text)

📌 2. 詞性標注與依存關系分析

import spacy# 加載英文小模型
nlp = spacy.load("en_core_web_sm")# 輸入文本
doc = nlp("She ate the pizza")# 打印每個詞的詞性標簽
for token in doc:print(token.text, token.pos_, token.pos)# 輸出依存結構信息(包括該詞依賴于哪個詞)
for token in doc:print(token.text, token.pos_, token.dep_, token.head.text)

📌 3. 命名實體識別(NER)

# 輸出識別出來的命名實體及其類型
for ent in doc.ents:print(ent.text, ent.label_)

📌 4. 比較不同模型之間的差異(詞性與依存關系)

# 假設 doc_small 和 doc_medium 是使用不同模型處理的結果
for i in range(len(doc_small)):print("詞:", doc_small[i])if doc_small[i].pos_ != doc_medium[i].pos_:print("詞性不同:", doc_small[i].pos_, doc_medium[i].pos_)if doc_small[i].dep_ != doc_medium[i].dep_:print("依存關系不同:", doc_small[i].dep_, doc_medium[i].dep_)

📌 5. 使用 Matcher 匹配自定義文本模式

示例一:識別“購買”某物的句子結構

from spacy.matcher import Matcher
import spacynlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)# 定義匹配“購買某物”的結構
pattern = [{"LEMMA": "buy"}, {"POS": "DET", "OP": "?"}, {"POS": "NOUN"}]
matcher.add("BUY_ITEM", [pattern])doc = nlp("I bought a smartphone. Now I'm buying apps.")
matches = matcher(doc)for match_id, start, end in matches:span = doc[start:end]print("匹配結果:", span.text)

示例二:識別“love + 名詞”的組合

pattern = [{"LEMMA": "love", "POS": "VERB"}, {"POS": "NOUN"}]
matcher.add("LOVE_PATTERN", [pattern])doc = nlp("I loved vanilla but now I love chocolate more.")
matches = matcher(doc)for match_id, start, end in matches:span = doc[start:end]print("匹配:", span.text)

示例三:匹配 “COLORS10”, “COLORS11” 等結構

text = """After the iOS update you won’t notice big changes. Most of iOS 11's layout remains the same as iOS 10."""matcher = Matcher(nlp.vocab)
pattern = [{"TEXT": "COLORS"}, {"IS_DIGIT": True}]
matcher.add("IOS_VERSION", [pattern])doc = nlp(text)
matches = matcher(doc)for match_id, start, end in matches:span = doc[start:end]print("識別出的版本:", span.text)

示例四:識別“download + 專有名詞”的結構

text = """I downloaded Fortnite on my laptop. Should I download WinZip too?"""pattern = [{"LEMMA": "download"}, {"POS": "PROPN"}]
matcher.add("DOWNLOAD_PATTERN", [pattern])doc = nlp(text)
matches = matcher(doc)for match_id, start, end in matches:print("下載內容:", doc[start:end].text)

示例五:匹配“形容詞 + 名詞”結構


text = "Features include a beautiful design, smart search, and voice responses."pattern = [{"POS": "ADJ"}, {"POS": "NOUN"}, {"POS": "NOUN", "OP": "?"}]
matcher.add("ADJ_NOUN", [pattern])doc = nlp(text)
matches = matcher(doc)for match_id, start, end in matches:print("形容詞短語:", doc[start:end].text)

📌 6. 使用 VocabLexeme 操作詞匯表


nlp = spacy.blank("en")# 將字符串轉換為 hash 值
word_hash = nlp.vocab.strings["hat"]
print("字符串 'hat' 的哈希值為:", word_hash)# 再將 hash 值反向轉換為字符串
word_text = nlp.vocab.strings[word_hash]
print("哈希反查:", word_text)# 獲取詞匯的詳細屬性
lexeme = nlp.vocab["tea"]
print(lexeme.text, lexeme.orth, lexeme.is_alpha)

? 7. 手動創建 Doc 和 Span

在 spaCy 中,Doc 是處理文本的核心對象。我們可以使用 Doc 類手動創建文檔,而不是通過 nlp() 處理字符串。

from spacy.tokens import Doc, Span
import spacynlp = spacy.blank("en")  # 創建一個空的英文模型tokens = ["Hello", "world", "!"]
spaces = [True, False, False]  # 單詞之間是否有空格doc = Doc(nlp.vocab, words=tokens, spaces=spaces)
print("創建的文檔:", doc)

接著我們可以用 Span 創建一個實體片段,并加上標簽:

span = Span(doc, 0, 2, label="GREETING")  # "Hello world"
doc.ents = [span]  # 設置 doc 的實體
print("命名實體:", doc.ents)

🛠? 8. 查看與修改 NLP 管道組件

spaCy 的 NLP 模型是一個管道(pipeline),包含多個組件(如分詞、實體識別等)。

print("管道組件名稱:", nlp.pipe_names)
print("組件詳細信息:", nlp.pipeline)

你也可以向管道中添加自定義組件,例如:

from spacy.language import Language@Language.component("length_logger")
def log_doc_length(doc):print(f"文檔長度:{len(doc)}")return docnlp.add_pipe("length_logger", first=True)  # 插入為第一個組件
print("修改后的管道組件:", nlp.pipe_names)doc = nlp("A sample sentence.")

🐛 9. 自定義實體識別器(基于詞性和詞形)

我們用 Matcher 組件來匹配特定詞匯(比如“moth”、“fly”、“mosquito”),并用 Span 標記為實體:

from spacy.matcher import Matchertext = "Qantas flies all sorts of cargo! That includes moths, mosquitos, and even the occasional fly."nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)# 添加匹配規則
for insect in ["moth", "fly", "mosquito"]:matcher.add("INSECT", [[{"LEMMA": insect, "POS": "NOUN"}]])@Language.component("insect_finder")
def mark_insects(doc):matches = matcher(doc)doc.ents = [Span(doc, start, end, label="INSECT") for _, start, end in matches]return docnlp.add_pipe("insect_finder", after="ner")  # 放在命名實體識別之后doc = nlp(text)
print("識別到的昆蟲實體:", [(ent.text, ent.label_) for ent in doc.ents])

🔍 10. 文本向量與相似度計算

spaCy 中的 en_core_web_mden_core_web_lg 模型提供了詞向量。我們可以比較詞、句子的相似度:

nlp = spacy.load("en_core_web_md")doc1 = nlp("I like fast food")
doc2 = nlp("I like pizza")print("句子相似度:", doc1.similarity(doc2))doc = nlp("I like pizza and pasta")
print("詞語相似度(pizza vs pasta):", doc[2].similarity(doc[4]))

📚 11. 使用 nlp.pipe 批量處理文本

如果你需要處理大量文本,nlp.pipe() 是更高效的選擇:

texts = ["First example!", "Second example."]
for doc in nlp.pipe(texts):print("處理結果:", doc)

🧩 12. 給 Doc 添加自定義屬性(Context 擴展)

使用 Doc.set_extension() 可以添加自定義字段,例如 idpage_number

from spacy.tokens import Docdata = [("This is a text", {"id": 1, "page_number": 15}),("And another text", {"id": 2, "page_number": 16}),
]# 只設置一次,重復設置會報錯
try:Doc.set_extension("id", default=None)Doc.set_extension("page_number", default=None)
except ValueError:pass# 給每個 doc 添加上下文屬性
for doc, context in nlp.pipe(data, as_tuples=True):doc._.id = context["id"]doc._.page_number = context["page_number"]print(f"{doc.text} | ID: {doc._.id} | 頁碼: {doc._.page_number}")

🔧 13. 控制管道的運行組件(select_pipes)

你可以臨時禁用某些組件,加快處理速度或避免不必要的分析:

text = """Chick-fil-A is an American fast food restaurant chain headquartered in 
College Park, Georgia."""with nlp.select_pipes(disable=["tagger", "parser"]):  # 臨時關閉組件doc = nlp(text)print("命名實體:", doc.ents)print("詞性標注(關閉 tagger 后):", [token.tag_ for token in doc])

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

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

相關文章

關于香橙派OrangePi 5 Ultra 這個開源板子,開發Android

我下載了它資料中的開源Android13 系統SDK, 這個SDK連個git 都沒有,把這種代碼釋放能稱為開源嗎?? 并且也就是說你買了這個板子,里面是沒有任何關于RK3588的開發文檔,如果你沒玩過其他RK平臺,估…

WHAT - React Portal 機制:將子組件渲染到 DOM 的指定節點

文章目錄 適合場景基本語法示例:Modal 彈窗1. 創建一個簡單的 Modal.tsx2. 在 App 中使用 為什么要用 Portal?TypeScript 中 Portal 類型定義? 適合場景 React Portal 是 React 提供的一種機制,讓你可以將子組件渲染到 DOM 的指定…

數據結構---跳表

目錄 一、跳表的概念 為什么要使用隨機值來確定層高 二、跳表的分析 (1)查找過程 (2)性能分析 三、跳表的實現 四、與紅黑樹哈希表的對比 skiplist本質上也是一種查找結構,用于解決算法中的查找問題&#xff0c…

PCDN通過個人路由器,用更靠近用戶的節點來分發內容,從而達到更快地網絡反應速度

PCDN(P2P CDN)的核心思想正是利用個人路由器、家庭寬帶設備等分布式邊緣節點,通過就近分發內容來降低延遲、提升網絡響應速度,同時降低傳統CDN的帶寬成本。以下是其技術原理和優勢的詳細分析: 1. 為什么PCDN能更快&…

用excel做九乘九乘法表

公式: IF($A2>B 1 , 1, 1,A2 & “" & B$1 & “” & $A2B$1,”")

凡泰極客亮相QCon2025鴻蒙專場,解析FinClip“技術+生態”雙引擎

2025年4月10日,備受矚目的QCon開發者技術峰會盛大舉行,本次活動開設鴻蒙專場以“HarmonyOS NEXT 創新特性與行業實踐”為主題,匯聚了眾多鴻蒙生態的領軍人物與技術專家,共同探討鴻蒙操作系統的技術創新與行業應用。 凡泰極客CTO徐…

java HttpServletRequest 和 HttpServletResponse

HttpServletRequest 和 HttpServletResponse 詳解 1. HttpServletRequest(HTTP 請求對象) HttpServletRequest 是 Java Servlet API 提供的接口,用于封裝客戶端的 HTTP 請求信息。它繼承自 ServletRequest,并增加了 HTTP 協議相…

HAL TIM PWM產生 藍橋杯

目錄 0.原理 0.1 CNT和CCR關系 0.2 PWM模式1模式2 1. cubemx配置 需求(將PA1輸出1Khz的 50%占空比的方波) 1.0 PWM的頻率計算: 2.代碼 0.原理 0.1 CNT和CCR關系 CNT計數器和CCR比較器進行比較,如果是向上計數,CNT逐漸增加,CCR是虛線位置,也是用戶自定義的…

python入門:簡單介紹和python和pycharm軟件安裝/學習網址/pycharm設置(改成中文界面,主題,新建文件)

Python 目前是 AI 開發的首選語言 軟件安裝 python解釋器 官網下載 Python |Python.org 勾選 Add python.exe to PATH 將python.exe添加到PATH 勾選這個選項會將Python的可執行文件路徑添加到系統的環境變量PATH中。這樣做的好處是,你可以在命令行中從任何位置直…

CMD命令行筆記

CMD命令行筆記,涵蓋常用命令及實用技巧,適合快速查閱: 一、基礎操作 打開CMD Win R → 輸入 cmd → 回車管理員模式:右鍵開始菜單 → 選擇“命令提示符(管理員)” 常用命令 help:查看所有命令…

android中dp和px的關系

關于android的dp和px的關系是我剛開始學習android的第一個知識點,不知不覺學安卓也有一年了,但是偶然間我發現我理解的dp和px的關系一直是錯的,真的是有一點搞笑,今天特意寫一篇博客紀念一下這個我理解錯一年的知識點。 dp和px之間…

(四)機器學習---邏輯回歸及其Python實現

之前我們提到了常見的任務和算法,本篇我們使用邏輯回歸來進行分類 分類問題回歸問題聚類問題各種復雜問題決策樹√線性回歸√K-means√神經網絡√邏輯回歸√嶺回歸密度聚類深度學習√集成學習√Lasso回歸譜聚類條件隨機場貝葉斯層次聚類隱馬爾可夫模型支持向量機高…

【汽車產品開發項目管理——端到端的汽車產品誕生流程】

MPU:集成運算器、寄存器和控制器的中央處理器芯片 MCU:微控制單元,將中央處理器CPU、存儲器ROM/RAM、計數器、IO接口及多種外設模塊集成在單一芯片上的微型計算機系統。 汽車產品開發項目屬性:臨時性、獨特性、漸進明細性、以目標…

Python將不能修改的值稱為不可變的 ,而不可變的列表被稱為元組------元組

列表非常適合用于存儲在程序運行期間可能變化的數據集。列表是可以修改的,這對處理網站的用戶列表或游戲中的角色列表至關重要。然而,有時候你需要創建一系列不可修改的元素,元組可以滿足這種需求。Python將不能修改的值稱為不可變的&#xf…

智慧醫院室內導航系統架構拆解:技術選型與性能攻堅指南

本文面向醫院信息化團隊技術負責人及醫療IoT解決方案開發者,聚焦解決大規模院區導航系統的擴展性、多源數據融合及實時路徑規劃等技術難點,提供從架構到落地的完整技術路線圖。 如需獲取智慧醫院導航導診系統解決方案請前往文章最下方獲取,如…

醫藥采購系統平臺第4天03:實現根據用戶的角色顯示不同用戶的權限菜單編寫攔截器實現權限攔截模塊的開發流程和測試流程小節

如果想要獲取相關的源碼,筆記,和相關工具,對項目需求的二次開發,可以關注我并私信!!! 四 權限管理(用戶授權)的應用:根據用戶的角色顯示不同用戶的權限菜單 經過上面的與第三方系統的成功的接入,而且在“角色管理”菜單中也對需要授權的角色進行了授權--->給一級…

#2 物聯網組成要素

從下至上,則包括了5個要素,包括 設備 / 傳感器 / 網絡 / 物聯網服務 / 數據分析 這五個要素。為了便于理解,我們用思維導圖展示 物聯網構成架構 設備 能夠感測和反饋并連到網絡進行物聯網服務的裝置 傳感器 傳感器和網關的融合實現了物…

< 自用文 Project-30.6 Crawl4AI > 為AI模型優化的網絡爬蟲工具 幫助收集和處理網絡數據的工具

官方鏈接: Github :https://github.com/unclecode/crawl4ai 文檔主頁:https://docs.crawl4ai.com/ 當前版本:Crawl4AI v0.5.0 主要新功能: 可配置策略(廣度優先、深度優先、最佳優先)探索整…

【Kafka基礎】監控與維護:動態配置管理,靈活調整集群行為

1 基礎配置操作 1.1 修改主題保留時間 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-configs.sh --alter \--bootstrap-server 192.168.10.33:9092 \--entity-type topics \--entity-name yourtopic \--add-config retention.ms86400000 參數說明: retention…

04-微服務 面試題-mk

文章目錄 1.Spring Cloud 常見的組件有哪些?2.服務注冊和發現是什么意思?(Spring Cloud 如何實現服務注冊發現)3.Nacos配置中心熱加載實現原理及關鍵技術4.OpenFeign在微服務中的遠程服務調用工作流程5.你們項目負載均衡如何實現的 ?6.什么是服務雪崩,怎么解決這個問題?…