Я хочу запустить какой-нибудь многопроцессорный модуль для параллельного выполнения некоторых совпадений фраз в документах.Для этого я подумал о создании объекта сопоставления фраз в одном процессе, а затем обмениваться ими между несколькими процессами, создавая копию объекта PhraseMatcher.Кажется, код не работает без каких-либо ошибок.Чтобы упростить задачу, я попытался это продемонстрировать, чего я пытаюсь достичь
import copy
import spacy
from spacy.matcher import PhraseMatcher
nlp = spacy.load('en')
color_patterns = [nlp(text) for text in ('red', 'green', 'yellow')]
product_patterns = [nlp(text) for text in ('boots', 'coats', 'bag')]
material_patterns = [nlp(text) for text in ('silk', 'yellow fabric')]
matcher = PhraseMatcher(nlp.vocab)
matcher.add('COLOR', None, *color_patterns)
matcher.add('PRODUCT', None, *product_patterns)
matcher.add('MATERIAL', None, *material_patterns)
matcher2 = copy.deepcopy(matcher)
doc = nlp("yellow fabric")
matches = matcher2(doc)
for match_id, start, end in matches:
rule_id = nlp.vocab.strings[match_id] # get the unicode ID, i.e. 'COLOR'
span = doc[start : end] # get the matched slice of the doc
print(rule_id, span.text)
С объектом matcher2
он не дает никакого вывода, но с объектом matcher
я могу получить результаты.
COLOR yellow
MATERIAL yellow fabric
Я застрял в этом на пару дней.Буду признателен за любую помощь.
Спасибо.