Список, содержащий текстовые строки (полные тексты газетных статей), не может быть успешно дедуплицирован. Единственное решение - найти наиболее распространенные предложения, выбрать элементы списка, содержащие эти предложения, а затем выполнить дедупликацию на уровне этих подсписков.
После прочтения множества подобных вопросов у меня все еще нет решения.
Вот четыре различных метода, которые я попробовал:
1] x = list(dict.fromkeys(lst))
2] x = set(lst)
3] from iteration_utilities import unique_everseen
x = list(unique_everseen(lst))
4] using pandas
df = df.drop_duplicates(subset=['article_body'], keep='first')
Все они возвращают одинаковое количество элементов списка.
Однако, когда я проверяю распределение частот наиболее распространенных «предложений» и ищу их. Я все еще нахожу около 45 обращений, так как это предложение встречается в нескольких текстах, некоторые из них идентичны когда все эти тексты объединены в один список, я могу использовать список x = (dict.fromkeys (lst)). Это приводит только к 9 элементам списка.
Как это возможно?
df = pd.read_json('UK data/2010-11.json')
len(df)
13288
df = df.drop_duplicates(subset=['article_body'], keep='first')
len(df)
6118
lst = df['article_body'].tolist()
len(lst)
6118
# taking this solution as a reference point, here it returns 6118 at the level
# of the whole list
len(list(dict.fromkeys(lst)))
6118
from nltk.tokenize import sent_tokenize
searchStr = 'Lines close at midnight.'
found = []
for text in lst:
sentences = sent_tokenize(text)
for sentence in sentences:
if sentence == searchStr:
found.append(text)
len(found)
45
# when the function is used only on a subset of the full-texts, it can suddenly
# identify more duplicates
len(list(dict.fromkeys(found)))
9
РЕДАКТИРОВАТЬ: Пожалуйста, проверьте полную демонстрацию в блокноте Jupyter доступны здесь:
https://colab.research.google.com/drive/1EF6PL8aduZIO--Ok0hGMzLWFIquz6F_L
Я ожидаю, что использование той же функции в полном списке приведет к удалению ВСЕХ дубликатов, но это явно не так. Почему я не могу удалить дубликаты из всего списка? Как я могу убедиться, что каждый элемент списка сравнивается со всеми остальными?