自然語言處理的基本概念--結合spacy軟體的學習

xiaoxiaoqian0519發表於2021-01-02

基本概念

  • doc: 表示document的縮寫,可以結構化地讀取文字相關的資訊,並且不會產生丟失
doc = nlp(text)
for token in doc:
	print(token.text)
  • token表示文字中的字元,比如一個詞或者一個標點符號。要讀取某個位置的詞符,可以直接使用doc的索引;token中也會包含很多屬性,比如.text就會輸出對應的原文;
doc = nlp(text)
token = doc[1]
print(token.text)
  • span例項是文字中包含了一個或者更多字元的一段擷取,僅僅是Doc的一個檢視不包含實際的資料;
doc = nlp(text)
span = doc[1:3]
print(span.text)

統計模型

介紹:從語境中抽取到的語言學屬性,包括:詞性標註、依存關係解析、命名實體識別;
從標註過的文字中訓練而來;
可以使用更多的標註資料來更新模型,優化抽取結果;
模型包括:二進位制權重(用於進行屬性預測),詞彙表和元資訊(配置spacy語言類以及相應的處理流程元件);
在不瞭解屬性的時候,可以使用spacy.explain("對應屬性名稱")來查詢對應的屬性含義;

基於規則的匹配抽取

基於Doc物件而不是直接在字串上進行匹配;
在詞符和其屬性上進行匹配;
會使用到模型的預測結果;

模板匹配

一個元素是字典的列表,一個字元是一個元素

  • 匹配詞符完全一致的文字
[{"TEXT": "iPhone"}, {"TEXT": "X"}]
  • 匹配詞彙屬性
[{"LOWER": "iphone"}, {"LOWER": "x"}]
  • 匹配任意的詞符屬性
[{"LEMMA": "buy"}, {"POS": "NOUN"}]

example:

import spacy
from spacy.matcher import Matcher
nlp = spacy.load("zh_core_web_sm")
matcher = Matcher(nlp.vocab)
pattern = nlp(text)
matches = matcher(doc)
for match_id, start, end in matches:
	matched_span = doc[start:end]
	print(matched_span.text)

匹配詞彙屬性

找出五個字元:
一個只含有數字的字元;
三個匹配到“國際”,“足聯”和“世界盃”的詞符;
一個標點符號詞符;

pattern = [
		{"IS_DIGIT": True},
		{"LOWER": "國際"},
		{“”LOWER“: "足聯”},
		{"LOWER": "世界盃"},
		{"IS_PUNCT": True}
]

匹配其他詞符屬性

尋找兩個詞符:
一個詞根是“喜歡”的動詞,後面跟著一個名詞

pattern = [
		{"LEMMA": "喜歡", "POS": ""VERB},
		{"POS": "NOUN"}
]

使用運算子和量詞

使用運算子和量詞來定義一個詞符應該被匹配幾次。可以用OP這個關鍵詞進行新增。其中"?"運算子使得相應的判斷詞符變為可以選

pattern = [
		{"LEMMA": "買"},
		{"POS": "NUM", "OP": "?"},
		{"POS": "NOUN"}
]

使用運算子和量詞

相關文章