Какая форма нормализации Юникода подходит для интеллектуального анализа текста?
Я много читал на тему Unicode, но я все еще очень озадачен нормализацией и ее различными формами. Короче говоря, я работаю над проектом, который включает извлечение текста из файлов PDF и выполнение некоторого семантического анализа текста.
Мне удалось удовлетворительно извлечь текст, используя простой скрипт на Python, но теперь мне нужно убедиться, что все эквивалентные орфографические строки имеют одно (и только одно) представление. Например, типографская лигатура 'fi' должна быть разложена на 'f' и 'i'.
Я вижу, что питон unicodedata.normalize
Функция предлагает несколько алгоритмов для нормализации кодовых точек юникода. Может ли кто-нибудь объяснить, пожалуйста, разницу между:
- NFC
- NFKC
- NFD
- NFKD
Я прочитал соответствующую статью в Википедии, но она была слишком непрозрачной, чтобы мой слабый мозг мог ее понять. Может ли кто-нибудь любезно объяснить мне это простым английским языком?
Кроме того, не могли бы вы порекомендовать метод нормализации, наиболее подходящий для проекта обработки естественного языка?
1 ответ
Символы, подобные é, могут быть записаны как один символ или как последовательность из двух e
плюс акцент (диакритический знак). Нормализация последовательно выбирает среди таких альтернатив и упорядочивает несколько диакритических знаков.
Поскольку вам нужно иметь дело с лигатурами, вы должны использовать "композицию совместимости (де)", NFKD или NFKC, которая нормализует лигатуры. Вероятно, можно использовать составные или разложенные формы, но если вы также хотите выполнить сопоставление с потерями (например, сопоставить é, даже если пользователь вводит обычный e, вы можете использовать декомпозицию совместимости NFKD и отбросить диакритические знаки для свободного сопоставления.