Автор Тема: регэкспы  (Прочитано 12420 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
регэкспы
« : 02 Декабря 2005 15:35:34 »
С помощью какого софта можно регэкспами обработать китайский текст?

Echter

  • Гость
Re: регэкспы
« Ответ #1 : 02 Декабря 2005 16:02:00 »
С помощью какого софта можно регэкспами обработать китайский текст?
   С помощью Microsoft Word, например. Там это называется place holders, доступно через опцию поиска-замены. У них свой синтаксис, отличный от, например, синтаксиса Perl (надо смотреть справку). Если текст слишком большой (более 20 мегабайт) могу посоветовать TextPipe.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Re: регэкспы
« Ответ #2 : 02 Декабря 2005 19:47:11 »
С помощью какого софта можно регэкспами обработать китайский текст?
   С помощью Microsoft Word, например. Там это называется place holders, доступно через опцию поиска-замены. У них свой синтаксис, отличный от, например,
Боюсь, этот отброс не подойдет. Нужна серьезная софтина, ибо задача нетривиальная - в тексте много одинаковых абзацев, надо оставить по одному экземпляру. Вряд ли ворд это сможет 8-)

Цитировать
Если текст слишком большой (более 20 мегабайт) могу посоветовать TextPipe.
А  он же только юникод умеет... А мне бы GB...
« Последнее редактирование: 03 Декабря 2005 00:42:55 от Dirk Diggler »

Echter

  • Гость
Re: регэкспы
« Ответ #3 : 03 Декабря 2005 18:24:51 »
С помощью какого софта можно регэкспами обработать китайский текст?
   С помощью Microsoft Word, например. Там это называется place holders, доступно через опцию поиска-замены. У них свой синтаксис, отличный от, например,
Боюсь, этот отброс не подойдет. Нужна серьезная софтина, ибо задача нетривиальная - в тексте много одинаковых абзацев, надо оставить по одному экземпляру. Вряд ли ворд это сможет 8-)
    Не понимаю, что Вы имеете в виду. Ворд может практически всё, что можно сделать с текстом. Насчёт одинаковых абзацев - я бы это делал через макросы. Если что-то не получается, дайте конкретную задачу, и я постараюсь помочь её решить.

Цитировать
Цитировать
Если текст слишком большой (более 20 мегабайт) могу посоветовать TextPipe.
А  он же только юникод умеет... А мне бы GB...
   GB конвертируется в юникод. И обратно.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Re: регэкспы
« Ответ #4 : 03 Декабря 2005 21:22:54 »
    Не понимаю, что Вы имеете в виду. Ворд может практически всё, что можно сделать с текстом. Насчёт одинаковых абзацев - я бы это делал через макросы. Если что-то не получается, дайте конкретную задачу, и я постараюсь помочь её решить.
Задача. Есть файл. В данном конкретном случае с анекдотами. Многие из них слово в слово повторяются несколько раз. Надо - удалить все дубли, оставив по одному экземпляру. Макросы - не нашел в хелпе ничего про поддержку регэкспов. Без них мне эта задача кажется самоубийством 8-) В программировании я не силен, мне тут еще компилятор для, как я понял, C# из .NET Framework предлагают, пошаманить со StreamReader.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Re: регэкспы
« Ответ #5 : 04 Декабря 2005 03:12:11 »
поизучал я VBA вордовский. Встроенные в одну из библиотек регэкспы НЕ РАЗЛИЧАЮТ пробельные символы, возвраты каретки и много другого. другой реализиции регвыров я не нашел.

Echter

  • Гость
Re: регэкспы
« Ответ #6 : 04 Декабря 2005 23:24:23 »
Задача. Есть файл. В данном конкретном случае с анекдотами. Многие из них слово в слово повторяются несколько раз. Надо - удалить все дубли, оставив по одному экземпляру...

   Интересно, можно ли теоретически решить эту задачу с помощью одних только регулярных выражений. Мне такой способ незнаком. Если Вы знаете, как такое делается, напишите алгоритм.
   Самый простой, с моей точки зрения, вариант. Тексты загоняются в базу данных (например, Access), по анекдоту на ячейку. Ячейки упорядочиваются по алфавиту. После этого делается простенький макрос, который сравнивает две идущие подряд ячейки и удаляет одну из них, если они идентичны. Никаких регулярных выражений, поддержки пробелов и прочего здесь не надо.

Цитировать
   поизучал я VBA вордовский. Встроенные в одну из библиотек регэкспы НЕ РАЗЛИЧАЮТ пробельные символы, возвраты каретки и много другого. другой реализиции регвыров я не нашел.

   Может быть, мы с Вами говорим о совершенно разных вещах?
   Как может Ворд не различать пробелы и возвраты каретки? Зачем ковырять библиотеки VBA? Всё это выше моего понимания.
   Регулярные выражения при поиске-замене в вордовском бейсике активируются опцией MatchWildcards. (Наверное, я ошибся ранее, и они называются именно wildcards, а не place holders - у меня не английский Ворд). Возврат каретки передаётся через "^p" (также "^10" и "^13"), специальные пробелы - через их юникодовое значение ("^uXXXX" или "ChrW(&hXXXX)").
   Макросы всего лишь позволяют автоматизировать то, что Ворд может. А что он может в этой области - об этом надо вызвать в справке к программе статью "Поиск и замена" и прочитать.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Re: регэкспы
« Ответ #7 : 05 Декабря 2005 20:02:19 »
Задача. Есть файл. В данном конкретном случае с анекдотами. Многие из них слово в слово повторяются несколько раз. Надо - удалить все дубли, оставив по одному экземпляру...
   Интересно, можно ли теоретически решить эту задачу с помощью одних только регулярных выражений. Мне такой способ незнаком.

