1

Тема: Поиск слов в сМеШАнноМ регистре

Можно ли как-то эффективно искать все возможные комбинации слов, ошибочно написанных в смешанном регистре? Скажем, при помощи подстановочных знаков? Может, есть какие-то функции, свойства?

Заранее благодарен.

2

Re: Поиск слов в сМеШАнноМ регистре

Всё, что я могу предложить, это предложить, это проверять регистр с помощью свойства Case. Для смешанного регистра это свойство возвращает значение 5 (wdToggleCase):

With ActiveDocument.Range.Find
  .Text = "<[А-яЁё\-]@>"
  .MatchWildCards = True
  While .Execute
    If .Parent.Case = wdToggleCase Then
      
    End If
    DoEvents
  Wend
End With

Но работать будет жутко медленно: ведь это каждое слово нужно проверить!

Лучше день потерять — потом за пять минут долететь!

3

Re: Поиск слов в сМеШАнноМ регистре

Спасибо! Буду использовать как вариант, хотя каждое слово  - на документах страниц этак на 2 тыс. - конечно, немыслимо. Потом, есть ложные срабатывания, например, ABCs и т.д.

4

Re: Поиск слов в сМеШАнноМ регистре

Почему же срабатывание ложное? Регистр в слове смешанный? Смешанный. Так что всё правильно.
Я вот что подумал, зачем поиск, если нам нужны все слова? Может просто перебирать их?

Dim oWord As Range
For Each oWord In ActiveDocument.Words
  If oWord.Case = wdToggleCase Then

  End If
Next
Лучше день потерять — потом за пять минут долететь!

5

Re: Поиск слов в сМеШАнноМ регистре

viter.alex пишет:

Почему же срабатывание ложное? Регистр в слове смешанный? Смешанный. Так что всё правильно.

Ложное срабатывание поскольку очевидно, что -s  - это окончание, которое по правилу должно так писаться. Ведь заглавные буквы в слове не считаются смешанным регистром. Собственно, вопрос этот не к вам, а к бейсику, который такую ситуацию не отрабатывает. И я очень рад, что сие обстоятельство всплыло в момент "прокатки" вашего макроса. Видимо, придется искать обходные и не столь универсальные пути при помощи подстановочных знаков. Или дописывать обработку.

6

Re: Поиск слов в сМеШАнноМ регистре

Как «ошибочно», а как «правильно»?

Если речь идет о словарных словах, то достаточно найти слова содержащие:
1. сочетание: малая буква + большая буква
2. несколько больших букв и хотя бы одну малую.
Т.е. найти с подстановочными знаками сначала слова с  текстом "[а-яё][А-ЯЁ]", затем слова с текстом "[А-ЯЁ][А-ЯЁ][а-яё]".

Если речь об акронимах, то для них правил не существует.

Макросы под заказ и готовый пакет - mtdmacro.ru

7

Re: Поиск слов в сМеШАнноМ регистре

Вождь пишет:

Т.е. найти с подстановочными знаками сначала слова с  текстом "[а-яё][А-ЯЁ]", затем слова с текстом "[А-ЯЁ][А-ЯЁ][а-яё]".

Я с этого и начал, но есть ситуации типа КОнФеРАнсЬе и т.д., т.е. чем длиннее слово, тем больше количество вариантов, а если пытаться обобщить (скажем, [А-ЯЁ][А-яЁё][А-ЯЁ]), то можно опять словить АБВ, которое в обработке не нуждается.
Я бы так сформулировал задачу поиска:
1. Слово начинается и заканчивается с заглавной, в середине есть прописные
2. Слово начинается с прописной, далее есть заглавные
3. Слово начинается с заглавной, заканчивается прописной, в середине перемешаны прописные и заглавные. (и вот в этой перемеси и зарыта главная собака, ибо количество вариантов велико) Разве что танцевать от гипотетически самого длинного слова (40 букв?) искать чередование регистра гипотетически каждой буквы и на каждый проход поиска сокращать шаблон на единицу. Но временные затраты....
Насчет акронимов/аббревиатур соглашусь лишь в том, что ситуация непростая. Согласитесь, есть разница между ABCs ABС's и ABCS (так что вряд ли можно говорить, что правил нет), но вот только без "искусственного", интеллекта макрос фиг разберет, какой вариант в данной ситуации автор имел в виду.

8

Re: Поиск слов в сМеШАнноМ регистре

Денис пишет:

чем длиннее слово, тем больше количество вариантов

А при чем здесь длина слов?
Как я уже писал, ищем текст: Range.Find.Text="[а-яё][А-ЯЁ]"
Затем берем найденное слово целиком: Range.Expand wdWord
Обрабатываем слово…

Те же действия повторяем с "[А-ЯЁ][А-ЯЁ][а-яё]".

P.S.
Правильно писать [А-ЯЁа-яё], а не "[А-яЁё]". Для ясности, гляньте таблицу символов между «А» и «я».

Макросы под заказ и готовый пакет - mtdmacro.ru

9

Re: Поиск слов в сМеШАнноМ регистре

Вождь пишет:

Как я уже писал, ищем текст: Range.Find.Text="[а-яё][А-ЯЁ]"

А! Семен Семеныч! Спасибо за идею. Покумекаю.

10

Re: Поиск слов в сМеШАнноМ регистре

Вождь пишет:

Правильно писать [А-ЯЁа-яё], а не "[А-яЁё]". Для ясности, гляньте таблицу символов между «А» и «я».

Таблица символов:
Поиск слов в сМеШАнноМ регистре
Тогда получается, что правильно писать [ЁА-ё]?

Лучше день потерять — потом за пять минут долететь!