Измерение сходства между двумя длинными текстами - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь повторить недавний рабочий документ Коэна («Ленивые цены»).

Основная идея этого документа заключается в том, что «Фирмы, публикующие Финансовое раскрытие информации, имеющее низкое сходство с прошлым годом, вероятно, покажутся хуже».производительность в среднем "

Для измерения сходства он использует четыре показателя сходства: 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 не является местом для такого рода вопросов, но, поскольку я сам не смог найти какую-либо соответствующую информацию в сети, застрял здесь навсегда, я ищу некоторую помощь .. !!

...