FarNet.RightWords: Spell-checker and thesaurus

Здесь можно обсудить ваш любимый плагин.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 10 times

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by Max Rusov » Tue 05 Jul, 2011 11:44

Latest post of the previous page:

А еще (возможно) подумать - о разных паттернах, в зависимости от типа файла :)

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Tue 05 Jul, 2011 11:45

HaRT wrote:
NightRoman wrote:Можно вообще без замены, например, группы, если есть, просто убираем (заменяем на пусто)
И что мы таким образом пытаемся выиграть? Неужто в .NET нет движка замены с подстановкой?!
Меньше настроек - хорошо. Пользователю не надо знать синтаксис замены - хорошо (я все время его забываю, например, \ или $ там используется для групп).

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Tue 05 Jul, 2011 11:47

Max Rusov wrote:А еще (возможно) подумать - о разных паттернах, в зависимости от типа файла :)
В теории - согласен. На практике - посмотрим.

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Tue 05 Jul, 2011 17:42

Попробовал, как сам предлагал. Если WordPattern содержит группы, то эти группы
просто удаляются. Выражение для нашей задачи проверки с & может быть таким:

Code: Select all

[\p{Lu}\p{Ll}](?:\p{Ll}|(&))+
Может, и проще можно, но мне пока это не надо.

Мне нравится вариант, что все в *одной* настройке. Это позволит при желании
относительно легко переключать выражения (комментарии-то в выражении разрешены,
можно просто комментариями и переключать, а все шаблоны будут там под рукой,
по одному на строку, одна строка раскомментирована).

Это не идеальный вариант, наверное. Но соотношение простоты и практичности,
по-моему, хорошее. Выложить прямо сразу не выйдет из-за разборок с FarNet ->
3.5 (готово, но сыро, обкатываю).

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Tue 05 Jul, 2011 17:48

То-есть, паттерн, скажем, в текущий момент для проверки языковых файлов .lng может выглядеть так:

Code: Select all

# Default
# [\p{Lu}\p{Ll}]\p{Ll}+

# With ampersands
[\p{Lu}\p{Ll}](?:\p{Ll}|(&))+

User avatar
HaRT
Moderator
Posts: 9170
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 177 times

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by HaRT » Tue 05 Jul, 2011 18:34

Если уж на то пошло, то может лучше безымянные группы всё-таки оставлять, а вот именованные (или даже именованные по предопределённому шаблону) — выкидывать? А то ведь пользователи замучаются каждый раз “?:” добавлять; я уж молчу о тех случаях, когда нужны back references.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Tue 05 Jul, 2011 18:40

back references? А реальный пример можно?

А вот про "?:" - это очень хорошо, что пользователь теперь обязан добавлять, это производительности помогает, чтобы лишние для дела группы не генерились и не ели время. Пусть лучше на это пользователь ворчит, чем на лаги при расцветке.

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Wed 06 Jul, 2011 07:20

1.0.10
Не забудьте обновить FarNet до 4.5.0.
Разные мелочи, но главное - поддержка проверки слов со "встроенным шумом" типа символов "&" в .lng файлах.

User avatar
HaRT
Moderator
Posts: 9170
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 177 times

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by HaRT » Wed 06 Jul, 2011 12:44

NightRoman wrote:это производительности помогает, чтобы лишние для дела группы не генерились и не ели время. Пусть лучше на это пользователь ворчит, чем на лаги при расцветке.
Откуда такая информация? Есть измерения, подтверждающие заметную разницу при обработке выражений с группами и без? Я-то привык считать, что подобные вещи требуют время только во время компиляции регэкспа. Впрочем, если они у Вас там на каждый чих перекомпилируются, то возможно; только вот решать такую проблему надо иначе.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Wed 06 Jul, 2011 13:00

HaRT
Откуда такая информация?
Знание .NET кода, в том числе ядра (ILSpy рулит). И здравый смысл. Теперь мы работаем с группами, раньше нет. Чем меньше групп у нас будет в результате, тем лучше.

Есть измерения, подтверждающие заметную разницу при обработке выражений с группами и без?
У меня нет. Если придется померять и я не забуду, что был интерес, приведу результаты, само-собой.
Я-то привык считать, что подобные вещи требуют время только во время компиляции регэкспа.
Просто считать или уже померяно? Имею моральное право спросить, однако :)
Впрочем, если они у Вас там на каждый чих перекомпилируются, то возможно; только вот решать такую проблему надо иначе.
Здравое рассуждение. Но они у нас не на каждый чих перекомпилируются, все с этим в порядке.

EDIT: убрал замечание про не ленивую коллекцию, оно неверно или неточно: само свойство Groups ленивое, но если хоть раз обратились к нему, то генерится вся коллекция групп целиком.

