gifts2017

YandexSpeller

Опубликовал Михаил Роденко (micha-r) в раздел Программирование - Внешние компоненты

Есть разные люди, грамотные и безграмотные. Есть безграмотные по разным причинам: от склада ума от собственной лени и т.д.
Мне вот, например, в школе на 5 давались все естественные науки, а вот по русскому, немецкому и английскому было 2. Такая же история потом была в универе, а потом и в аспирантуре. Ну и вот, имея 2 высших образования (физик и программист), я все тот же двоечник. А так как работаю на ПК, это все усугубляется в разы. Вот, собственно, в голове и возникла идея написания данного приложения.

Данное приложение делает http запрос на http://api.yandex.ru/speller/ и пытается проверить ошибки в тексте.

Да, я видел в интернете компоненту, написанную на скриптах под платформу 8.1.  но она достаточно специфична, мне хотелось написать что-нибудь попроще. 

 

Данное приложение возможно запускать из командной строки с текстом, который необходимо проверить.

Пример строки из 1с 8 

Процедура ПроверкаОрфографии(СтрокаД)
Путьspeller = КаталогВременныхФайлов() + "YandexSpeller.V2.exe";
ФайлПроверка = Новый Файл(Путьspeller);
Если НЕ ФайлПроверка.Существует() Тогда
ФайлДвоичныеДанные = ПолучитьОбщийМакет("speller");
ФайлДвоичныеДанные.Записать(Путьspeller);
КонецЕсли;

команда = Путьspeller + " " + СокрЛП(СтрокаД);
ЗапуститьПриложение(команда,,Истина);
КонецПроцедуры

&НаКлиенте
Процедура ABC(Команда)
Если ЗначениеЗаполнено(Объект[ЭтаФорма.ТекущийЭлемент.Имя]) Тогда
ПроверкаОрфографии(СокрЛП(Строка(Объект[ЭтаФорма.ТекущийЭлемент.Имя])));
КонецЕсли;
КонецПроцедуры

 

Изначально я хотел написать приложение, которое работает с COM, пока не хватает знаний в этой области. На данный момент пишу внешнюю компоненту.

Скачать файлы

Наименование Файл Версия Размер
Инсталлятор 1
.zip 1,10Mb
11.01.14
1
.zip 1,10Mb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей (seermak) 11.01.14 12:44
Зачем же делать компоненту - есть же "разработчикам — встроить функцию проверки правописания в свое приложение с помощью API Яндекс.Спеллера (JavaScript или HTTP)" = http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml = и делай спокойно через WebСервис (кстати получится неплохой пример использования Веб сервиса в 1С))))))
2. Михаил Роденко (micha-r) 11.01.14 14:04
Так если рассуждать, вообще тогда делать не чего не надо, все уже есть в готовом виде и все уже придумано до нас. В массе своей процентов 80% пользователей вообще не программисты, они просто берут или готовое на этом сайте или че нить типовое юзают. Я столкнулся с тем что этим пользователям не очень просто встроить JavaScript в 1с или куда нить еще. Вот собственно для них и рассчитано данные приложения. Наверное гораздо проще будет в любой 1с запустить команду ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>) и получить какой то результат, не извращаясь с написанием скриптов и т.д.
Конечно было бы не плохо чтоб данный инструмент вернул что то в 1с, я вот с этим разбираюсь.
3. Сергей (seermak) 11.01.14 15:31
(2) Вы непоняли = сайт http://api.yandex.ru/speller/ предоставляет свой веб-сервис по адресу http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml = далее работа исключительно средствами 1С (Конфигуратор=Общие=Web-Сервисы)
4. Михаил Роденко (micha-r) 11.01.14 15:52
Да есть такое, но как это прописать "пользователю"?
1) Нужно добавить Конфигуратор=Общие=Web-Сервисы=YandexSpeller
2) Прописать запрос, обработать результат. В 1с не я вот так вот не на шел как по нормальному отработать гипертекст.
3) Совместить все это с текущим интерфейсом.

И я хочу сказать очень много народу из программистов 1с которые вообще не знают что такое Конфигуратор=Общие=Web-Сервисы и как с этим жить. Спасибо конечно за подсказку я сам не знал, попробую сейчас реализовать.

