Как перечислить уникальные символы в документе UTF-8? С седом? - PullRequest
1 голос
/ 23 июля 2011

Я конвертирую некоторые польские <-> английские словари из RTF в HTML. Польские спецсимволы выходят хорошо. Но глифы IPA (International Phonetic Alphabet) меняются на забавные, в зависимости от того, какую программу я использую для конвертации. Например, / ˈbiːrɪ / выходит как / ÈbiùrI / или /∪βιρΙ/.

Я бы хотел исправить эти документы с помощью поиска и замены, но я хочу убедиться, что я не пропускаю никаких символов и не хочу вручную разбирать записи словаря. Я хотел бы вывести список всех уникальных символов NON-ascii в документе.

Я нашел эту тему: Поиск уникальных символов в файле

... и я попробовал следующие два предложения:
sed -e "s /./ \ 0 \ n / g" inputfile | сортировать -u
sed -e "s / (.) / \ 1 \ n / g" входной файл | сортировать -u

Они оба прекрасно работают и, похоже, выдают одинаковый результат. Моя проблема в том, что они выводят только стандартные символы ASCII, а то, что я ищу, с точностью до наоборот.

Инструмент sed выглядит потрясающе, но у меня нет времени изучать его прямо сейчас (хотя я собираюсь позже). Я надеюсь, что решение будет понятно для тех, кто уже освоил этот инструмент, и они могут сэкономить мне много времени. [-:

Заранее спасибо!

1 Ответ

1 голос
/ 23 июля 2011

Это не решение sed, а решение Python. Он считывает содержимое файла, принимает его как UTF-8, а затем превращает его в набор (таким образом отбрасывая дубликаты), выбрасывает символы ASCII (0-127), сортирует его и затем снова соединяет его вместе с пустым строка между каждым символом:

'\n'.join(sorted(set(unicode(open(inputfile).read(), 'utf-8')) - set(chr(i) for i in xrange(128))))

Как что-то, что вы запускаете из командной строки, если чувствуете, что склонны,

python -c "print '\n'.join(sorted(set(unicode(open('inputfile').read(), 'utf-8')) - set(chr(i) for i in xrange(128))))"

(Вы также можете использовать ''.join вместо '\n'.join, в котором будут перечислены символы без новой строки.)

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