New user registration is currently disabled due to spam abuse / Регистрация новых пользователей в настоящее время приостановлена из-за злоупотреблений спаммерами

Выпадающий список вариантов содержит не все варианты (DICT)

Сообщаем о найденных ошибках сюда

Выпадающий список вариантов содержит не все варианты (DICT)

Postby Michael72 » Fri Mar 25, 2016 7:22 pm

Операционная система: Windows XP Home Edition, Service Pack 3
Версия словаря GoldenDict: 1.5.0-RC-517-g38adb08
Словарь:
Для установки словаря нажмите F3 и выберите вкладку "Серверы DICT". Щелкните на кнопке Добавить для создания новой настройки DICT-сервера. Дайте название типа "Все на DICT-bibleonline". Впечатайте в поле "Адрес": dict://dict.bibleonline.ru. Поля "Базы" и "Стратегии" оставьте пустыми. Поставьте "галочку" у опции Включено и щелкните на OK.
Действия: В строке поиска напечатайте русскую букву "а" и подождите немного пока не откроется выпадающий список вариантов.
Суть проблемы: В результате вышеприведенных действий выпадающий список вариантов содержит не все варианты, которые выдает DICT-сервер. Для воспроизводимого примера в выпадающем списке содержится всего 60 вариантов. Сравните с результатом, полученным через WEB-интерфейс сервера dict.bibleonline.ru.
Такое поведение программы вводит в заблуждение. Пользователь ожидает, что выпадающий список выводит все имеющиеся варианты, однако этот список всегда ограничивается 60-тью вариантами, что не позволяет пользователю найти нужный вариант.
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Abs62 » Sat Mar 26, 2016 8:56 am

Количество вариантов ограничено, да. Собственно, оно у всех словарей ограничено. Дабы не перегружать список совпадений и не тормозить поиск. Не думаю, что пользователю так уж сложно уточнить запрос.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Michael72 » Sat Mar 26, 2016 9:20 am

Abs62 wrote:Количество вариантов ограничено, да. Собственно, оно у всех словарей ограничено. Дабы не перегружать список совпадений и не тормозить поиск. Не думаю, что пользователю так уж сложно уточнить запрос.

Для того, чтобы уточнить запрос, нужно хотя бы быть осведомленным, что список неполный, что есть что-то ещё, что не поместилось. Возникает идея, а что если в случае, если список обрезается, то в конце списка указать фразу типа "показать ещё" или какое-то постраничное деление списка с возможностью навигации по страницам?
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Abs62 » Sat Mar 26, 2016 12:07 pm

Вообще-то, основной режим работы словаря - это поиск конкретного слова/выражения, а не просмотр всех слов на какую-то букву.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Michael72 » Sat Mar 26, 2016 4:39 pm

Abs62 wrote:Вообще-то, основной режим работы словаря - это поиск конкретного слова/выражения, а не просмотр всех слов на какую-то букву.

Я рассматриваю GoldenDict как DICT-клиент. Уникальность данного DICT-клиента в принципе запросов match и define. Такую реализацию не встречал ни в одном известном мне DICT-клиенте. Очень удобный подход. Но оказалось, что запрос match, который позволяет найти, согласно указанной стратегии, подмножество названий статей из некоторого словаря, является не основным режимом работы, что в свою очередь влияет на качество таких запросов. Чтобы повысить качество данного поиска (возможно, что это будет в ущерб скорости) предлагаю в настройках предусмотреть дополнительную опцию, которая позволит пользователю регулировать предел количества вариантов. Например, при выборе значения 0 - ограничение снимается полностью, как это реализовано для опции "Не искать в словарях, содержащих более чем n статей" (См. Правка - Параметры, вкладка Полнотекстовый поиск). Кстати, я не вижу нужды в полнотекстовом поиске, поэтому отключаю опцию "Разрешить полнотекстовый поиск для" вообще ради скорости. По этому принципу предлагаю предоставить пользователю такую возможность выбирать между скоростью и качеством работы. Перейдите к вкладке Интерфейс. Здесь мы видим опцию "Предел количества словарей в контекстном меню". Под этой опцией имеется свободное место. Почему бы не добавить новую опцию типа "Предел количества вариантов в выпадающем списке вариантов"?
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Michael72 » Tue Mar 29, 2016 8:58 am

Другой вопрос. А можно ли как-то установить этот параметр в каком-нибудь конфигурационном файле, подобно тому, как, например, на некоторые настройки можно повлиять через файл article-style.css, который находится в папке конфигурации?
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Abs62 » Tue Mar 29, 2016 4:32 pm

