В какой структуре лучше хранить массивы синонимов номенклатур?
Есть массивы синонимов (в данном случае синоним подразумевает собой тождественно равные элементы номенклатуры из различных справочников, н-р "Яблоко, красное" , "Яблоко красное", "Яб.кр.", "Яблоко №..." "№123456" и т.п.):
Массив-1: "Синоним 1-1", "Синоним 1-2"... "Синоним 1-N"
Массив-2: "Синоним 2-1", "Синоним 2-2"... "Синоним 2-M"
...
Массив-i: "Синоним i-1", "Синоним i-2"... "Синоним i-K"
На ввод передаются две строки. Нужно вернуть True, если они находятся в одном массиве.
Единственное, что я смог придумать, это матрица списков и сравнение в цикле for, но возможно есть более эффективное решение?
Использование библиотек, которые бы сравнивали слова и выдавали, что они похожи, такие как Levenshtein или difflib не вариант, т.к. есть совершенно непохожие, но одинаковые элементы (н-р, "Яблоко, красное" и "№123вв456")
В любой реляционной БД https://stackoverflow-com.translate.goog/questions...
Прямая цитата:
Ваша таблица слов должна содержать все слова (ВСЕ), ваша таблица синонимов содержит только указатели на синонимы (а не на отдельное слово!) ..
Если бы у вас было три слова: A, B и C, которые являются синонимами, ваша БД была бы
WORD_TABLE SYNONYM_TABLE
ID | WORD W_ID | S_ID
---+----- -----+-------
1 | A 1 | 2
2 | B 2 | 1
3 | C 1 | 3
3 | 1
2 | 3
3 | 2
Не бойтесь большого количества записей в SYNONYM_TABLE, ими будет управлять компьютер, и они необходимы для отражения существующих связей между словами.
Можно хештаблицу/словарь использовать, где ключом будет синоним, а значением - "каноничное" название / идентификатор.
Каноничное название собственно тоже в ней будет и будет указывать на само себя.
Тогда при запросе ты просто будешь сравнивать, что значение у двух ключей одно и то же.