Дык "одних только" и я не собирался. С их помощью я собирался отделить один анекдот от другого. С учетом огромного кол-ва всяких управляющий и несимвольных знаков в ворде я думал такой алгоритм: берётся отделяется от всего текста первый анекдот, удаляются все неиероглифические знаки(чтобы он представлял собой сплошную иероглифическую строку - для сравнения), потом те же операции проделываются со всеми нижележащими и сравниваются. При совпадении нижележ. удаляется. Я уже забыл, ибо за выходные в поисках решения освоил минимальные знания о питоне, перле и VBA for MS WORD 8-), но что-то там не ищется. Кажется, мне не удалось задать последовательность "любой знак кроме иероглифов" - все мои варианты не сработали.... Я даже сохранил текст в простой txt файл с кодировкой utf8, чтобы обработать его perl или python, но пока не  разобрался с поддержкой юникода в этих языках.


Цитировать
Тексты загоняются в базу данных (например, Access), по анекдоту на ячейку.
Уже это вгоняет меня в ступор. Мне в регэкспах разобраться куда проще,чем в дебрях API микрософт. регвыры хотя бы представляют собой единую сущность с едиными правилами.
Кароче, я не знаю, как это делается, так же как не знаю, как потом осуществлять поиск в ячейках 8-)

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

Цитировать
Цитировать
   поизучал я VBA вордовский. Встроенные в одну из библиотек регэкспы НЕ РАЗЛИЧАЮТ пробельные символы, возвраты каретки и много другого. другой реализиции регвыров я не нашел.

Может быть, мы с Вами говорим о совершенно разных вещах?
   Как может Ворд не различать пробелы и возвраты каретки? Зачем ковырять библиотеки VBA? Всё это выше моего понимания.
   Регулярные выражения при поиске-замене в вордовском бейсике активируются опцией MatchWildcards. (Наверное, я ошибся ранее, и они называются именно wildcards, а не place holders - у меня не английский Ворд). Возврат каретки передаётся через "^p" (также "^10" и "^13"), специальные пробелы - через их юникодовое значение ("^uXXXX" или "ChrW(&hXXXX)").
   Макросы всего лишь позволяют автоматизировать то, что Ворд может. А что он может в этой области - об этом надо вызвать в справке к программе статью "Поиск и замена" и прочитать.

Тама же даже конструкции выбора нет (А|В). Очень неудобно.

Оффлайн Dake

  • Новичок
  • *
  • Сообщений: 38
  • Карма: 1
Re: регэкспы
« Ответ #8 : 05 Декабря 2005 23:18:09 »
Попробуйте Emeditor: emurasoft.com.
Там Вам и ГБ, и регекспы.
« Последнее редактирование: 05 Декабря 2005 23:23:51 от Dake »

Echter

  • Гость
Re: регэкспы
« Ответ #9 : 06 Декабря 2005 19:33:49 »
...берётся отделяется от всего текста первый анекдот, удаляются все неиероглифические знаки(чтобы он представлял собой сплошную иероглифическую строку - для сравнения), потом те же операции проделываются со всеми нижележащими и сравниваются. При совпадении нижележ. удаляется...

   Моих знаний, боюсь, недостаточно, чтобы судить об эффективности такого метода. Но что-то мне говорит, что без программирования тут всё равно не обойтись.

Цитировать
...Кажется, мне не удалось задать последовательность "любой знак кроме иероглифов"...

   Иероглифы занимают определённый диапазон в юникоде. Наберите в строке запуска программ "charmap" и посмотрите. Предположим, начинается этот диапазон со знака "一" и заканчивается знаком "﨩". Тогда произвольный знак из этого диапазона обозначается как "[一-﨩]", а произвольный знак не из этого диапазона как "[!一-﨩]" (в Ворде) или "[^一-﨩]" (в Perl, если не ошибаюсь).

Цитировать
...сохранил текст в простой txt файл с кодировкой utf8, чтобы обработать его perl или python, но пока не  разобрался с поддержкой юникода в этих языках...

   TextPipe работает в частности с синтаксисом Perl и поддерживает юникод.

Цитировать
..Мне в регэкспах разобраться куда проще,чем в дебрях API микрософт...

   Чтобы программировать в Ворде или Аксессе, далеко не обязательно разбираться в WinAPI. И это ничуть не сложнее, чем программирование в том же Perl или Python.

Цитировать
...регвыры хотя бы представляют собой единую сущность с едиными правилами...

   Увы. Например, у регулярных выражений в .Net Framework, на котором сейчас строится большое количество новых приложений, уже опять-таки другой синтаксис.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Re: регэкспы
« Ответ #10 : 06 Декабря 2005 20:58:24 »
...берётся отделяется от всего текста первый анекдот, удаляются все неиероглифические знаки(чтобы он представлял собой сплошную иероглифическую строку - для сравнения), потом те же операции проделываются со всеми нижележащими и сравниваются. При совпадении нижележ. удаляется...
   Моих знаний, боюсь, недостаточно, чтобы судить об эффективности такого метода. Но что-то мне говорит, что без программирования тут всё равно не обойтись.
А я и не собирался...

Цитировать
Цитировать
...Кажется, мне не удалось задать последовательность "любой знак кроме иероглифов"...
   Иероглифы занимают определённый диапазон в юникоде.
К сожалению, не совсем так. Этот диапазон разбит несколькими врезками из каких-то левых символов...