Конвертер OSM -> MP

Не, всё в прорядке. На оптимальность, скорость, отсутствие ошибок данный алгоритм не претендует. Но свою задачу выполняет

del

Подскажите пожалуйста, какими таблицами транслитерации пользуется osm2mp при задании ключа --translit?
При транслитерации с азербайджанского в латиницу одна буковка превращается в “@”, что некрасиво на карте выглядит. Хотелось бы ее хотя бы в “а” превращать.
Заранее спасибо.

Это где-то тут
https://metacpan.org/source/SBURKE/Text-Unidecode-1.30/lib/Text/Unidecode/x01.pm

Почитал - ничерта не понял.
попробую по другому - где найти примеры файла, который требуется при задании ключа --ttable (–ttable= Имя файла дополнительной таблицы перекодировки (пример файла)
На вики ссылка на пример файла ведет в никуда…

Самое правильное будет сделать таблицу в формате GME, и использовать --lt-gme.
Можно заодно и им отправить.

Спасибо, попробую.

liosha

А можешь исправить чтобы можно было в параллели несколько процессов с Я.Переводом собирать? SQL же это позволяет?


Processing nodes...
DBD::SQLite::db do failed: database is locked at C:/navitel/lib/SQLite_File.pm line 319.
DBD::SQLite::db do failed: database is locked at C:/navitel/lib/SQLite_File.pm line 319.
DBD::SQLite::db do failed: database is locked at C:/navitel/lib/SQLite_File.pm line 319.


yatr: failed request zh-en for 4хП╖хо┐шИНце╝ at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
Wide character in warn at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
yatr: failed request zh-en for 4хП╖хо┐шИНце╝ at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
yatr: failed request zh-en for Border Mongolia - China at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
yatr: failed request zh-en for Wukui Expressway at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
Wide character in warn at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
yatr: failed request zh-en for чЯ│ц▓│хнРхНлчФЯхнжцаб at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
Wide character in warn at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
yatr: failed request zh-en for чЯ│ц▓│хнРхНлчФЯхнжцаб at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.
Wide character in warn at C:/navitel/lib/LangTransform/YaTranslate.pm line 109.

Теоретически да, но тогда сильно просядет скорость, потому что отключится всё кеширование.
Проще для каждого потока использовать отдельный кеш, см --lt-yatr-cache-dir

И чего ему надобно?
Сделал файл AZ.yml

#### test

--- Azerbaijan
---

Ə: A
ə: a

запускаю с ключами --translit --ttable=AZ.yml
он ругаецца:

Loading configuration...
YAML Error: Expected separator '---'
   Code: YAML_PARSE_ERR_NO_SEPARATOR
   Line: 1
   Document: 2
 at YAML/Loader.pm line 81.

— должен быть до комментария

Леша, я пробовал вообще без комментария, т.е. первой строкой было — Azerbaijan, второй опять —.
Все равно такая же ругань на разделитель.
Вариант с таблицей GME также не работает, правда ругани нет, но и результата тоже. И там более непонятно как файл .dat оформлять…

А там случаем bom в файл не пролез? В yaml его быть не должно.

Для GME можно ориентироваться на файл с польским языком

Лёша, действительно был BOM в yaml. Я его убрал, osm2mp ругаться перестал на AZ.yml, но и результата тоже нет. По прежнему, буква Ə транслитеруется в @…
С файлом для GME такая же история - не ругается, но и не использует…
Что еще можно предпринять?

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

А можно какой-то небольшой пример для воспроизведения?

UPD. Поправил парсер gme-таблиц, должно работать.

Теперь чтобы проверить, попрошу кого-нибудь скомпилировать екзешник для винды 64 бит.
Пожалуйста!

А с yaml’ом что? Тоже не парсится?

Что то я не совсем уверен что собрал как в прошлый раз, забыл как это делал в марте. Но вроде работает, языковые функции пока не проверял. https://yadi.sk/d/6-tzDrr43PuMpD или https://yadi.sk/d/X4XNAgdi3PuMoe

Похоже что всё таки как то не так, размер exe`шника меньше на несколько мегабайт и при запуске с Я.Переводом ругается:


Subroutine init redefined at LangTransform/Equal.pm line 15.
Subroutine init redefined at LangTransform/GmeTable.pm line 20.
Subroutine _make_gme_transformer redefined at LangTransform/GmeTable.pm line 53.
Subroutine _get_iso_tr redefined at LangTransform/Subst.pm line 291.
Subroutine init redefined at LangTransform/Subst.pm line 325.
Subroutine get_transformers redefined at LangTransform/Subst.pm line 337.
Subroutine init redefined at LangTransform/YaTranslate.pm line 28.
Subroutine _set_api_key redefined at LangTransform/YaTranslate.pm line 46.
Subroutine _api_request redefined at LangTransform/YaTranslate.pm line 58.
Subroutine _get_langs redefined at LangTransform/YaTranslate.pm line 73.
Subroutine _make_transformer redefined at LangTransform/YaTranslate.pm line 82.
Subroutine get_transformers redefined at LangTransform/YaTranslate.pm line 110.
Subroutine new redefined at LangTransform/YaTranslate.pm line 140.
Subroutine _get_cache redefined at LangTransform/YaTranslate.pm line 147.
Subroutine set redefined at LangTransform/YaTranslate.pm line 168.
Subroutine get redefined at LangTransform/YaTranslate.pm line 177.

Собирал командой pp osm2mp.pl @pp-opts


И выдаёт такую ошибку:


Use of uninitialized value within %table in substitution iterator at C:/osm2mp/lib/LangTransform/GmeTable.pm line 82.

UPD: Сменил версию Perl на 5.16, ошибка с картинки ушла, но эта осталась:


Use of uninitialized value within %table in substitution iterator at C:/osm2mp/lib/LangTransform/GmeTable.pm line 82.

Простите великодушно дурака старого… что ввел в заблуждение.
Обратил внимание, что у Kostik в строке запуска нет ключа --translit…
Попробовал у себя убрать этот ключ, оставил только --ttable - те буквы, что есть в .yml транслитеровались.
Так что работает транслитерация по таблице, нужно только из вики убрать что она дополнительная.

И вообще, если бы в вики была актуальная информация, описание ключей, примеры запуска - вопросов было бы гораздо меньше.