Здравствуйте, Vlads, Вы писали:
V>Carc, в вашем AmlPages я не вижу, чтобы слова с ошибками подчеркивались. Или это было реализовано в старых плагинах?
Это в старом плагине было "Aml Speller", вот он http://www.amlpages.com/Rus/plugins.php#AmlSpeller, в новом плагине ("Spell Checker") у меня пока руки не дошли сделать подчеркивание, да и не просил пока никто особо…
Здравствуйте, Егор, Вы писали:
C>Здравствуйте, Vlads, Вы писали:
V>>Carc, в вашем AmlPages я не вижу, чтобы слова с ошибками подчеркивались. Или это было реализовано в старых плагинах? C>Это в старом плагине было "Aml Speller", вот он http://www.amlpages.com/Rus/plugins.php#AmlSpeller, в новом плагине ("Spell Checker") у меня пока руки не дошли сделать подчеркивание, да и не просил пока никто особо…
Подскажите еще по поводу работы с текстом:
1) Библиотека Hunspell работает без юникода, а мое приложение юникодное, то это означает, что текст перед проверкой нужно конвертировать в ANSI?
2) В библиотеке есть парсеры. Стоит их использовать для парсинга текста? Или использовать простой поиск по пробелам и выбрасывать знаки препинания?
3) Для поиска слов можно ли использовать ТОМ ричэдита? Я организовал парсинг по tomWord, но выбрасываю слева и справа знаки препинания. При этом у меня есть точная привязка позиции слова, которое я могу подчеркнуть. А если использовать парсинг Hunspell, то позицию нужно как-то вычислять.
4) Если я использую несколько словарей, то нужно организовывать логику поиска в каждом словаре?
Вопросов еще много накопилось. Чувствую, что изобретаю велосипед. :|
Очень надеюсь, что немного поделитесь своим опытом...
V>Подскажите еще по поводу работы с текстом:
Нивапрос (ц)
V>1) Библиотека Hunspell работает без юникода, а мое приложение юникодное, то это означает, что текст перед проверкой нужно конвертировать в ANSI?
Да, у каждого словаря своя кодировка. При загрузке словаря ее запоминаем, и при проверке перекодируем слова в нужную анси-кодировку, проверяем, если ошибка, то получаем варианты, и перекодируем их обратно в Unicode.
V>2) В библиотеке есть парсеры. Стоит их использовать для парсинга текста? Или использовать простой поиск по пробелам и выбрасывать знаки препинания?
На кой он этот парсер? Он что умеет с RichEdit работать? А с HTML умеет? А вот со Sciter умеет?
Мой опыт показал, что стоит писать движок проверки отдельно, парсер отдельно, а потом их просто скрещивать в нужном проекте. Лучше для повторного использования. В Aml Pages я до это и дошел в конце концов. Ибо ранние версии моих плагинов для проверки орфографии это не учитывали. Не то чтобы всё вперемешку, но все же. В результате вынуть оттуда чистый движок проверки, и прикрутить его к другому проекту было всё затруднительнее и затруднительнее.
Да и в отладке проще. Буквально пару месяцев назад кто-то из пользователей Aml Pages отбагрепортился что тупит с какими-то словами. Делов-то!?! Вынул чистый движок проверки, прогнал его в тестовом проекте на этих словах — нашел багу, поправил. И всё. Дальше пересобрал уже сам плагин и всё готово.
V>3) Для поиска слов можно ли использовать ТОМ ричэдита?
Легко. Я именно так и делал.
V>Я организовал парсинг по tomWord, но выбрасываю слева и справа знаки препинания. При этом у меня есть точная привязка позиции слова, которое я могу подчеркнуть. А если использовать парсинг Hunspell, то позицию нужно как-то вычислять.
Зачем вычислять? Уже описал выше: двигун для проверки на основе Hunspell делаем отдельно, парсер слов отдельно. Дальше просто: движок проверяет, а парсер знает откуда он взял слово и где и как его подчеркнуть.
V>4) Если я использую несколько словарей, то нужно организовывать логику поиска в каждом словаре?
Да. Другого варианта нет. В последней реинкарнации проверки орфографии для Aml Pages (плагин Spell Checker 4.x) так и сделано. Вымаем из текста слово, и шпарим по списку словарей проверку. Если хоть один словарь сказал "о! я, я! ист гут ворд" — значит отлично, какой-то словарь признал словечко. И заканчиваем проверять это слово.
Это позволяет не париться с языковой поддержкой в смешанных текстах. Когда в тексте и аглицкие, и русские, и фашисткие словечки.
V>Вопросов еще много накопилось. Чувствую, что изобретаю велосипед. :|
Как много веселых ребят, и все делают велосипед (ц)
V>Очень надеюсь, что немного поделитесь своим опытом...
Чем могу. Мне тоже советами помогали (правда, там у парня не RichEdit был, а свой с нуля редактор)
Есть еще некоторые вопросы.
Сейчас встроил библиотеку Hunspell и подключаю ее в виде libhunspell.dll. 1) Хочу в зависимости от наличия этой DLL использовать или не использовать функции спелчекера. Мое приложение будет дистрибутироваться и не всегда нужен спелчекер. Как такое реализовать?уже решил
2) Заметил что словари загружаются и выгружаются достаточно долго (несколько секунд). При наличии нескольких подключаемых словарей время выгрузки будет около 10 сек. Это очень много. использую библиотеку Hunspell 1.3.3. Как эту проблему решал? Или просто 1 раз загружал словари и не выгружаешь никогда?
Здравствуйте, Vlads, Вы писали:
V>Есть еще некоторые вопросы.
V>2) Заметил что словари загружаются и выгружаются достаточно долго (несколько секунд). При наличии нескольких подключаемых словарей время выгрузки будет около 10 сек. Это очень много. использую библиотеку Hunspell 1.3.3. Как эту проблему решал? Или просто 1 раз загружал словари и не выгружаешь никогда?
Та не, у меня достаточно быстро загружаются… Но у меня в текущем варианте автопроверки нет, только с диалогом. Соответственно, пока пользователь разглядывает диалог, словари вполне успевают загрузиться.
Как вариант, словари можно грузить в фоновом потоке, а потом их отдавать основному потоку, который и делает проверку. Ну и какую-то синхронизацию, мол отключили проверку, основной поток взводит какой-нить евент, и тогда поток загрузки словарей прекращает загрузку словарей. Как-то так!?!
В принципе я решил большинство проблем о которых раньше спрашивал.
Сейчас есть еще несколько проблем, которые охота решить:
1) Создание своего словаря и добавление в него слов?
2) Я могу добавлять слова в открытый словарь. При этом слова добавляются и эти слова уже не подчеркиваются, но слова похоже, что добавляются в памяти, т.к. файл не редактируется. Могу я добавить слова в DIC-файл? И как создать свой словарь?
Здравствуйте, Vlads, Вы писали:
V>В принципе я решил большинство проблем о которых раньше спрашивал. V>Сейчас есть еще несколько проблем, которые охота решить: V>1) Создание своего словаря и добавление в него слов?
А в чем проблема то? Любой свой файл в любом удобном для себя формате, и в него и добавляем. Ну и соответственно, при проверке сначала ищем слово в своем словаре, и если есть, даже и не запускаем проверку Hunspell, иначе дальше в Hunspell.
V>2) Я могу добавлять слова в открытый словарь. При этом слова добавляются и эти слова уже не подчеркиваются, но слова похоже, что добавляются в памяти, т.к. файл не редактируется. V>Могу я добавить слова в DIC-файл? И как создать свой словарь?
Ну выше описал… Зачем dic-файл, или aff-файл!?! Это же по сути проверки просто не нужно, все эти словоформы и прочия и прочия. Видим слово, Hunspell считает его ошибкой, пользователь нет. Всё — слово в наш словарь. Т.е. по сути наш словарь выступает как банальный список исключений и только.