Python spaCy NLP自定义规则匹配器
我是NLP的乞丐。我正在为我的NLP项目使用spaCy python库。这是我的要求 我有一个包含所有国家名称的JSON文件。现在我需要解析并获得文档中每个国家的金牌数。鉴于 在例句下面Python spaCy NLP自定义规则匹配器,python,nlp,nltk,spacy,Python,Nlp,Nltk,Spacy,我是NLP的乞丐。我正在为我的NLP项目使用spaCy python库。这是我的要求 我有一个包含所有国家名称的JSON文件。现在我需要解析并获得文档中每个国家的金牌数。鉴于 在例句下面 "Czech Republic won 5 gold medals at olympics. Slovakia won 0 medals olympics" 我能查到国家的名字,但不能查到奖牌数。下面是我的代码。请帮助继续 import json from spacy.lang.en import Engli
"Czech Republic won 5 gold medals at olympics. Slovakia won 0 medals olympics"
我能查到国家的名字,但不能查到奖牌数。下面是我的代码。请帮助继续
import json
from spacy.lang.en import English
from spacy.matcher import PhraseMatcher
with open("C:\Python36\srclcl\countries.json") as f:
COUNTRIES = json.loads(f.read())
nlp = English()
nlp.add_pipe(nlp.create_pipe('sentencizer'))
doc = nlp("Czech Republic won 5 gold medals at olympics. Slovakia won 0 medals olympics")
matcher = PhraseMatcher(nlp.vocab)
patterns = list(nlp.pipe(COUNTRIES))
matcher.add("COUNTRY", None, *patterns)
for sent in doc.sents:
subdoc = nlp(sent.text)
matches = matcher(subdoc)
print (sent.text)
for match_id, start, end in matches:
print(subdoc[start:end].text)
另外,如果给定的文本是
"Czech Republic won 5 gold medals at olympics in 1995. Slovakia won 0 medals olympics"
Spacy提供了您可以使用的功能
它们可以按如下方式使用:
import spacy
from spacy.pipeline import EntityRuler
nlp = spacy.load('en_core_web_sm', disable=["ner", "parser"])
countries = ['Czech Republic', 'Slovakia']
ruler = EntityRuler(nlp)
for a in countries:
ruler.add_patterns([{"label": "country", "pattern": a}])
nlp.add_pipe(ruler)
doc = nlp("Czech Republic won 5 gold medals at olympics. Slovakia won 0 medals olympics")
with doc.retokenize() as retokenizer:
for ent in doc.ents:
retokenizer.merge(doc[ent.start:ent.end])
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
pattern =[{'ENT_TYPE': 'country'}, {'lower': 'won'},{"IS_DIGIT": True}]
matcher.add('medal', None, pattern)
matches = matcher(doc)
for match_id, start, end in matches:
span = doc[start:end]
print(span)
输出:
捷克共和国赢了5场斯洛伐克0胜 上面的代码应该可以帮助您开始。当然,您必须编写自己更复杂的规则,以便处理以下情况: “捷克共和国在1995年奥运会上获得5枚金牌,这并不令人惊讶。” 和其他更复杂的句子结构