Соответствие последовательности в Python на основе последовательности приоритетов
Я пытаюсь найти наиболее подходящие слова из списка названий акций, и я хочу уделять больше внимания слову впереди, а не слову сзади, хотя слово сзади может иметь больше символов.
Например.
"SG HOLDINGS" против "S2 HOLDINGS"
средство сравнения последовательности покажет, что эти два слова имеют более высокий коэффициент сходства по сравнению с "SG HOLDING" по сравнению с "SG Corp", однако последнее фактически является компанией, которую я ищу. Как я могу придать больший вес слову перед названием акции? Есть ли другая библиотека, которую я могу использовать?
Спасибо
1 ответ
Если все имена имеют формат PREFIX SUFFIX
, вы можете разделить имена и применить ваш сопоставитель последовательности сначала к префиксам, затем к суффиксам, и, упаковав расстояния (скажем, расстояние Левенштейна) обратно в кортежи, вы получите:
1. ('SG', 'HOLDINGS') vs ('S2', 'HOLDINGS') → (1, 0)
2. ('SG', 'HOLDINGS') vs ('SG', 'Corp') → (0, 8)
3. ('SG', 'HOLDINGS') vs ('SG', 'HOLD') → (0, 4)
4. ('SG', 'HOLDINGS') vs ('S2', 'HOLDING') → (1, 1)
Когда вы сортируете эти кортежи расстояний в порядке возрастания, порядок будет [3, 2, 1, 4]
,
Если названия акций содержат различное количество слов, вы можете сосчитать слова в самом длинном имени (например, скажем, самое длинное имя - "Samsung Electronics Ord Shares"; оно содержит 4 слова), а затем расширить все другие наборы частей имени с помощью пустые строки, чтобы соответствовать этой длине, прежде чем вычислять расстояния. Т.е. вы бы работали с: ('SG', 'HOLDINGS', '', '')
,
Новые расстояния:
1. ('SG', 'HOLDINGS', '', '') vs ('S2', 'HOLDINGS', '', '') → (1, 0, 0, 0)
2. ('SG', 'HOLDINGS', '', '') vs ('SG', 'Corp', '', '') → (0, 8, 0, 0)
3. ('SG', 'HOLDINGS', '', '') vs ('Samsung', 'E', 'O', 'S') → (6, 8, 1, 1)
теперь сортируй как [2, 1, 3]
,