Я действительно не уверен, где разместить этот вопрос, так как это скорее вопрос управления данными, чем вопрос программирования, а также несколько субъективный. Я удалю / перепишу в другом месте, если это не то место.
Я создаю глоссарий терминов, используя восходящий подход. А именно, я изначально генерирую термины из всех уникальных имен логических столбцов из разных баз данных и объединяю их в одно центральное место - глоссарий. Очистка и создание отношений оказывается чрезвычайно сложным и ручным процессом до сих пор. Этот конкретный пост посвящен автоматизации создания таксономий / иерархических группировок в большом списке терминов глоссария.
Допустим, у меня есть список из десяти терминов в глоссарии ниже. Термины в моем глоссарии, которые, как я знаю, связаны, не обязательно объединены каким-либо соглашением об именах, поэтому я имитирую это с помощью этого списка:
['term a',
'second term',
'term 3',
'term d',
'term number five',
'sixth term',
'seventh term',
'term eight',
'ninth term',
'term 10']
Я точно знаю, что sixth term
является родительским термином term a
, term number five
и term 10
, и в идеале я хотел бы создать эту ассоциацию в чем-то вроде словаря списков Python, как показано ниже:
{'sixth term': ['term a', 'term number five', 'term 10']}
Итак, моя проблема в том, что:
- У меня есть ряд терминов, которые, как я знаю, связаны иерархически
- Соответствующие термины не обязательно соответствуют стандартному соглашению об именах
Мои первые мысли о том, как с этим бороться:
- Попытка использовать сопоставление строк в определениях этих терминов
- Нахождение какой-либо общей терминологии, которая существует существует между связанными терминами и начиная с этого
- Использование библиотеки, такой как difflib, для сопоставления последовательностей терминов и их определений
Проблема с использованием определений в качестве входных данных заключается в том, что определения не всегда так хороши, и попытка обнаружить семантическое сходство может не дать полезных результатов. И я скептически отношусь к выполнению сопоставления последовательности, поскольку, как я уже упоминал, связанные термины не обязательно соответствуют одному и тому же соглашению об именах, и сопоставление последовательности может не дать хороших результатов.
При необходимости я могу просто создать ассоциации вручную, но, поскольку глоссарий очень большой (около 9 000 терминов), я действительно хочу этого избежать. Я также подозреваю, что есть способ сделать это с машинным обучением, поскольку это кажется проблемой классификации, но я буду честен, говоря, что я действительно новичок в ML и действительно не знаю, какой алгоритм будет способен делать то, что я ищу.
По сути, у меня есть проблема, которая несколько уникальна в том смысле, что это проблема управления, которая перешла в программную, и сейчас я могу думать только о создании этих ассоциаций вручную. Не столько для поиска кода, сколько для библиотек, инструментов или общих советов о том, как справиться с такой проблемой, как эта.