spacy其余内容
总体介绍
之前的博客有提到spacy是由pipelines中的不同的model进行处理的,spacy的整理,下面会简单介绍spacy的其余部分的内容。
规则匹配
获取训练样本
如果没有标注好的数据集,那么可以利用模型来对原始的样本进行分析处理,接着对分析好的样本进行修正,利用这些修正的标签的数据集作为训练集。
设置entity
- 设置entity
对doc.ents的标签进行设置,并且将新的entity设置为Span类;
import spacy
from spacy.tokens import Span
nlp = spacy.load("en_core_web_sm")
text = "" #self-defined
doc = nlp(text)
ents = [(e.text, e.start_char, e_end_char, e.label_) for e in doc.ents]
**fb_ent = Span(doc, 0,1, label="ORG")
doc.ents = list(doc.ents)+[fb_ent]**
##上面的两行代码是表示添加了fb作为新的entity
ents = [(e.text, e.start_char, e.end_char, e.label_) for e in doc.ents]
- 利用array设置entity标签
利用doc.from_array
来给entity设置标签;
import numpy as np
import spacy
from spacy.attrs import ENT_IOB, ENT_TYPE
nlp = spacy.load("en_core_web_sm")
doc = nlp(text) #text is self-defined string
header = [ENT_IOB, ENT_TYPE]
attr_array = np.zeros((len()doc), len(header)), dtype="uint64")
attr_array[0,0] = 3
attr_array[0,1] = doc.vocab.strings["GPE"]
doc.from_array(header, attr_array)
entity linking
可以创建自己的knowledge base或者利用别人制作的KB来训练自己的model;
添加token分词规则
import spacy
from spacy.symbols import ORTH
nlp = spacy.load("en_core_web_sm")
doc = nlp("gimme that")
print([w.text for w in doc]) # original tokens
special_case = [{ORTH:"gim"}, {ORTH:"me"}]
nlp.tokenizer.add_special_case("gimme", special_case)
print([w.text for w in nlp("gimme that")])
定义token类
需要考虑以下六个条件:
- 特殊类别的字典;
- prefix_search;
- suffix_search;
- infixes_finditer;
- token_match: 不能被分开的字符串,重写infix规则;
- url_match: 和token_match很相似,除了在使用这个match之前将prefixes和suffixes移除;
常规做法是利用re.compile()来创建一个规则表达式,接着使用.s