Я пытаюсь повторить недавний рабочий документ Коэна («Ленивые цены»).
Основная идея этого документа заключается в том, что «Фирмы, публикующие Финансовое раскрытие информации, имеющее низкое сходство с прошлым годом, вероятно, покажутся хуже».производительность в среднем "
Для измерения сходства он использует четыре показателя сходства: Cosine, Jaccard, Sim_MinEdit, Sim_Simple.
Я полагаю, что первые два показателя широко используются, поэтому методы, относящиеся к нимдовольно хорошо известны.
Однако последние два выглядят весьма неоднозначно.
Для Sim_MinEdit он объяснил, что он был рассчитан путем подсчета наименьшего количества операций, необходимых для преобразования одного документа в другой.. (Например, от «Мы ожидаем, что спрос увеличится» до «Мы ожидаем, что слабость в продажах» принимает, «спрос», «к» и «увеличение» будут удалены, а «слабость», «в» и «продажи "должны быть добавлены.)
Это выглядит очень похоже на Редактировать расстояние, такое как расстояние Левенштейна. Однако, насколькоЯ искал, все материалы о Левенштейне в Интернете вычисляются на «уровне персонажа».
У меня вопрос: есть ли какой-нибудь алгоритм, который вычисляет сходство на уровне слов, используя базовые принципы Левенштейна?
Во-вторых, Sim_Simple использует «Отслеживание изменений» в Microsoft Words или функцию «diff» в терминале Unix / Linux.Я обнаружил, что Difflib - SequenceMatcher на python делает ту же работу.Однако, поскольку я пытаюсь измерить сходство на уровне слов, я использую
SequenceMatcher(None, doc1.split(), doc2.split()).ratio())
вместо
SequenceMatcher(None, doc1, doc2).ratio())
, где doc1, doc2 - тексты.
Я знаю, что stackoverflow не является местом для такого рода вопросов, но, поскольку я сам не смог найти какую-либо соответствующую информацию в сети, застрял здесь навсегда, я ищу некоторую помощь .. !!