Я не уверен, что формулирование этой проблемы как задачи распознавания сущностей с чисто именованными значениями действительно имеет здесь смысл. Именованные сущности обычно являются собственными существительными и «объектами реального мира» - например, имя человека, например «Джон Доу», название организации, например «Google», или такие вещи, как болезни или гены, для именования примеров из более конкретного домена. Это также то, для чего оптимизатор именованных объектов spaCy оптимизирован.
В вашем примере кажется, что большинство подсказок на самом деле в синтаксисе , который вы обычно можете предсказать довольно хорошо из коробки. Например, вы ищете глаголы, такие как «добавить» и «метка», и их объекты («текстовое поле») или прикрепленные фразы предложения. Если вы визуализируете синтаксис, например, используя модуль displacy
, вы увидите, что в структуре предложений есть много соответствующей информации, которую вы можете извлечь программным путем:
from spacy import displacy
doc = nlp("I want to add a text field having name as new data")
displacy.serve(doc)
Вы также можете использовать сопоставление на основе правил , чтобы найти триггерные токены, такие как "label"
(с тегом части речи VERB
), а затем проверить дерево зависимостей найти жетоны, прикрепленные к ним. Например, если глагол «метка» прикреплен к предлогу «как», вы можете быть совершенно уверены, что прикрепленный к нему объект является именем метки. Или вы можете начать с корня предложения и перебрать его subtree
и проверить, содержит ли оно токены или интересующие вас конструкции.
Возможно, вам придется немного поэкспериментировать, и вы, вероятно, в конечном итоге получите кучу разных правил для охвата различных типов конструкций, которые распространены в ваших данных.