Рассмотрим 3 способа цитирования одной и той же статьи:
cite1 = "Yoshua Bengio, Réjean Ducharme, Pascal Vincent and Christian Jauvin, A Neural Probabilistic Language Model (2003), in: Journal of Machine Learning Research, 3(1137--1155)"
cite2 = "Yoshua Bengio, Réjean Ducharme, Pascal Vincent, Christian Jauvin. (2003) A Neural Probabilistic Language Model"
cite3 = "Bengio Y, Ducharme R, Vincent P, Jauvin C. (2003) A Neural Probabilistic Language Model"
Простой способ автоматического определения ссылок на одну и ту же статью - вычислить сходство этих ссылок с модулем difflib
в стандартной библиотеке Python:
from difflib import SequenceMatcher as smatch
def similar(x, y): return smatch(None, x.strip(), y.strip()).ratio()
similar(cite1, cite2) # 0.721
similar(cite1, cite3) # 0.553
similar(cite2, cite3) # 0.802
К сожалению, показатель сходства варьируется от 0,553 до 0,802, поэтому неясно, какой порог следует установить. Если порог слишком низкий, то цитаты из разных статей могут быть ошибочно приняты за одну и ту же. Но если порог слишком высок, мы пропускаем некоторые цитаты.
Есть ли лучшие решения?