Восточное Полушарие
Китайский форум => Китайский язык: письменность, изучение, диалекты, вэньянь => Китайский Язык: компьютеры, программы, шрифты => Тема начата: Dirk Diggler от 02 Декабря 2005 15:35:34
-
С помощью какого софта можно регэкспами обработать китайский текст?
-
С помощью какого софта можно регэкспами обработать китайский текст?
С помощью Microsoft Word, например. Там это называется place holders, доступно через опцию поиска-замены. У них свой синтаксис, отличный от, например, синтаксиса Perl (надо смотреть справку). Если текст слишком большой (более 20 мегабайт) могу посоветовать TextPipe.
-
С помощью какого софта можно регэкспами обработать китайский текст?
С помощью Microsoft Word, например. Там это называется place holders, доступно через опцию поиска-замены. У них свой синтаксис, отличный от, например,
Боюсь, этот отброс не подойдет. Нужна серьезная софтина, ибо задача нетривиальная - в тексте много одинаковых абзацев, надо оставить по одному экземпляру. Вряд ли ворд это сможет 8-)
Если текст слишком большой (более 20 мегабайт) могу посоветовать TextPipe.
А он же только юникод умеет... А мне бы GB...
-
С помощью какого софта можно регэкспами обработать китайский текст?
С помощью Microsoft Word, например. Там это называется place holders, доступно через опцию поиска-замены. У них свой синтаксис, отличный от, например,
Боюсь, этот отброс не подойдет. Нужна серьезная софтина, ибо задача нетривиальная - в тексте много одинаковых абзацев, надо оставить по одному экземпляру. Вряд ли ворд это сможет 8-)
Не понимаю, что Вы имеете в виду. Ворд может практически всё, что можно сделать с текстом. Насчёт одинаковых абзацев - я бы это делал через макросы. Если что-то не получается, дайте конкретную задачу, и я постараюсь помочь её решить.
Если текст слишком большой (более 20 мегабайт) могу посоветовать TextPipe.
А он же только юникод умеет... А мне бы GB...
GB конвертируется в юникод. И обратно.
-
Не понимаю, что Вы имеете в виду. Ворд может практически всё, что можно сделать с текстом. Насчёт одинаковых абзацев - я бы это делал через макросы. Если что-то не получается, дайте конкретную задачу, и я постараюсь помочь её решить.
Задача. Есть файл. В данном конкретном случае с анекдотами. Многие из них слово в слово повторяются несколько раз. Надо - удалить все дубли, оставив по одному экземпляру. Макросы - не нашел в хелпе ничего про поддержку регэкспов. Без них мне эта задача кажется самоубийством 8-) В программировании я не силен, мне тут еще компилятор для, как я понял, C# из .NET Framework предлагают, пошаманить со StreamReader.
-
поизучал я VBA вордовский. Встроенные в одну из библиотек регэкспы НЕ РАЗЛИЧАЮТ пробельные символы, возвраты каретки и много другого. другой реализиции регвыров я не нашел.
-
Задача. Есть файл. В данном конкретном случае с анекдотами. Многие из них слово в слово повторяются несколько раз. Надо - удалить все дубли, оставив по одному экземпляру...
Интересно, можно ли теоретически решить эту задачу с помощью одних только регулярных выражений. Мне такой способ незнаком. Если Вы знаете, как такое делается, напишите алгоритм.
Самый простой, с моей точки зрения, вариант. Тексты загоняются в базу данных (например, Access), по анекдоту на ячейку. Ячейки упорядочиваются по алфавиту. После этого делается простенький макрос, который сравнивает две идущие подряд ячейки и удаляет одну из них, если они идентичны. Никаких регулярных выражений, поддержки пробелов и прочего здесь не надо.
поизучал я VBA вордовский. Встроенные в одну из библиотек регэкспы НЕ РАЗЛИЧАЮТ пробельные символы, возвраты каретки и много другого. другой реализиции регвыров я не нашел.
Может быть, мы с Вами говорим о совершенно разных вещах?
Как может Ворд не различать пробелы и возвраты каретки? Зачем ковырять библиотеки VBA? Всё это выше моего понимания.
Регулярные выражения при поиске-замене в вордовском бейсике активируются опцией MatchWildcards. (Наверное, я ошибся ранее, и они называются именно wildcards, а не place holders - у меня не английский Ворд). Возврат каретки передаётся через "^p" (также "^10" и "^13"), специальные пробелы - через их юникодовое значение ("^uXXXX" или "ChrW(&hXXXX)").
Макросы всего лишь позволяют автоматизировать то, что Ворд может. А что он может в этой области - об этом надо вызвать в справке к программе статью "Поиск и замена" и прочитать.
-
Задача. Есть файл. В данном конкретном случае с анекдотами. Многие из них слово в слово повторяются несколько раз. Надо - удалить все дубли, оставив по одному экземпляру...
Интересно, можно ли теоретически решить эту задачу с помощью одних только регулярных выражений. Мне такой способ незнаком.
Дык "одних только" и я не собирался. С их помощью я собирался отделить один анекдот от другого. С учетом огромного кол-ва всяких управляющий и несимвольных знаков в ворде я думал такой алгоритм: берётся отделяется от всего текста первый анекдот, удаляются все неиероглифические знаки(чтобы он представлял собой сплошную иероглифическую строку - для сравнения), потом те же операции проделываются со всеми нижележащими и сравниваются. При совпадении нижележ. удаляется. Я уже забыл, ибо за выходные в поисках решения освоил минимальные знания о питоне, перле и VBA for MS WORD 8-), но что-то там не ищется. Кажется, мне не удалось задать последовательность "любой знак кроме иероглифов" - все мои варианты не сработали.... Я даже сохранил текст в простой txt файл с кодировкой utf8, чтобы обработать его perl или python, но пока не разобрался с поддержкой юникода в этих языках.
Тексты загоняются в базу данных (например, Access), по анекдоту на ячейку.
Уже это вгоняет меня в ступор. Мне в регэкспах разобраться куда проще,чем в дебрях API микрософт. регвыры хотя бы представляют собой единую сущность с едиными правилами.
Кароче, я не знаю, как это делается, так же как не знаю, как потом осуществлять поиск в ячейках 8-)
Ячейки упорядочиваются по алфавиту. После этого делается простенький макрос, который сравнивает две идущие подряд ячейки и удаляет одну из них, если они идентичны. Никаких регулярных выражений, поддержки пробелов и прочего здесь не надо.
поизучал я VBA вордовский. Встроенные в одну из библиотек регэкспы НЕ РАЗЛИЧАЮТ пробельные символы, возвраты каретки и много другого. другой реализиции регвыров я не нашел.
Может быть, мы с Вами говорим о совершенно разных вещах?
Как может Ворд не различать пробелы и возвраты каретки? Зачем ковырять библиотеки VBA? Всё это выше моего понимания.
Регулярные выражения при поиске-замене в вордовском бейсике активируются опцией MatchWildcards. (Наверное, я ошибся ранее, и они называются именно wildcards, а не place holders - у меня не английский Ворд). Возврат каретки передаётся через "^p" (также "^10" и "^13"), специальные пробелы - через их юникодовое значение ("^uXXXX" или "ChrW(&hXXXX)").
Макросы всего лишь позволяют автоматизировать то, что Ворд может. А что он может в этой области - об этом надо вызвать в справке к программе статью "Поиск и замена" и прочитать.
Тама же даже конструкции выбора нет (А|В). Очень неудобно.
-
Попробуйте Emeditor: emurasoft.com.
Там Вам и ГБ, и регекспы.
-
...берётся отделяется от всего текста первый анекдот, удаляются все неиероглифические знаки(чтобы он представлял собой сплошную иероглифическую строку - для сравнения), потом те же операции проделываются со всеми нижележащими и сравниваются. При совпадении нижележ. удаляется...
Моих знаний, боюсь, недостаточно, чтобы судить об эффективности такого метода. Но что-то мне говорит, что без программирования тут всё равно не обойтись.
...Кажется, мне не удалось задать последовательность "любой знак кроме иероглифов"...
Иероглифы занимают определённый диапазон в юникоде. Наберите в строке запуска программ "charmap" и посмотрите. Предположим, начинается этот диапазон со знака "一" и заканчивается знаком "﨩". Тогда произвольный знак из этого диапазона обозначается как "[一-﨩]", а произвольный знак не из этого диапазона как "[!一-﨩]" (в Ворде) или "[^一-﨩]" (в Perl, если не ошибаюсь).
...сохранил текст в простой txt файл с кодировкой utf8, чтобы обработать его perl или python, но пока не разобрался с поддержкой юникода в этих языках...
TextPipe работает в частности с синтаксисом Perl и поддерживает юникод.
..Мне в регэкспах разобраться куда проще,чем в дебрях API микрософт...
Чтобы программировать в Ворде или Аксессе, далеко не обязательно разбираться в WinAPI. И это ничуть не сложнее, чем программирование в том же Perl или Python.
...регвыры хотя бы представляют собой единую сущность с едиными правилами...
Увы. Например, у регулярных выражений в .Net Framework, на котором сейчас строится большое количество новых приложений, уже опять-таки другой синтаксис.
-
...берётся отделяется от всего текста первый анекдот, удаляются все неиероглифические знаки(чтобы он представлял собой сплошную иероглифическую строку - для сравнения), потом те же операции проделываются со всеми нижележащими и сравниваются. При совпадении нижележ. удаляется...
Моих знаний, боюсь, недостаточно, чтобы судить об эффективности такого метода. Но что-то мне говорит, что без программирования тут всё равно не обойтись.
А я и не собирался...
...Кажется, мне не удалось задать последовательность "любой знак кроме иероглифов"...
Иероглифы занимают определённый диапазон в юникоде.
К сожалению, не совсем так. Этот диапазон разбит несколькими врезками из каких-то левых символов...