Нет, сейчас ограничение жёстко прописано в коде. Тут программу править надо, чтобы такая возможность появилась.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Michael72 » Wed Mar 30, 2016 12:16 pm

Abs62 wrote:Нет, сейчас ограничение жёстко прописано в коде. Тут программу править надо, чтобы такая возможность появилась.

В таком случае могу предложить всем пользователям, использующим сетевые ресурсы: серверы DICT, альтернативный вариант.

Для установки словаря нажмите F3 и выберите вкладку "Программы". Щелкните на кнопке Добавить для создания новой настройки. Дайте имя программы типа "Все на DICT-bibleonline". Впечатайте в поле "Командная строка":
Code: Select all
dict\dict --html -h dict.bibleonline.ru -s word "%GDWORD%"
Поставьте "галочку" у опции Включено и щелкните на OK.

Можете попробовать и другие настройки:
Code: Select all
dict\dict --html -h dict.bibleonline.ru -s lev -m "%GDWORD%"
или
Code: Select all
dict\dict --html -h dict.bibleonline.ru -s prefix -m "%GDWORD%"

Ключ -m позволяет получить подмножество заголовков (выводятся только названия статей без самих словарных статей).
Скопируйте этот архив в подкаталог \dict того каталога, куда вы установили программу GoldenDict. Например: C:\Program Files\GoldenDict\dict

В качестве рекомендации возникла новая идея. В настройках сервера DICT можно было бы добавить новый столбец для параметра "Варианты", который может принимать два значения: "Да", "Нет" (или в виде чекбокса для "галочки"). Если "Да" (или стоит "галочка"), то работать будет аналогично тому, как работает сейчас, т.е. используется список вариантов для результата от match-запроса. В противном случае, список вариантов для данной настройки не используется. Работает аналогично утилите dict, т.е. поиск заголовков и запрос перевода по найденным заголовкам - совмещены в один.
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Michael72 » Wed Apr 06, 2016 4:04 pm

Чтобы улучшить форматирование я создал сценарий на языке JScript.
Code: Select all
var s,Strng,i,Line;

function uniConv(charset, data) {
     var UnicodeConverter = function(fromCharset,toCharset){
       Stream = WScript.CreateObject("ADODB.Stream");
       Stream.Open();
       Stream.Type = 2;
       Stream.Charset = fromCharset;
       Stream.WriteText(data);
       Stream.Flush();
       Stream.Position = 0;
       Stream.Charset = toCharset;
       Strm = Stream.ReadText(-1);
       Stream.Close();
       return Strm;
     }
     this.ConvertToUnicode = UnicodeConverter("utf-16le", charset);
     this.ConvertFromUnicode = UnicodeConverter(charset, "utf-16le");
}

//Считываем всю информацию, находящуюся во входном потоке StdIn
Strng = new uniConv("utf-8", WScript.StdIn.ReadAll());
s = Strng.ConvertToUnicode;

//тэг PRE преобразуются в div
s = s.replace(/<PRE>/g, '<div class="dictd_article">').replace(/<\/PRE>/g, '</div>');

//Ссылки, заключенные в фигурные скобки "{……….}", преобразуются в HTML формат
s = s.replace(/{([^}]+)}/g, '<a href="gdlookup://localhost/$1">$1</a>');

//Текст, заключенный в слэши "\……….\", преобразуется в HTML формат
s = s.replace(/\\([^\\]+)\\/g, '<span class="dictd_phonetic">$1</span>');

Line = s.split('\n');
for (i = 0; i < Line.length; i++) {
  if (Line[i].charCodeAt(0)!=60) {
     string = Line[i].replace(/^[\x00-\x40\x5B-\x60\x7B-\x7F]+/, '');  // удаление в начале строки неалфавитных символов
//Проставляются <div> ... </div> вокруг текста каждой строки словарной статьи
     Line[i] = '<div style="white-space: pre-wrap"' + (string.charCodeAt(0)>1487&&string.charCodeAt(0)<1515 ? ' dir="rtl">' : '>') + Line[i] + '</div>'; //если первый символ в диапазоне [\u05D0-\u05EA], то добавляется атрибут dir="rtl"
  }
}
Strng = new uniConv("utf-8", Line.join('\n'));
s = Strng.ConvertFromUnicode;
WScript.Echo (s);

Для использования данного сценария сохраните этот код в файле dict.js и скопируйте его в подкаталог \dict того каталога, куда вы установили программу GoldenDict. Рекомендую сохранить данный код в Windows ANSI (с кодировкой ru1251), в противном случае сценарий может работать некорректно.
В поле "Командная строка" впечатайте:
Code: Select all
C:\WINDOWS\system32\cmd.exe /c dict\dict.exe --html -s word -h dict.bibleonline.ru "%GDWORD%" | cscript //Nologo //U dict\dict.js

