Perl Script для удаления всего английского из большого текстового файла Unicode - PullRequest
1 голос
/ 12 мая 2011

Я все еще новичок в таких вещах, как bash и perl, и мне нужна помощь с задачей. Я нахожусь в процессе подготовки (добавления и редактирования) большого корпуса кхмерского Unicode для использования с патчем для разрыва слов в кхмерском ICU.

До сих пор я не смог найти стабильного решения для автоматического удаления всех английских букв и знаков препинания (оставив только кхмерский).

Мне сказали, что Perl может быть подходом, но я не уверен, с чего начать (я на самом деле не программист).

В прошлом я использовал скрипт bash, но результаты были не идеальными (в итоге мне пришлось проверять список вручную и удалять нехмерские символы).

Вот несколько советов, которые у меня были в прошлом:

LC_ALL=POSIX sort khmerdict.txt | sed '/[[:punct:]]/d' > khmer-sorted.txt

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

А это:

sed -e 's/[a-zA-Z]//g' -e 's/​/ /g' -e 's/\t/ /g' -e 's/[«|»|:|;|.|,|(|)|-|?|។|”|“]//g' -e 's/[0-9]//g' -e 's/ /\n/g' -e 's/០//g' -e 's/១//g' -e 's/២//g' -e 's/៣//g' -e 's/៤//g' -e 's/៥//g' -e 's/៦//g' -e 's/៧//g' -e 's/៨//g' -e 's/៩//g' dictionary.txt | \

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

У кого-нибудь есть идея стабильного решения для этого, которое бы хорошо работало с кхмерским Unicode? Может быть, есть способ удалить все, используя диапазон символов Unicode ( Кхмерское отображение Unicode PDF )?

Если вы хотите что-то попробовать в словаре, вы можете скачать тестовую версию здесь: http://www.sbbic.org/Khmer-Unicode-Wordlist.zip

А вот короткий список, с которым можно поиграться:

កំណត់
--
ស្រូវ
ទម្លាប់
}
é
"សំយុង
"លើក"
"ព"
"ផ"
ទស្សន--
–សម្ភាស
ចម្ងាយahead
ទាត់១

Спасибо, Nathan

Ответы [ 2 ]

5 голосов
/ 12 мая 2011

Некоторые версии sed могут поддерживать не ASCII, многобайтовые кодировки, но я бы просто использовал Perl, где поддержка Unicode, вероятно, более надежна (и даже читабельна: вы можете использовать имена блоков и ссылаться на специальныесимволы без необходимости использовать их буквально).

Оставьте CR, LF, ZERO WIDTH NON-JOINER и все символы из блоков кхмерских и кхмерских символов:

perl -CIO -pe '
    s/[^\r\n\x{200C}\p{Khmer}\p{KhmerSymbols}]+//g;   # characters to keep
' <input >output

То же, что и выше, нотакже убирая кхмерские цифры (U + 17E0 – U + 17E9):

perl -CIO -pe '
    s/[^\r\n\x{200C}\p{Khmer}\p{KhmerSymbols}]+//g;   # characters to keep
    s/[\x{17E0}-\x{17E9}]+//g;                        # more characters to drop
' <input >output

Я тестировал с Perl 5.8.9, Perl 5.10.0 и Perl 5.12.1.

Удалить \p{KhmerSymbols} если вы не хотите оставлять символы из блока кхмерских символов.

Ввод должен быть в формате UTF-8 (ваш заархивированный тестовый файл был).Вывод будет UTF-8.

Вот некоторая статистика строк для вашего Khmer-Unicode-Wordlist.txt (разрывы строк CRLF):

  • 28378 строк (в последней отсутствует CR+ LF)
  • 28052 строки только с «кхмерскими символами» (те из блоков кхмерских (U + 1780 – U + 17FF) или кхмерских символов (U + 19E0 – U + 19FF))
  • 308 строк со смешанными символами («кхмерские символы» и другие)
  • 18 строк без каких-либо «кхмерских символов»
  • 51 строка с НУЛЕВОЙ ШИРОКОЙ ШУМ (U+ 200C)
    Все это происходило в середине последовательности символов кхмерского / кхмерского символа.
    Они могут или не могут иметь значение для ваших целей.
    Удалите \x{200C} из вышеуказанных программ, если выне хочу хранить эти ZWNJ.
1 голос
/ 12 мая 2011
perl -CS -Mutf8 -lpe's/[^ក-៝៰-៹]//g' < mixed.UTF-8.txt > khmer-only-no-digits.UTF-8.txt

Это отрицательный класс символов.

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