Тема: Поиск слов в сМеШАнноМ регистре
Можно ли как-то эффективно искать все возможные комбинации слов, ошибочно написанных в смешанном регистре? Скажем, при помощи подстановочных знаков? Может, есть какие-то функции, свойства?
Заранее благодарен.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Можно ли как-то эффективно искать все возможные комбинации слов, ошибочно написанных в смешанном регистре? Скажем, при помощи подстановочных знаков? Может, есть какие-то функции, свойства?
Заранее благодарен.
Всё, что я могу предложить, это предложить, это проверять регистр с помощью свойства Case. Для смешанного регистра это свойство возвращает значение 5 (wdToggleCase):
With ActiveDocument.Range.Find
.Text = "<[А-яЁё\-]@>"
.MatchWildCards = True
While .Execute
If .Parent.Case = wdToggleCase Then
End If
DoEvents
Wend
End With
Но работать будет жутко медленно: ведь это каждое слово нужно проверить!
Спасибо! Буду использовать как вариант, хотя каждое слово - на документах страниц этак на 2 тыс. - конечно, немыслимо. Потом, есть ложные срабатывания, например, ABCs и т.д.
Почему же срабатывание ложное? Регистр в слове смешанный? Смешанный. Так что всё правильно.
Я вот что подумал, зачем поиск, если нам нужны все слова? Может просто перебирать их?
Dim oWord As Range
For Each oWord In ActiveDocument.Words
If oWord.Case = wdToggleCase Then
End If
Next
Почему же срабатывание ложное? Регистр в слове смешанный? Смешанный. Так что всё правильно.
Ложное срабатывание поскольку очевидно, что -s - это окончание, которое по правилу должно так писаться. Ведь заглавные буквы в слове не считаются смешанным регистром. Собственно, вопрос этот не к вам, а к бейсику, который такую ситуацию не отрабатывает. И я очень рад, что сие обстоятельство всплыло в момент "прокатки" вашего макроса. Видимо, придется искать обходные и не столь универсальные пути при помощи подстановочных знаков. Или дописывать обработку.
Как «ошибочно», а как «правильно»?
Если речь идет о словарных словах, то достаточно найти слова содержащие:
1. сочетание: малая буква + большая буква
2. несколько больших букв и хотя бы одну малую.
Т.е. найти с подстановочными знаками сначала слова с текстом "[а-яё][А-ЯЁ]", затем слова с текстом "[А-ЯЁ][А-ЯЁ][а-яё]".
Если речь об акронимах, то для них правил не существует.
Т.е. найти с подстановочными знаками сначала слова с текстом "[а-яё][А-ЯЁ]", затем слова с текстом "[А-ЯЁ][А-ЯЁ][а-яё]".
Я с этого и начал, но есть ситуации типа КОнФеРАнсЬе и т.д., т.е. чем длиннее слово, тем больше количество вариантов, а если пытаться обобщить (скажем, [А-ЯЁ][А-яЁё][А-ЯЁ]), то можно опять словить АБВ, которое в обработке не нуждается.
Я бы так сформулировал задачу поиска:
1. Слово начинается и заканчивается с заглавной, в середине есть прописные
2. Слово начинается с прописной, далее есть заглавные
3. Слово начинается с заглавной, заканчивается прописной, в середине перемешаны прописные и заглавные. (и вот в этой перемеси и зарыта главная собака, ибо количество вариантов велико) Разве что танцевать от гипотетически самого длинного слова (40 букв?) искать чередование регистра гипотетически каждой буквы и на каждый проход поиска сокращать шаблон на единицу. Но временные затраты....
Насчет акронимов/аббревиатур соглашусь лишь в том, что ситуация непростая. Согласитесь, есть разница между ABCs ABС's и ABCS (так что вряд ли можно говорить, что правил нет), но вот только без "искусственного", интеллекта макрос фиг разберет, какой вариант в данной ситуации автор имел в виду.
чем длиннее слово, тем больше количество вариантов
А при чем здесь длина слов?
Как я уже писал, ищем текст: Range.Find.Text="[а-яё][А-ЯЁ]"
Затем берем найденное слово целиком: Range.Expand wdWord
Обрабатываем слово…
Те же действия повторяем с "[А-ЯЁ][А-ЯЁ][а-яё]".
P.S.
Правильно писать [А-ЯЁа-яё], а не "[А-яЁё]". Для ясности, гляньте таблицу символов между «А» и «я».
Как я уже писал, ищем текст: Range.Find.Text="[а-яё][А-ЯЁ]"
А! Семен Семеныч! Спасибо за идею. Покумекаю.
Правильно писать [А-ЯЁа-яё], а не "[А-яЁё]". Для ясности, гляньте таблицу символов между «А» и «я».
Таблица символов:
Тогда получается, что правильно писать [ЁА-ё]?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться