Итак, я пытаюсь преобразовать «сокращенный» список фраз существительных, описывающих занятия, в «полный» список этих фраз. Это должно выглядеть примерно так:
Примеры (вход -> выход):
- Генеральный и операционный менеджеры -> [Генеральный менеджер, операционный менеджер]
- Специалисты по ремонту автобусов и грузовиков, а также специалисты по дизельным двигателям -> [Специалисты по ремонту автобусов и грузовиков, специалисты по дизельным двигателям]
- Составители претензий, оценщики и эксперты -> [Установщики претензий, оценщики претензий, эксперты по искам]
- Техники и механики по обслуживанию тяжелой техники и мобильной техники -> [Техники по обслуживанию тяжелой техники, механики по тяжелой технике, техники по обслуживанию мобильной техники, механики мобильной техники]
Я попробовал тяжелый подход, основанный на правилах, но мне это не понравилось.
Я также попробовал простое разделение на части с помощью spaCy, но первоначальные результаты также не идеальны.
Код spaCy выглядит следующим образом:
import spacy
nlp = spacy.load("en_core_web_sm")
def get_chunks(sentence):
res = []
doc = nlp(u'{}'.format(sentence))
for np in doc.noun_chunks:
res.append(np.text)
return res
Для точных входных данных, как указано выше, код возвращает:
- ['операции', 'менеджеры']
- [«Механики автобусов и грузовиков», «Специалисты по дизельным двигателям»]
- [«Органы по урегулированию претензий», «оценщики», «эксперты», «следователи»]
- ['Тяжелая техника', 'Техники по обслуживанию мобильной техники', 'Механики']
Я подумываю перейти к подходу, основанному на правилах, но, возможно, у кого-то есть лучшее предложение?
Спасибо и ура!