User avatar
HaRT
Moderator
Posts: 9170
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 177 times

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by HaRT » Wed 06 Jul, 2011 13:26

NightRoman wrote:Чем меньше групп у нас будет в результате, тем лучше.
Пока что больше похоже на экономию на спичках.
NightRoman wrote:Если придется померять и я не забуду, что был интерес, приведу результаты, само-собой.
Я считаю, что до объективных измерений (или хотя бы субъективных наблюдений) оптимизировать такие вещи на уровне интерфейса настроек — сильно преждевременно.
NightRoman wrote:Просто считать или уже померяно?
Самолично не измерял, но имею представление, как работает разбор регулярных выражений — в результате компиляции выражения строится конечный автомат, который потом молотит входные строки (в типовом случае — за линейное по их длине время). И я никак не могу представить, как бы на быстродействие могли повлиять группы, на которые в выражении нет ссылок.
NightRoman wrote:они у нас не на каждый чих перекомпилируются, все с этим в порядке.
Это не может не радовать.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Wed 06 Jul, 2011 13:31

HaRT
Смотри мое примечание в том ответе, кой в чем был неточен.

Критика (или соображения) принята и обдумана, спасибо. Теперь к делу, что именно не так, и как предлагается сделать лучше? И если есть предложения, то почему это будет лучше?

User avatar
HaRT
Moderator
Posts: 9170
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 177 times

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by HaRT » Wed 06 Jul, 2011 13:42

NightRoman wrote:что именно не так
В нынешней реализации у пользователя нет возможности в WordPattern использовать группы по прямому назначению (в нашем случае — при отсутствии замены — вроде только для back reference).
NightRoman wrote:как предлагается сделать лучше?
Два варианта:
1. Нумерованные группы оставлять, именованные — выкидывать.
2. Группы, именованные по предопределённому шаблону (например, “cut###”) выкидывать, все прочие оставлять.
NightRoman wrote:почему это будет лучше?
Потому что (а) снимет неоправданное ограничение, не уменьшив мощность механизма, и (б) не надо будет в каждой скобке писать “?:”.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Wed 06 Jul, 2011 14:04

В нынешней реализации у пользователя нет возможности в WordPattern использовать группы по прямому назначению (в нашем случае — при отсутствии замены — вроде только для back reference).
Да. И это никому пока не мешает. Будет мешать (юз-кейсы?), будем думать. И вряд ли тут кого напугает ломка интерфейсов или регулярок, если это на пользу делу. Не та аудитория. И модуль-то молодой совсем, 2 недели, устаканивается пока.

Ну какие back reference? У нас не абстрактная задача парсинга, надо просто выделить куски, похожие на слова. Мы, что хотим проверять только слова, у которых первый и последний слог одинаковы (просто пример, когда back reference нужен)?
не надо будет в каждой скобке писать “?:”
А чем именованные группы лучше/проще, чем “?:”? Шило на мыло, имхо. Синтаксис именованных групп я вечно забываю. Поэтому, как для автора, мне это предложение особенно не по душе.

Агрументов за/против недостаточно (либо равновесие, либо хуже). Будут еще, или будут жалобы/предложения, будем смотреть, решать, и т.п.

User avatar
HaRT
Moderator
Posts: 9170
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 177 times

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by HaRT » Wed 06 Jul, 2011 14:16

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

С “?:” существенное отличие в том, что в нынешней реализации это надо писать в каждой круглой скобке, которую хочешь сохранить. А в предлагаемом мной подходе, наоборот, имя надо будет давать только тем группам, которые хочешь выкинуть (я исхожу из того, что их меньшинство).

А что касается “синтаксис вечно забываю” — так это очень довод очень сомнительной силы. Если бы применяли, не забывали бы — “use it or lose it”.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by NightRoman » Wed 06 Jul, 2011 14:25

(я исхожу из того, что их меньшинство).
По моему опыту (1 пример :), а у тебя?) это не так. У меня задействовано именно простейшим способом из возможных. .restext (аналог .lng) мне надо проверять. Дефолтный вариант вообще скобок не имеет.
Если бы применяли, не забывали бы — “use it or lose it”.
Именно! Эти именованные группы (мне) крайне редко нужны. Но регулярки я часто применяю. И уж capturing|not-capturing группы не забываю никак, это основы.

User avatar
HaRT
Moderator
Posts: 9170
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 177 times

Re: FarNet.RightWords: Spell-checker and thesaurus

Post by HaRT » Wed 06 Jul, 2011 14:35

Во, мне только что пришло в голову, когда реально может понадобиться замена:
Проверяем HTML на каком-нибудь европейском языке с широким использованием диакритики (например, французском). Там запросто могут в изобилии встречаться Character entity references вроде “Á” и т.п. Для целей проверки будет необходимо заменять их на соответствующие Юникодные символы.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Обсуждение плагинов”