Найти диакритические знаки в строке (нормализовать строки) - PullRequest
1 голос
/ 23 января 2020

У меня есть список многих имен (> 1.000.000), которые мне нужно проверить на наличие диакритических знаков. Поскольку набор данных закодирован в UTF-8 de-DE, я должен учитывать специальные символы, такие как ö,ä,ü.

Имена также могут содержать символы, такие как , - ' . и, конечно, spaces для отчеств.

Это то, что я до сих пор придумал:

Я беру каждое имя и разбиваю его на отдельные символы по очереди. Формула для B1: =ArrayFormula((LOWER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))))

enter image description here

Следующим шагом является сравнение каждой строки в B с массивом разрешенных символов, который пришла ко мне более простая идея, чем выяснить, какие символы недопустимы: {"a"\"b"\"c"\"d"\"e"\"f"\"g"\"h"\"i"\"j"\"k"\"l"\"m"\"n"\"o"\"p"\"q"\"r"\"s"\"t"\"u"\"v"\"w"\"x"\"y"\"z"\"."\"'"\" "\"ö"\"ä"\"ü"\"-"\","}

enter image description here

Формула для C: =ArrayFormula(SUM(--(LOWER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))={"a"\"b"\"c"\"d"\"e"\"f"\"g"\"h"\"i"\"j"\"k"\"l"\"m"\"n"\"o"\"p"\"q"\"r"\"s"\"t"\"u"\"v"\"w"\"x"\"y"\"z"\"."\"'"\" "\"ö"\"ä"\"ü"\"-"\","}))=LEN(A1)), которая возвращает TRUE или FALSE.

Этот подход занимает довольно много времени для такого количества строк. Есть ли лучший, быстрый и лаконичный подход?

1 Ответ

1 голос
/ 23 января 2020

попробовать:

 =ARRAYFORMULA(IF(A1:A="",,LEN(REGEXREPLACE(LOWER(A1:A), "[a-z \.,-äöü']", ))=0))

0

...