Распознавание многословных выражений в Spacy

У меня есть текст вместе с записями указателя, некоторые из которых указывают на важные многословные выражения (MWE), встречающиеся в тексте (например, «губчатая кость» для текста по биологии). Я хотел бы использовать записи для создания настраиваемого сопоставителя в spaCy, чтобы я мог распознавать вхождения MWE в тексте. Дополнительным требованием является то, что мне нужны совпадения для сохранения лемматизированных представлений и тегов POS составляющих слов MWE.

Я просмотрел существующие примеры spaCy, которые делают похожие вещи, но, похоже, не могу понять закономерность.


person Bill Andersen    schedule 16.12.2016    source источник


Ответы (1)


В документации Spacy не очень ясно, как использовать класс Matcher с несколькими фразами, но есть соответствие с несколькими фразами пример в репозитории Github.

Недавно я столкнулся с той же проблемой, и я понял, что она работает, как показано ниже. Мой текстовый файл содержит по одной записи в каждой строке с фразой и ее описанием, разделенными символом «::».

import spacy
import io
from spacy.matcher import PhraseMatcher

nlp = spacy.load('en')
text = nlp(u'Your text here')
rules = list()

# Create a list of tuple of phrase and description from the file
with io.open('textfile','r',encoding='utf8') as doc:
    rules = [tuple(line.rstrip('\n').split('::')) for line in doc]

# convert the phrase string to a spacy doc object 
rules = [(nlp(item[0].lower()),item[-1]) for item in rules ]

# create a dictionary for accessing value using the string as the index which is returned by matcher class
rules_dict = dict()
for key,val in rules:
    rules_dict[key.text]=val

# get just the phrases from rules list
rules_phrases = [item[0] for item in rules]

# match using the PhraseMatcher class
matcher = PhraseMatcher(nlp.vocab,rules_phrases)
matches = matcher(text)
result = list()

for start,end,tag,label,m in matches:
    result.append({"start":start,"end":end,"phrase":label,"desc":rules_dict[label]})
print(result)
person Paras Dahal    schedule 08.01.2017
comment
Не могли бы вы предоставить образец вашего файла для «текстового файла»? - person Greg Svitak; 12.03.2018