Notes |
|
|
А чем первый пункт в результатах поиска не устраивает? |
|
|
(0013154)
|
Garl
|
30-10-2013 09:57
|
|
>поиск вроде происходит, позиционируется вроде правильно
ч.т.д. |
|
|
(0013155)
|
Yurec66
|
30-10-2013 10:22
(edited on: 30-10-2013 10:23) |
|
>А чем первый пункт в результатах поиска не устраивает?
Оно конечно подштаники тоже можно назвать штанами. Однако поиск должен предлагать, если есть в базе поиска,то, что я конкретно ищу. А в файле слово "Могилев" конкретно присутствует.
|
|
|
|
Ну так и в первом результате слово Могилев присутствует причем на куче языков. |
|
|
|
На картинке, которая приложена есть только два варианта. В первом совершенно не то слово, во втором включение слова Могилев идет через буку "ё", а не как я написал через "е". Если внимательно посмотреть файл BY.txt, то слово "Могилев" присутствует рядом со словами "Магілёў,Могилев,Могильов,Могилёв,"(строка 7031). Почему программа не выводит искомое слово если оно есть? |
|
|
(0013158)
|
Yurec66
|
30-10-2013 10:48
(edited on: 30-10-2013 10:50) |
|
Вот еще один баг отыскал. Попытался ввести в строку поиска слово "могилев" в нижнем регистре. (см. картину в приложениях)
ps
дополнительный вариант "Могилёв" - все кроме искомого слова.
|
|
|
(0013160)
|
Garl
|
30-10-2013 12:08
|
|
ошибка io - из за того что файл открыт вами в другой программе
для остальных вариантов есть ссылка Full Description - там полностью строка в которой найдёно совпадение.
как по моему так всё работает даже лучше чем надо. |
|
|
|
Не, с ошибкой нужно бороться. Я только из-за нее этот тикет еще не закрыл. |
|
|
(0013162)
|
Garl
|
30-10-2013 12:53
|
|
так а на пальцах объясние что не так ищется, как я понимаю тут проблема с Ё-фиакцией.
или то что в caption результатов поиска выводится не то что искали? |
|
|
|
|
|
(0013164)
|
Garl
|
30-10-2013 13:02
|
|
|
|
|
>для остальных вариантов есть ссылка Full Description
В которой перечислен всевозможный бред кроме того что нужно?
"MVQ,Magiljou,Maguilov,Mahileu,Mahiliou,Mahiliou,Mahiljou,Mahiljov,Mahiljow,Mahiljou,Mahilou,Mahilou,Mahilyow,Mahileu,Mogil'ov,Mogilev,Mogileva,Mogilew,Mogiliavas,Mogiliovas,Mogiljov,Mogilov,Mogilev,Mogileva,Moguilev,Mohylew"
>или то что в caption результатов поиска выводится не то что искали?
именно
Мало того, что Full Description совершенно бесполезная фича, в которой нет привязки ни к региону, ни к области... Зачем тогда она ваще нужна? Зачем нужен предлагаемый список, если я не знаю куда на карте он меня направляет? Одно название "Новоселки" вам выдаст 15-20 совпадений по разным регионам Беларуси. А как мне знать где то что я ищу?
Лучше уж тогда убрать Full Description , чтобы не сбивало с толку. |
|
|
|
>надо сделать try?
Заменить на нормальное чтение при помощи TFileStream или чего-то на нем основанного. |
|
|
(0013167)
|
Garl
|
30-10-2013 13:55
|
|
>>или то что в caption результатов поиска выводится не то что искали?
> именно
ок давайте разберём структуру файла на пальцах:
см картинку,
какое из полей выводить в качестве имени? (сейчас выводится 4, или 3 поле)
от Full Description отакзываться не считаю правильным ибо лишней информация не будет. |
|
|
(0013168)
|
Yurec66
|
30-10-2013 14:15
(edited on: 31-10-2013 09:03) |
|
Может структура файла изначально придумана не грамотно? 2 и 3 поля дублируют друг друга. В качестве имени(я так понимаю то, что должно выводиться в списке найденного) нужно выводить искомое слово с точным совпадением. А уж в Full Description дополнительно можно прописать все остальные элементы 4-го поля. Остальную галематью убрать ! В противном случае в дополнительной информации смысла 0. К чему эта фраза Europe/Minsk ? Какая смысловая полезность?
|
|
|
(0013172)
|
zed
|
30-10-2013 18:45
|
|
>Не, с ошибкой нужно бороться. Я только из-за нее этот тикет еще не закрыл.
Согласен с Yurec66, что исправлять нужно не только I/O. |
|
|
|
>Одно название "Новоселки" вам выдаст 15-20 совпадений по разным
Прошу прощения, немного ошибся. При поиске объекта новоселки выдало 120 совпадений по официальной базе. Почему это знаю, да потому, что как то пришлось написать программу используя коды СОАТО. Так вот при выборе населенного пункта моя программа мало того, что показывала к какой области относится название, так еще нужно было смотреть район и более того сельсовет, чтобы точно определиться с выбором. Т.к. в одно районе но в разных сельсоветах могут быть две одинаковые деревни. (см. прикрепленное фото вверху) |
|
|
(0013176)
|
Garl
|
31-10-2013 06:01
|
|
>В противном случае в дополнительной информации смыслы 0. К чему эта фраза Europe/Minsk ? Какая смысловая полезность?
так оно есть в файле, я его только вывожу, а смысловую нагрузку - пусть думет тот кому оно надо :)
в теории Europe/Minsk отображает местоположение, допустим есть города с одинаковыми названиями в африке и в европе, так вот там будет видно что и где.
з.ы.
могли бы и сами поправить и пул реквест сделать |
|
|
(0013178)
|
Yurec66
|
31-10-2013 09:07
(edited on: 31-10-2013 09:08) |
|
>в теории Europe/Minsk отображает местоположение
Ну это очень глобальное определение местоположения.
>могли бы и сами поправить и пул реквест сделать
Не совсем понял что поправить и что означает выражение пул реквест сделать ?
|
|
|
(0013179)
|
Garl
|
31-10-2013 09:41
|
|
вот исходник модуля поиска по *.txt
https://bitbucket.org/sas_team/sas.planet.src/src/c73a7031381d60d291302e3bc31a89c6c5009727/GeoCoder/u_GeoCoderByTXT.pas?at=default
можете написать как должно быть. |
|
|
|
>можете написать как должно быть.
Знаете, ковыряться в чужом коде - не лучшее занятие, когда недостающие типы и пр. находятся в других модулях.
Я думаю для начала действительно нужно привести сам исходный файл, в данном случае By.txt, к удобочитабельному виду, с необходимой информацией без лишних "дополнений". А что искать и что выводить - я уже озвучивал. Если 100% совпадение - можно сразу позиционировать по координатам, а если есть варианты (100% + доп.) - вот тогда их можно вывести в предлагаемый список выбора. |
|
|
|
Наименование населенных пунктов с принадлежностью к конкретному региону, области, району и т.д. найти можно. Другое дело где брать координаты искомого? |
|
|
(0013182)
|
zed
|
31-10-2013 17:03
|
|
>Знаете, ковыряться в чужом коде - не лучшее занятие, когда недостающие типы и пр. находятся в других модулях.
Знаете, а настройка среды для разработки SAS, занимает несколько минут и даже есть готовая виртуалка. Вопрос скорее в том, хотите ли вы реально улучшить программу, которой пользуетесь. Для тех кто хочет - преград нету, а остальные найдут сотню отговорок.
>Я думаю для начала действительно нужно привести сам исходный файл
А я думаю, что вы обращаетесь не по адресу. Этими файлами (содержимым и форматом) заведуют ребята с geonames.org, вот им и выскажите свои мысли по поводу смысловой нагрузки полей и проч. Наше дело - парсинг и отображение результатов. |
|
|
(0013183)
|
Garl
|
31-10-2013 17:17
|
|
наше дело сделать чтобы всё работало "из коробки" скачал положил и готово! |
|
|
|
>Знаете, а настройка среды для разработки SAS, занимает несколько минут и даже есть готовая виртуалка
А вот про это слышу впервые
>Для тех кто хочет - преград нету, а остальные найдут сотню отговорок
Желание есть огромное, другое дело как получится... У каждого программиста свой стиль, а посему все равно разруливать придется сперва.
>Этими файлами (содержимым и форматом) заведуют ребята с geonames.org
Оооо... ну это полный абзац. Вы хотите, чтобы неосведомленный человек что то сразу понял из того множества непонятных букф? |
|
|
(0013185)
|
zed
|
31-10-2013 18:16
|
|
>чтобы неосведомленный человек что то сразу понял
Осведомляйтесь, в шею никто не гонит.
>множества непонятных букф
Какое конкретно множество вам не понятно? |
|
|
|
>Какое конкретно множество вам не понятно?
Да хотя бы на кого выходить, чтобы понять кто формирует этот файл, какая структура полей, откуда берутся данные и т.д. |
|
|
(0013187)
|
zed
|
31-10-2013 18:30
|
|
|
|
|
Установил виртуальную машину и запустил на ней поиск. Так вот, там находит все прекрасно Могилев.(см. картинку выше). Правда там |
|
|
(0013190)
|
Garl
|
01-11-2013 03:55
|
|
>Так вот, там находит все прекрасно Могилев.
а какая ревизия исходников в виртуалке? |
|
|
(0013191)
|
Garl
|
01-11-2013 04:18
|
|
ёлки маталки, так Ваш могилёв же на Украине, а мы его в by.txt ишем... |
|
|
|
>а какая ревизия исходников в виртуалке?
Ваш сленг порою непонятен. Имеется ввиду какая разница в исходниках? Не могу сказать, пытался разбираться - так и не смог пока найти событие обработки ComboBox для поиска. Да впрочем не простой это и CmboBox оказывается. Теперь я начинаю понимать, почему vdemidov написал "а способов пофиксить это не добавив кучу новых глюков я пока не вижу.". Но все равно не могу принять это за оправдание такого мастера как он.
>ёлки маталки, так Ваш могилёв же на Украине, а мы его в by.txt ишем...
Эээ... пардонс. На Украине есть Могилев Подольский, а в Беларуси - Могилев. Вот вы и сам еще раз убедились для чего нужна более информативная инфа, чтобы видеть какой объект нам предлагает программа для перехода по координатам.
Разобравшись со структурой файла BY.txt действительно понял, что там в принципе все по делу. Можно только определиться с нужными полями и выбирать оттуда информацию. Там всего то нужно 2-3 поля задействовать и все. |
|
|
(0013193)
|
Garl
|
01-11-2013 07:38
|
|
>Там всего то нужно 2-3 поля задействовать и все.
так а мы чего и делаем то, (ищем по всей строке)
а затем выводим
заголовок:
2 поле, если оно пустое - тогда третье
sname := VTabArray.Strings[3];
if sname = '' then begin
sname := VTabArray.Strings[2];
end;
щирота\долгота
slat := VTabArray.Strings[4];
slon := VTabArray.Strings[5];
описание
sdesc :=
VTabArray.Strings[17] + #$D#$A +
VTabArray.Strings[01] + #$D#$A +
VTabArray.Strings[02] + #$D#$A +
VTabArray.Strings[03] + #$D#$A +
VTabArray.Strings[18] + #$D#$A;
предложения? |
|
|
|
C выводом каких полей нужно подумать как лучше. В первую очередь нужно разобраться почему программа не находит слово, которое 100% присутствует в файле. |
|
|
(0013195)
|
Garl
|
01-11-2013 08:33
|
|
давайте конкретный файл и конкретный пример слова.
у меня есть BY.txt размером 4,085,794 байт.
давайте конкретно на нём обкатывать. |
|
|
(0013196)
|
Yurec66
|
01-11-2013 09:04
(edited on: 01-11-2013 09:05) |
|
Я вчера скачал свежий BY.txt (в TC размер 4106173). Может это не существенно будет для нашей проверки.
Строка №7028 - в 4-м поле есть включение "Mohylew,Магілёў,Могилев,Могильов,Могилёв,Могиљов". Т.е точно есть слово "Могилев" и точно есть слово "Могилёв". Так вот при искомых словах "Могилев", "Могилёв" ни то ни другое не находятся. Почему то выводятся Могилевцы, Могилевская область и пр., но только не то , что нам нужно.
|
|
|
|
Что то наталкивает на мысль, то возможно это связано с кодировкой, т.к. в этом одном файле присутствуют слова в разных кодировках. |
|
|
(0013198)
|
zed
|
01-11-2013 09:09
|
|
У всех файлов с geonames одна кодировка - utf-8. |
|
|
(0013199)
|
Garl
|
01-11-2013 09:12
|
|
ок скачал 4,106,173
строка 7028
625662 Makarychy Makarychy Makarichi,Makarychy, М а к а р и ч и, М а к а р ы ч ы 52.9743 28.3158 P PPL BY 05 0 171 Europe/Minsk 2012-01-18
иль я не прав? |
|
|
(0013200)
|
Garl
|
01-11-2013 09:22
|
|
наша строка 7031
625665 Mahilyow Mahilyow MVQ,Magiljou,Maguilov,Mahileu,Mahiliou,Mahilioŭ,Mahiljou,Mahiljov,Mahiljow,Mahiljoŭ,Mahilou,Mahiloŭ,Mahilyow,Mahilëŭ,Mogil'ov,Mogilev,Mogileva,Mogilew,Mogiliavas,Mogiliovas,Mogiljov,Mogilov,Mogilëv,Mogiļeva,Moguilev,Mohylew,Магілёў,Могилев,Могильов,Могилёв,Могиљов 53.9168 30.3449 P PPLA BY 06 369200 184 Europe/Minsk 2013-06-27
слово "Могилев" в ней есть точно
и она выводится в первом же результате поиска
только выводится как "Могиљов" - в этом загвоздка? |
|
|
(0013201)
|
Garl
|
01-11-2013 09:31
|
|
итак:
код
l := length(sname);
while (copy(sname,l,1)<>',') and (l>0) do dec(l);
sname := copy(sname,l+1,length(sname)-l);
берёт из строки
'MVQ,Magiljou,Maguilov,Mahileu,Mahiliou,Mahiliou,Mahiljou,Mahiljov,Mahiljow,Mahiljou,Mahilou,Mahilou,Mahilyow,Mahileu,Mogil'ov,Mogilev,Mogileva,Mogilew,Mogiliavas,Mogiliovas,Mogiljov,Mogilov,Mogilev,Mogileva,Moguilev,Mohylew,Магілёў,Могилев,Могильов,Могилёв,Могиљов'
самое последнее название, т.к. оно является местным.
если не устраивает - предложите алгоритм какое из вышеуказанных названий из строки нужно выводить? и как его вытяскивать , учитывая что строка может быть и пустой. |
|
|
|
>У всех файлов с geonames одна кодировка - utf-8.
name : name of geographical point (utf8) varchar(200)
asciiname : name of geographical point in plain ascii characters, varchar(200)
>и она выводится в первом же результате поиска
Где? Не увидел.
>только выводится как "Могиљов" - в этом загвоздка?
Как вы считаете, если бы Москва выводилась ка Мысква, это было бы то же самое?
И если слово присутствует 100% то почему оно именно не выводится? Или как я уже писал при 100% совпадении при нахождении просто позиционировать на карте без вывода доп. информации. А в случае нахождения 2-х и долее одинаковых 100% совпадений выводить варианты для выбора. |
|
|
|
>самое последнее название, т.к. оно является местным.
Могиљов Сколько живу в Беларуси ни разу не слыхал такого диалекта |
|
|
(0013204)
|
Garl
|
01-11-2013 10:04
|
|
>>и она выводится в первом же результате поиска
> Где? Не увидел.
Snap_001.jpg
> А в случае нахождения 2-х и долее одинаковых 100% совпадений выводить варианты для выбора.
так оно и делается.
только как узнать 100% совпадение или нет?
к примеру если набрать "Красное" выйдет и "Красное" и "Красное Село" что есть правильно? что выводить в заголовок результата поиска?
везде "Красное" ?
>>только выводится как "Могиљов" - в этом загвоздка?
> Как вы считаете, если бы Москва выводилась ка Мысква, это было бы то же самое?
с точки зрения алгоритма - да |
|
|
(0013205)
|
Yurec66
|
01-11-2013 10:24
(edited on: 01-11-2013 10:32) |
|
>только как узнать 100% совпадение или нет?
Выполнять поиск используя дилемитеры. Это не сложно, если мы поиск ведем конкретно по 4-му полю.
ps
как вариант функция из Rx
function IsWordPresent(const W, S: string; const WordDelims: TCharSet): Boolean;
Берем 4-е поле как целую строку, подсчитываем кол-во запятых. И в цикле перебираем каждое слово используя WordDelims как [','] на точное совпадение.
|
|
|
(0013206)
|
zed
|
01-11-2013 10:26
|
|
Yurec66
Вот вы процитировали, но смысл не поняли. Поле asciiname - это то же, что и поле name, только без национальных символов - они все заменяются на ansii символы. Скорее всего сделано для совместимости с программами, не умеющими работать с юникодом.
Повторяю, все файлы идут в utf-8 кодировке. Об этом чётко написано в самом начале readme: The data format is tab-delimited text in utf8 encoding.
Garl
>самое последнее название, т.к. оно является местным.
Нет, оно не является местным. В этом поле через запятую идут альтернативные названия на различных языках. Конкретно Могиљов - это название города на сербском языке. |
|
|
(0013207)
|
Garl
|
01-11-2013 11:38
|
|
>Нет, оно не является местным. В этом поле через запятую идут альтернативные названия на различных языках. Конкретно Могиљов - это название города на сербском языке.
наши действия?
мутить хитрый вывод заголовка? |
|
|
(0013208)
|
zed
|
01-11-2013 11:56
(edited on: 01-11-2013 11:59) |
|
>мутить хитрый вывод заголовка?
Там ничего хитрого и Yurec66 уже описал примерный алгоритм. Только тебе там никаких дополнительных функций не нужно - подстрока парсится тем же TStringList на ура.
|
|
|
(0013209)
|
Garl
|
01-11-2013 12:12
|
|
https://bitbucket.org/sas_team/sas.planet.src/pull-request/235/2238 |
|
|
|
Смотрю комментов не добавилось, а появилась картинка после поиска по слову "могилев". Так вот, конфуз однако. На карте стрелка позиционирована верно, хоть не видно имени, но верно. Однако в предлагаемом списке красным подчеркнуто не является истиной. Присмотритесь внимательно, там написано "Europe/Kiev" а это есть Украина. А на Украине нет города "Могилев", есть "Могилев подольский". Если быть точным, то в кассах Ж/Д наш Белорусский Могилев у них идет как "Могилев на Днепре". Но не суть. Пока одобрям по поиску сказать не могу, если подчеркнуто именно то, на что вы считаете позиционирована стрелка на карте. |
|
|
(0013211)
|
zed
|
02-11-2013 18:06
|
|
Garl
Сейчас имена нормально выводит, но не позиционирует на Могилев. Одно починил, второе сломал :( |
|
|
(0013212)
|
Garl
|
03-11-2013 10:10
|
|
> но не позиционирует на Могилев.
так и было. при количестве результатов > 1 результаты сотрируются по
отдалённости от текущего центра карты и выбирается ближайший. |
|