Примечание. Необходимость в C:\WINDOWS\system32\cmd.exe /c вызвана тем, что без этого не работает механизм конвейеризации (символ "|" в командной строке не позволяет осуществить передачу данных js сценарию).
Если текст содержит коды форматирования:
  • "{..........}" - гиперссылки заключаются в фигурные скобки
  • "\..........\" - выделенный текст заключается между двух слэшей
он преобразуется в соответствующие данные HTML:
  • <a href="gdlookup://localhost/..........">..........</a>
  • <span class="dictd_phonetic">..........</span>
Если пользователь понимает язык JavaScript, то он может добавить дополнительные фильтры, для преобразования других кодов форматирования, которые могут встречаться в словарях на серверах DICT.
Attachments
dict.zip
Сценарий dict.js для преобразования кодов форматирования в HTML формат
(1.06 KiB) Downloaded 2088 times
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Выпадающий список вариантов содержит не все варианты (DI

Postby Michael72 » Thu Apr 07, 2016 7:46 am

Доработал js сценарий для обработки результата от dict, запущенного с ключом -m.
Code: Select all
var s,Strng,i,Line,ss;

function uniConv(charset, data) {
  var UnicodeConverter = function(fromCharset,toCharset){
       Stream = WScript.CreateObject("ADODB.Stream");
       Stream.Open();
       Stream.Type = 2;
       Stream.Charset = fromCharset;
       Stream.WriteText(data);
       Stream.Flush();
       Stream.Position = 0;
       Stream.Charset = toCharset;
       Strm = Stream.ReadText(-1);
       Stream.Close();
       return Strm;
  }
  this.ConvertToUnicode = UnicodeConverter("utf-16le", charset);
  this.ConvertFromUnicode = UnicodeConverter(charset, "utf-16le");
}

//Считываем всю информацию, находящуюся во входном потоке StdIn
Strng = new uniConv("utf-8", WScript.StdIn.ReadAll());
s = Strng.ConvertToUnicode;

//тэг PRE преобразуется в div
s = s.replace(/<PRE>/g, '<div class="dictd_article">').replace(/<\/PRE>/g, '</div>');

//Ссылки, заключенные в фигурные скобки "{..........}", преобразуются в HTML формат
s = s.replace(/{([^}]+)}/g, '<a href="gdlookup://localhost/$1">$1</a>');

//Текст, заключенный в слэши "\..........\", преобразуется в HTML формат
s = s.replace(/\\([^\\]+)\\/g, '<span class="dictd_phonetic">$1</span>');

//Если dict запущен с ключом -m, то заголовки преобразуются в гипертекстовые ссылки
ss = s.replace(/(<P><B>[^:]+:<\/B>)  ([^<]+)/g,
  function replacer(str, $1, $2) {
    var data = $2.split('  ');
    for (i = 0; i < data.length; i++) {
      data[i] = '<a href="gdlookup://localhost/' + data[i].replace(/^"|"\s*$/g,'') + '">' + data[i].replace(/^"|"\s*$/g,'') + '</a>';
    }
    return $1 + '  ' + data.join('  ');
  }
);
if (ss==s) {
  Line = s.split('\n');
  for (i = 0; i < Line.length; i++) {
    if (Line[i].charCodeAt(0)!=60) {
      string = Line[i].replace(/^[\x00-\x40\x5B-\x60\x7B-\x7F]+/, '');  // удаление в начале строки неалфавитных символов
//Проставляются <div> ... </div> вокруг текста каждой строки словарной статьи
      Line[i] = '<div style="white-space: pre-wrap"' + (string.charCodeAt(0)>1487&&string.charCodeAt(0)<1515 ? ' dir="rtl">' : '>') + Line[i] + '</div>'; //если первый символ в диапазоне [\u05D0-\u05EA], то добавляется атрибут dir="rtl"
    }
  }
  s = Line.join('\n');
} else {
  s = ss;
}
Strng = new uniConv("utf-8", s);
s = Strng.ConvertFromUnicode;
WScript.Echo (s);

Названия статей теперь преобразуются в гипертекстовые ссылки на словарные статьи.
Attachments
dict.zip
Сценарий dict.js для преобразования кодов форматирования в HTML формат
(1.24 KiB) Downloaded 2032 times
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Next

Return to Ошибки

Who is online

Users browsing this forum: No registered users and 5 guests

cron