Не знаю может Вы меня не понимаете, я считаю что программисту в первую очередь нужно делать инструмент, который поможет уменьшить телодвижение другому "программисту".
5. Дмитрий Шерстобитов (DitriX) 12.01.14 13:43
(1) вы наверное ошиблись - веб сервисы - это СЕРВЕР :)
А Вам нужен клиент, т.е. веб ссылки. А при работе с веб сервисом яндекса - я понял, что с 1С он нифига нормально работать не хочет.

А вот хттп запросы - это другое дело:)

Кроме того - почему я обратил внимание на это все - так как нам нужны веб ссылки, то значит, что их можно сделать программно,примеры есть в моей статье по веб сервисам. Т.е. не надо в конфигуратор лазить.
6. Илья Козырев (WizaXxX) 13.01.14 06:30
Вот пожалуйста, тут подробное использование некоторых возможностей
http://infostart.ru/public/203603/
7. Михаил Роденко (micha-r) 13.01.14 09:34
Спасибо!
Но Сможете ли Вы подчеркнуть ошибку определенным цветом? Сможете ли вы вывести подсказку с выбором нужного варианта в гипертексте? Я думаю 1с нормально это не позволяет. Разве что поля делать вида hml документ и на чистом hml кодить.
8. Сергей (seermak) 13.01.14 09:47
Вот набросал
1. делаем новую Web-ссылку (см рис) вносим в источник http://speller.yandex.net/services/spellservice?WSDL
2. делаем кнопку проверки и процедуру к ней
&НаКлиенте
Процедура ПравописаниеWebСервис(Команда)
ФС = Эпикриз.ПолучитьТекст();
Если НЕ ЗначениеЗаполнено(ФС)Тогда
Возврат;
КонецЕсли;
Массив = ПравописаниеWebСервис_Сервер(ФС);
//далее делайте с массивом все что угодно
//Массив[0].ОшибочноеСлово //слово с ошибкой
//Массив[0].Ошибка // текстовое значение ошибки
//Массив[0].Замена // массив предлагаемых замен
КонецПроцедуры
3. делаем процедуру получения данных
&НаСервере
Функция ПравописаниеWebСервис_Сервер(ФС)
Массив = Новый Массив;
Прокси = WSСсылки.WSСсылкаПроверкиПравописания.СоздатьWSПрокси("http://speller.yandex.net/services/spellservice", "SpellService", "SpellServiceSoap");
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://speller.yandex.net/services/spellservice").Получить("CheckTextRequest");
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.text = ФС; //неиспользуемые параметры//WSПараметр.lang = "ru";//WSПараметр.options = 16;//WSПараметр.format = "html";
РезультатПроверки = Прокси.checkText(WSПараметр.text);
Индекс = 0;
Для каждого СтрокаОшибки Из РезультатПроверки.error Цикл
Структура = Новый Структура;
МассивОб = Новый Массив;
Если СтрокаОшибки.code = 1 Тогда //код ошибки
Структура.Вставить("Ошибка","Слова нет в словаре");
ИначеЕсли СтрокаОшибки.code = 2 Тогда
Структура.Вставить("Ошибка","Повтор слова");
ИначеЕсли СтрокаОшибки.code = 3 Тогда
Структура.Вставить("Ошибка","Неверное употребление прописных и строчных букв");
ИначеЕсли СтрокаОшибки.code = 4 Тогда
Структура.Вставить("Ошибка","Текст содержит слишком много ошибок");
КонецЕсли;
Структура.Вставить("ОшибочноеСлово",СтрокаОшибки.word);
МассивОб.Очистить();
Для каждого ВариантЗамены Из СтрокаОшибки.s Цикл //список предлагаемых замен
МассивОб.Добавить(ВариантЗамены);
КонецЦикла;
Структура.Вставить("Замена", МассивОб);
Массив.Вставить(Индекс,Структура);
Индекс = Индекс + 1;
Структура = Неопределено;
МассивОб = Неопределено;
КонецЦикла;
Возврат Массив;

//СтрокаОшибки.col = //начало слова с ошибкой от начала строки
//СтрокаОшибки.len = //длина слова
//СтрокаОшибки.pos = //?
//СтрокаОшибки.row = //индекс строки с ошибкой
КонецФункции
X
и все.....
(7) чтобы подчеркнуть ошибку - Новый ФорматированнаяСтрока(<Содержимое>, <Шрифт>, <ЦветТекста>, <ЦветФона>, <Ссылка>) ;
Прикрепленные файлы:
Trucker; MRAK; DitriX; +3 Ответить
9. Александр Журавлев (apostal86) 17.01.14 01:11
Отличная доработка, включу в свою базу по учету работ +
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа