Код для поиска уникальных элементов дает дубликаты элементов из-за различной кодировки символов - PullRequest
0 голосов
/ 04 июня 2019

У меня есть текстовый файл со списком повторяющихся имен (некоторые из которых имеют акцентированные алфавиты, такие как é, à, î и т. Д.)

например. Список: Précilia, Мэгги, Précilia

Мне нужно написать код, который выдаст уникальные имена.

Но мой текстовый файл, кажется, имеет различную кодировку символов для двух акцентированных символов в двух вхождениях Précilia (я думаю, возможно ASCII для одного и UTF-8 для другого). Таким образом, мой код дает оба появления Précilia как разные уникальные элементы. Вы можете найти мой код ниже:

 seen = set()
 with open('./Desktop/input1.txt') as infile:
     with open('./Desktop/output.txt', 'w') as outfile:
         for line in infile:
             if line not in seen:
                 outfile.write(line)
                 seen.add(line)

Ожидаемый результат: Присилия, Мэгги

Фактический и неправильный вывод: Прецилия, Мэгги, Прецилия

Обновление: исходный файл очень большой. Мне нужен способ рассмотреть оба этих случая как одно.

1 Ответ

2 голосов
/ 05 июня 2019

Поэтому мой начальник предложил использовать нормализацию Юникода, которая заменяет эквивалентные последовательности символов, так что любые два текста, которые эквивалентны, будут сведены к одной и той же последовательности кодовых точек, называемой формой нормализации или нормальной формой исходного текста.

Более подробную информацию можно найти по https://withblue.ink/2019/03/11/why-you-need-to-normalize-unicode-strings.html и https://github.com/aws/aws-cli/issues/1639

. На данный момент мы получили положительные результаты в наших тестах и, надеюсь, наш основной набор данных будет работать и с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...