Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: rado84 в Mar 05, 2026, 07:46



Титла: Двупосочен английско-български речник с python 3
Публикувано от: rado84 в Mar 05, 2026, 07:46
KBGOFFICE е древно нещо, писано за qt4 с fallback към gtk2 и колкото повече остарява, толкова по-трудно става за поддръжка, защото му изчезват зависимости. Затова с помощта на AI направих алтернатива на KBGOFFICE. AI помогна най-вече с прочитането на речниците, които ги взех от оригиналния KBGOFFICE, докато козметиката и бутона за шрифта ги направих аз - къде с малко ровене из Stuck Exchange, къде по памет, къде със заемки от подобни програми. :)
Хубавото на тази алтернатива е, че няма нужда от компилиране или инсталация, само трябва да имате инсталиран GTK3, QT5 или QT6 + python-pyqt5 & python-pyqt6.
Алтернативата съм я кръстил "[insert framework here] 2-Way Dictionary".

https://github.com/rado84-github/2-way-dictionary


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 05, 2026, 08:34
Добра инициатива, прост интерфейс, което много ми харесва.

Аз бих компилирал проекта до единичен изпълним файл както за Linux, така и за Windows и бих ги добавил като алтернативни пакети.

Заедно с речника може да излезе големичък файла, но може да се направи да се или четат отделно. Ако вече не е така, което би било най-разумното.
Зависи колко е голям речника. Ако е няколко стотин К до мегабайт-два...

Неприятното при подобни Python-ски програми е, че се включва и интерпретатора в тях, но няма как.
Най-проста програма с нищо от поле за въвеждане и бутон може да излезе 50-60МВ изпълним файл за Windows например.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: spec1a в Mar 05, 2026, 12:45
Тези неща:

https://coderivers.org/blog/compile-python-into-executable/

https://www.geeksforgeeks.org/python/create-a-single-executable-from-a-python-project/

няма ли да помогнат да се компилира до истински изпълним код ?


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 05, 2026, 13:07
Единични изпълними файлове съм правил за двете системи чрез pyinstaller.

Върши работа.
Но както казах, включва се всичко във файла, заедно с интерпретатора.
Само прозорче с минимален интерфейс стъпва на 50-60МВ, което не е оптимално, но не е и проблем при обема на съвременните дискове.
Но пък това е много удобно, защото си слагаш едно такова на флашка и е с теб навсякъде.

За всяка система обаче се компилира на самата нея.
Ащо ще се прави за Windows, ти трябва Windows система.
И виртуалка върши работа в краен случай.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: remotexx в Mar 05, 2026, 17:34
и моите 5 ст. опа т.е. 5 цента (а бе що така... за левчето ривахте а за стинката не)

- нещо транскрипцията на думите не се чете или.. шрифтовете бяха само за красота а не за функционалност
- а бе кой днес ползва десктоп - даже линукса прескочи десктопа и.. право на умнофон се качи та..
- версия за андроид не се ли планира или за айфон или таблет
- с тия нововъедения Qt5/6 не знам да ли ще им тръгне на старите щайги на (синодалните) форумни старци тук... по/търси реклама (и) по други/те форуми
- не видях препратка към оригниалния проеект (откъдето са краднати базите данни с думите)
- освен това - това са старите БД - доколкото си спомням там покрай тях имаше и HTML версии и още и мобилни БД (мдаа всичкото това на оригиналния, стария сайт дето е връстник на Лилито)

П.П. Преди Никсъна да е теглил анатема и на тая тема айде да му обясниш как точно ИИ ти е помогнал.. т.е. не помогнал а направо ти го е написал щото (аз поне така го разбирам) без ИИ просто нищо от това нямаше да го има т.е. аз поне така разбрах че без ИИ въобще не би се захванала а не че щеше да блъскаш няколко месеца от 9 до 5 и пак щеше да го направиш но сам  [_]3

П.П.П. Аз не видях изходния код  ??? предполагам че бинарките са препакетирани изпълними файлове за сваляне - уж има МИТ лицензия па тя е за изх. код който обаче го няма. Опасно е с такива бинарки - кой знае какво има в тях, то и с публикувна код пак е опасно (xz utils ($2)) камо ли без кода само бинарки (питайте кой да е вирусолог) Па ако не са (бинарки).. все пак Гитхъб е място за публикуване на изходен код (а не на архиви)  ::)


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: Nik123 в Mar 05, 2026, 18:35
Чак па да тегля анатема  ;D Нали сам съм писал, че ИИ-то си има своето приложение. Браво за труда на колегата.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: remotexx в Mar 05, 2026, 20:26
Чак па да тегля анатема  ;D Нали сам съм писал, че ИИ-то си има своето приложение. Браво за труда на колегата.

Е... то там последния рубеж (ще да) е "ама не може да ни направи деца" - все още докато.. не почне да ни прави и деца (те вече си отглеждат мръвки/те /за печене/ без да гледат животни, колко му е едно дете от ей такава мръвка да си отгледа)

По същество проблема е друг - много хора (все още) възприемат отворения код и свободния софтуер като безплатен (безплатната бира) и вместо да се включат към съществуващ проект и да помогнат те се цепят и роят на стотици по-малки проектчета, само гледат какво да краднат и гепят от проекта или как да го клонират че да си припишат после заслугите (като че ли те са го направили на 100%) - всъщност това което е направил колегата е просто един нов потребителски интерфейс (точно това за което линукс общността плюят майкрософт че... последните 10-20г. нищо ново в Офис пакета им няма а само сменят шаренийката - потербителски интерфейс демек, но това нищо не променя, само гърч за потребителя да учи нови интерфейси то не беха Metro, Aero, Ribbon interface ..за който май още се съдят ($2))

Ако иска(ше) колегата можеше да помогне (на съществуващия проект) а не да го разцепва - напр. самият той спомена че БД била стара - ами ето да се включи и да я обновява и добавя думички и/ли преводи (вместо да я ползва наготово че и да я плюе отгоре на това че била стара, стара-стара ама я ползва, значи е използваема) Как па един не се включи да (им) помага на тия хора... всъщност (предполагам) има хора които се включват, но не се бият в гърдите по форумите (обнових им БД еди къде си или интерфейса и т.н.)

П.П. Ей, без да искам познах - "самопризнанието" чак сега го видях
докато козметиката и бутона за шрифта ги направих аз
- и то... (с печатни грешки)
къде с НЕмалко ровене из Stuck Exchange, къде по памет, къде със заемки от подобни програми.
- където не се знае колко от това "аз" е "той/тя" (може и тук 100% copy/paste, но да бъдем реалисти 20-80% т.е. "аз" = 20% от 10-20% процента оставащи за UI-я)

т.е. (нека познаем)
1. ИИ-то е написало целият код (вероятно 100% копиран от оригинала - който никъде не се споменава между другото)
2. Сменен е лиценза от ГПЛ къмто МИТ което май не е разрешено но нека адвокатите се изкажат там (Никсъне)
3. Колегата само е копирал идеи от Stack Exchange т.е. copy/paste т.е. развалил е готиния интерфейс дето и на стари щайги вървеше
4. приписал си е заслуги (за които май няма заслуги)
5. Какво стана с оная идея (най-вече опен сорс общността) - когато е писано и от ИИ (или въобще барано) да има на видно място съобщение че е барано от ИИ (съавтор/ство)
6. и какво е това сега - Copyright (c) 2026 Rado, обик. тук се пише пълното име (по документи) инак  утре Радо ($2) Шишарката ($2) ще каже че той държи авторските права ..а можеше да го направи правилно ма кой да се сети (и ИИто не подсказало, само тъй ще да е ИИто /му/ е виновно, т.е. за нас само заслугите а всичката вина е само за  ИИто)

Ето така се прави (за предпочитане с препратка към уеб страница, профил и т.н. а не да ти го ровим от профила - не всички ще да са го свалили от Гитхъба ти, а и Радослав Димитров-ци много)
Copyright (c) 2026 Radoslav Dimitrov ($2)


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: Nik123 в Mar 05, 2026, 21:02
..
2. Сменен е лиценза от ГПЛ къмто МИТ което май не е разрешено но нека адвокатите се изкажат там (Никсъне)
..
По тези лицензи имам съвсем ограничени познания и не знам правомерна ли е, или не е, такава промяна.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 05, 2026, 21:29
Аз само мога да кажа евала на Радо.
Не бих се хванал да променям нещо толкова старо.

А програмката е нужна според мен.
Онлайн преводач всеки сигурно има на телефона, но е онлайн.
Не всякога е възможно да се ползва.

Базата данни може да се обновява, предполагам
...
Поразгледах кода. Не  е база данни, а някакъв .dat файл, който се оказва, че няма точно установен формат, а зависи от приложението да си го прочете и парсне правилно.
Всяка двойка дума/превод е разделена от следващата двойка от празен символ 0xff, а  думата от самия превод със символ за нов ред.
Зареждат се в паметтда и двата файла, които не са големи. По 5-6 МВ.

Евентуално може да се добави бутон за допълване на речника, ако нещо липсва.
Би било хубаво.


Не мисля, че GPL позволява лиценза да се сменя.
Това трябва да се оправи обратно на оригиналния лиценз.
GPL е достатъчно гъвкав и позволява променя на програмата за собствени цели и споделяне.

Няма да е трудно, като гледам,  да се добавят и други речници, за други езици.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: remotexx в Mar 05, 2026, 21:57
според ИИ...
Yes, you can switch from GPL to MIT, but you need to obtain agreement from all contributors to the project. If any contributors do not agree, you may need to remove their code or rewrite it.

Въпросът ми беше не за нова БД или добавяне към съществуващата  а за друг формат... по мои спомени на оригиналния сайт я има същата БД във формат за мобилни у-ва поне е съвместима с по известните речници...

т.е. хубаво е да се добавя към съществуващата БД но да е онлайн а не всеки за себе си само на неговия си телефон  ::)


Добре е да се оправи и транскрипцията - ето напр. от снимките от сайта му същата дума във по стария..набора на  Лилито я показва правилно а новия йок транскрипция
https://bgoffice.sourceforge.net/cgi-bin/obgoffice.cgi?word=plank&translate=Translate&dictionary=bg_en_dual
Като тук проблемът не е в избора на шрифт а че файловете не са UTF-8 (CP1251или ISO-8859 мисля) а ще трябва прекодиране (Щирлиц и .т.п.)

П.П. Те го те - мобилна версия на БД (при това забелязвам че поддържа както по стария формат .aar така и по-новия .slob) ..аз от толкоз отдавна си ги слагам на тел. тия че вече бях забравил откъде идват че аз просто ги копирам от стария тел. на новия (за когато няма обхват)
https://sourceforge.net/p/bgoffice/code/HEAD/tree/trunk/dictionaries/data/en-bg/mobile/

Гледам .aar е от 2015 а .slob е от 2023 г. явно има развитие проекта - ето така се прави


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 05, 2026, 23:41
Ако се види оригиналния код, евентуално може да се разбере, какво става с транскрипцията.

Според мен в .dat файла е някаква мешавиция между cp1251 и utf-8.
Ако изобщо е cp1251, ами не някаква руска кодировка.
Не ги зная, колко са кирилските кодировки.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: remotexx в Mar 06, 2026, 00:24
Не е до кодировка нито е до шрифт, нито една кодировка не поддържа IPA разширенията..в смисъл минимум заедно с латинициа и кирилица, само UTF-8 или нещо друго но Уникод т.е. без прекодиране няма да мине (като навремето Датекса прецакаха всички кирилиски шрифтове за целта и ги продадоха като кирилизатор - добре че беше Инжинера, че да има/ме правилен кирилизатор за Бозите)

Не знам точно какво е кодировката но виждам че е еднобайтова т.е. или cp-1251 (бозаджийската) или ISO-8859-5 (линукската) но  не е Уникод!

https://en.wikipedia.org/wiki/IPA_Extensions
ʃ æ ŋ и т.н. (не че ни трябват всичките)


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: remotexx в Mar 06, 2026, 00:34
Така става когато разчитаме изцяло 100% само на ИИто само да се оправи във всичко, а то.. разчита на правилни подсказки и насоки т.е. т'ва дето му викат пропмт (и кадърен промптаджия) ..все още - тук даже Никсъна е прав  [_]3

П.П. Е-е-е-х, а едно време дежурният виновен ни беше "задклавиатурното у-во" а сега веке ке да е промпта т.е. "промптаджията/ката"  ;D

и за да не плюем само по ИИто ето малко и за ЧИто
Алтернативата съм я кръстил "[insert framework here] 2-Way Dictionary".
1. 2-Way щото само 2 БД свари да открадне юнакът
2. Dictionary - предполага се че има (БД) за повече от един език, ама тук пък е забравил че само английско-бълргарски двупосочен речник е окрал

Така че оригиналния проект си е за предпочитане - за мен поне, пише си че е английско-български, двупосочен и нямат намерение да крадът БД (даже и те мисля че я ползват отделно т.е. е извън проекта - предполагам по лицензионни причини ..поне навремето си се сваляше отделно  - та колегата освен дето я краднал ами с пакетирането заедно със кода си ..не знам колко лицензионни споразумения е нарушил)


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 06, 2026, 01:18
По-изчекнато е от cp1251.

Тези са си ебали мамата.  :D

Има директно таблица (mapping)  за определени ascii символи към IPA.
Кода преглежда за такива и ги превежда.
Преглежда всеки символ.

Сега, не мога да ги обвинявам, защото тогава не зная, как се е правело и как са се вършели нещата.
След като са го кодирали в cp1251, явно повечето системи на това са разчитали, за да се оправят с кирилицата.
Както каза ти, Ремо, в тази кодировка няма IPA.

Ето, какво намерих:
Код:
// Declaration about transcription
const char Translator::TRANSCRIPTION_ANSI[] = "\241\242\243\244\245\246\247\250\251\255";
const char Translator::TRANSCRIPTION_UNICODE[10][8] = {
        "æ", "ə", "ɔ", "ŋ", "θ",
        "ʃ", "ʌ", "ε", "ʒ", "ð",
};

След това има една функция transformResult в която се намира и ето това нещо.

Код:
pu = (char*)strchr(TRANSCRIPTION_ANSI, c);
                        if ((htmlOutput) && (pu != NULL)) {
                                u = (pu - TRANSCRIPTION_ANSI);
                                j += appendString(TRANSCRIPTION_UNICODE[u], j);
                        } else {
                                dataBuffer[j++] = c;

Не разбирам изобщо от C++, но мисля, че е туй.
Сканира всеки байт, ако го има в TRANSCRIPTION_ANSI и htmlOutput е истина (което май си е така в повечето случаи за графични приложения. Това се проверява другаде в кода), заменя въпросния байт със съответното html entity от таблицата. Това в TRANSCRIPTION_UNICODE.

Значи, в променения код на Python няма функция, която да прави същото.
Там е използвано обикновено кодиране/декодиране. Вградените в Python методи.
Които в този случай, разбира се, се провалят.
Всичко се кодира директно, без да се прилага въпросната таблица/mapping-а.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 06, 2026, 01:42
Ето я и оправията.
В GTK версията, че не ми се правеше виртуална среда и инсталация на библиотеки само за това.
Но и в Qt6 варианта би трябвало да е абсолютно същото.

Прави се също таблица и се прилага след това на текста с превода към думата.
На практика прави същото. Подменя едни символи с други.

Ето таблицата:

Код:
    mapping = {
        "\xa1": "æ",
        "\xa3": "ɔ",
        "\xa4": "ŋ",
        "\xa5": "θ",
        "\xa6": "ʃ",
        "\xa7": "ʊ",
        "\xa8": "ɛ",
        "\xa9": "ʒ",
        "\xad": "ð",
        "Ў": "æ", / тези ги добавих заради примера с plank
        "¥": "θ", / не ми се търсеше, на какво отговарят шеснайсетичните стойности. Може директно по този начин, ако трябва да се добавят още символи
    }

    trans_table = str.maketrans(mapping)

Този код може да се постави след декларацията на другите променливи.
След това trans_table се прилага към превода на думата, за се подменят символите чрез метода translate.

Ето и как би изглеждала цялата функция load_kbg_dat след промяната:

Код:
def load_kbg_dat(path):
    with open(path, "rb") as f:
        data = f.read()

    entries = {}
    parts = data.split(b"\x00")

    mapping = {
        "\xa1": "æ",
        "\xa3": "ɔ",
        "\xa4": "ŋ",
        "\xa5": "θ",
        "\xa6": "ʃ",
        "\xa7": "ʊ",
        "\xa8": "ɛ",
        "\xa9": "ʒ",
        "\xad": "ð",
        "Ў": "æ",
        "¥": "θ",
    }

    trans_table = str.maketrans(mapping)

    for part in parts:
        if not part:
            continue

        try:
            text = part.decode("utf-8")
        except:
            # Тук накрая се прилага таблицата и се прави подмяната на съответните символи
            text = part.decode("cp1251", errors="ignore").translate(trans_table)

        if "\n" not in text:
            continue

        word, translation = text.split("\n", 1)
        word = word.strip()
        translation = translation.strip()

        if not word:
            continue

        entries[word] = translation

    return entries

Мисля, че това е достатъчно инфо за Радо, за да се оправи по-натам.
Транскрипцията на превода на plank вече изглежда нормално.
Ще може да смени и снимките в GitHub.

П.П. Сега се замислих и направо да се кодира целия .dat файл в UTF-8, но май не си заслужава. Допълнителния в момента код е нищожно малко.

А и в предишен пост казах, че сепаратора е 0xff, той 0x00. Но това са подробности.
Не ми е наред главата напоследък. Гледам едно, помня друго  :D

Радо, да не забравиш да върнеш оригиналния лиценз. Върши същата работа.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: rado84 в Mar 08, 2026, 22:15
Интересно! Въобще не очаквах да има такива или изобщо някакви отговори по темата, очаквах само анатеми и псувни. Което напоследък се е превърнало в стандарт в линукс общността и затова първоначално въобще не бях сигурен струва ли си да пускам тема тук. Защото някой иска помощ за нещо, даваш му я и вместо да каже поне едно "благодаря", почва да те псува и с "ти ли ще ми кажеш как да правя нещата?". И като види, че не му стига мозък да се справи сам, се връща за още помощ, сякаш си му длъжен с нещо, ама помагащият кораб вече е потънал. И естествено след няколко такива "срещи" започваш да се чудиш има ли смисъл да споделяш каквото и да било, където и да било или да си запазиш нещата за себе си, а останалите да ги оставиш да си трòшат главите...

Но... недоволни винаги ще има (за тях имам два крачола), а в крайна сметка направих програмката за себе си, защото KBGOFFICE е на последни издихания и е въпрос на време въобще да спре да тръгва. Едната фолбек GTK2 библиотека вече сдаде багажа и няма замяна, а кога и приложените към КБГОФИС qt4 библиотеки също ще бъдат пратени на майната им - също не се знае.

Сорсът е в .py файла. Нарочно не съм го компилирал - прави редакцията и тестването на код по-лесно. Ако някой толкова държи на бинарен файл, да си го компилира сам.

Относно ИИ - ИИ ми даде код за съвсем друга програма, която няма нищо общо с този речник. После видях, че мога да използвам онази програма като темплейт за речника. Единственото, което ИИ написа изцяло, беше кода за прочитане на '.dat' файловете, защото видях голям зор с тях. Оригинално са краднати от някакъв уиндоуски речник в средата на 90-те и постепенно са били допълвани с нови думи. Последното допълване е било през 2014-та от разработчиците на КБГОФИС.

Ако исках да лъжа и да се преструвам на програмист, нямаше изобщо да спомена ИИ и щях да си припиша заслугите, както правят тия от КДЕ. А истината е, че просто се опитвам да поддържам живо нещо, което е почти умряло и го правя с много малкото, което разбирам от програмиране, в т.ч. и от Питон.

За кодировката: в момента в кода има това:

Код:
        try:
            text = part.decode("utf-8")
        except:
            text = part.decode("cp1251", errors="ignore")

и работи. Защото не е ясно каква им е кодировката на тези файлове и за по-сигурно ИИ добави тази част, за да е сигурно, че текстът ще излезе като текст, а не като марсиански символи. A пък командата "file en-bg.dat" връща просто "data" и толкоз.
Като го направя с редакцията, която някой предложи няколко поста по-нагоре, програмата изобщо не иска да тръгне, така че за момента ще я оставя с "try-except" блока.

Първоначалният вариант на програмата беше да търси с натискането на всеки клавиш - както КБГ и както "SA Dictionary 2012" за уиндоус, но това караше програмата да се забавя и накрая просто да крашва, така че се наложи да сменя кода и да го направя да търси, едва след като напишеш думата и натиснеш ентър.

Не принуждавам никого да ползва този речник, просто реших да споделя нещо, което работи и което може да е полезна алтернатива на почти умряла програма.

И НЕ - НЕ СЪМ ПРОГРАМИСТ, НИКОГА НЕ СЪМ ТВЪРДЯЛ, ЧЕ СЪМ ТАКЪВ!
Щях да бъда, но некадърни учители ме отказаха преди години и започнах сам да си се уча "оттук, оттам" по малко.

А това да кажеш, че ИИ е написал целия код е глупост. Все едно да кажеш, че ИИ е написал всичките ми скриптове, което не е така. ИИ просто ми обясни какво е променлива в bash script и как се използва, оттам нататък всичките близо 300 скрипта, които събрах в кейс скриптове, са си изцяло мое творение и пригодени за автоматизация в моята система.

Целият код на съвсем друга програма беше написан от ИИ - програма, чиято функция е просто да покаже данни на екрана. За речника използвах готовия код като темплейт и започнах да го променям, за да стане за речника. Играх си почти цяла седмица с копиране и нагаждане на код, за да стане това, което е сега. Но с четенето на дат файловете не успях да се справя и затова трябваше да питам ИИ как да стане. Именно тази дълга играчка беше причината да го оставя некомпилиран - просто променяш кода и го пускаш, вместо да си губиш времето с компилиране и после тестване. Освен това - какво по-opensource от това да го оставиш некомпилирано? :)


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 09, 2026, 00:15
Редакцияна на програмата работи при мен. Променен е само файла за GTK.
Няма причина да не работи, защото допълнителния код не прави никакви съществени изменения в логика или нещо такова.
Само заменя едни символи с други.

Транскрибирането няма да работи коректно, защото не съм въвел всички символи по IPA в mapping.
Просто трябва да се допълнят и останалите.
Въведени са само тези, които бяха в кода на оригиналната програма.
Изрових кода ѝ от Sourceforge.

За да не вкарат всички символи за транскрипцията, предполагам че просто използват такива от ascii или cp1251 които приличат на външен вид.
Дано да са ascii, че ако има cp1251 символи в транскрипцията, това биха се заменили навсякъде и малко се усложняват нещата.

.dat файла има проста структура и да се направи нещо да се допълва с нови думи, няма да е сложно.

Иначе изрових всички символи, които се ползват в транскрипцията.
То има и още, но са за други езици.
Тези, които се ползват от нас са ай тия:

[iː ɪ e æ ɑː ɒ ɔː ʊ uː ʌ ɜː ə e aɪ ɔɪ əʊ aʊ ɪə eə ʊə θ ð ʃ ʒ tʃ dʒ ŋ ɑ ɒ ʌ ə ˈ ˌ ː]
Тук са показани и двойните, но това няма много значение - копирах всичко.

Може да се допълнят липсващите в mapping от променения код, който предложих, когато се установи дума, в която все още се появяват странни символи в транскрипцията.

Другия начин е да се парсне речника и да се подмени изцяло траскрипцията със съответната за думата.

В интернет има много ресурси в различни формати, с думи и транкрипцията към тях.
Като тук например: https://github.com/open-dict-data/ipa-dict

Ако се прави това, може направо и целия .dat файл да се конвертира до UTF-8 и да се приключи с ненужната гимнастика.


Да уточня, че кода, който дадох е само на една от функциите в целия файл на  Python от GTK версията.
В нея е добавена тази таблица, която нарекох mapping и е променен последния ред в тази част:
Код:
try:
            text = part.decode("utf-8")
        except:
            text = part.decode("cp1251", errors="ignore")


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: rado84 в Mar 09, 2026, 04:18
На мен повече ми се иска да намеря начин да конвертирам .дат файловете към по-модерен и четим формат - я обикновен .txt, я .json от въпросния open-dict или дори sqlite db, ако щеш. Въпросът е да е нещо лесно за редакция и допълване с нови думи и/или изрази. Засега обаче всичките ми търсения се провалят, но не защото няма възможни предложения как да стане, а защото самото конвертиране се проваля - на инструментите не им харесва скапаният .дат формат.

Транскрипцията не съм я и поглеждал даже да я оправям, защото я знам. Речника го ползвам единствено за проверка на правописа на някои думи, които до ден днешен ми "бъркат в мозъка" с изкецания си правопис, като например "hypocrisy" или пък тази, която няма запомняне и винаги трябва да я копирам: "unconsciousness". Знам как се произнаят и двете, и всички останали, просто на някои правописът им ми е труден и затова ми трябва локален речник като моя или като КБГ.

Но... ако намеря начин да конвертирам речниците към нормален формат без да трябва да преписвам дума по дума, то и транскрипцията ще може да се оправи и поддържа.

Edit: разбрах защо не искаше да тръгва с твоя код и се учудвам, че при теб изобщо е тръгнало!

Python не приема / или // за коментари. Приема единствено # за коментари.
И сега, след като го поправих и махнах коментарите ти, ето какво излиза в транскрипцията:

(https://i.imgur.com/IPXnoFW.png)

90% от bash скриптовете, които си пиша, са на python и покрай тях научих някои тънкости на Питоня, като например това, че е много капризен на тема отстъпи и ако не внимаваш, е*аваш майката на скрипта. И по принцип в Python правилният отстъп е 4 символа (интервала). Ако имаш цикъл с for loop, командата в луупа трябва да е с отстъп 8 интервала, иначе забрави да тръгне.  ;D

Edit 2: трябваше да добавя още мапинг, за да започне да излиза както трябва. Добавих

Код:
"ў": "ə",

и сега вече "transfer" излиза с правилна транскрипция:

Код:
[træns'fə:]

Явно, че и на тази програма ще трябва да направя релийзи в гитхъб и след малко се захващам с това. Версия 0.0.2 е тази с твоя код и добавения от мен мапинг. Но първо трябва да видя дали този код ще работи в Qt версиите.

Edit 3: айде, вече си има и релийзи!  ;D
https://github.com/rado84-github/2-way-dictionary/releases


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 09, 2026, 10:53
Споделил си публично програмата в GitHub и се опитваш да я спасиш.
Добре ще е, транскрипцията да си е наред, ако ще я ползва и някой друг.


Хубаво е, че понаучаваш Питоня.
Улеснява живота.
Това, което аз направих си е вградена функционалност към инструментите за манипулиране стрингове в Python - на текст.

Относно конвертирането до JSON или в нещо друго...
Ами, ако искаш да е четимо, почти няма нещо друго.

Впрочем, ти почти си го направил.
Разделил си .dat файла на парчета (думи, заедно с превод), след това разделяш думата от превода.

Тук може да се направят вече две неща.

Да се създаде празен речник на Python. Този тип за данни с ключ/стойност. На други езиси го наричат hash table, map, object, hash map, table.
Та, да се вкара думата като 'key', а превода като 'value' на този речнки.
Прави се това в цикъла, който в момента съществува.
След като се парсне целия файл, имаш един голям dict на Python, който просто превръщаш в JSON и го хвърляш във файл.
Това е просто конвертиране от формата в .dat файла, в JSON

Второто нещо, което може да се направи вместо първото ми предложение е, да се направи както си трябва с този JSON.
Целия JSON обект да има едно поле, в което се указва езика, а под него данните. Те да включват и отделно поле за транскрипцията.

Например:
Код:
{
"language": "en-bg",
    {
    "word": "plank",
        {
        "transcription": "[plæŋk]",
        "translation": "Текста на превода"
        }
    },
    ...,
    ...,
}

Бях погледнал, колко са думите в двата .dat файла.
Едното файлче беше 43,000+ или 46,000+, другия беше към 48,000+ думи.
Не съм работил с големи по размер JSON файлове, но зная, че са бавни за обработка. Не съм сигурен, дали и тези са големи.
Зная, че се обработват и 1000 пъти по толкова. ;D
В Python ще са превърнати в dict обекти и това може и да помогне за бързината на търсене. Може би.

Оптималния вариант би било бази данни (sqlite3 нарпимер), защото са оптимизирани за търсене, заемат по-малък обем на диска, обаче не са четими. За въвеждане на дума и попълване на речника, ще трябва да се създаде и съответната функционалност директо в програмата или на ръка да си вкарваш данните през конзолата и интерфейса на sqlite3.

Другото е, че ще трябва да се преправи и системата за търсене.
Да се имплементира fuzzy find за въпросния dict.
Нещо като тава би работило:
Код:
for word in dict.kays():
    if "plank" in word:
        <добавяне на 'plank' към листа с намерени думи>

Може да има и по-бързи начини, не зная. Някой професионален програмист, ако им тук, да каже.

sqlite3 си има вградена функционалност за такъв тип търсене, но както се видя, не е никак сложно да се направи и за текстов обект, какъвто е JSON (dict obect в Python).


Погрешно го нарекох, като fuzzy find. Направо се търсят точни съвпадения.


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 09, 2026, 14:53
Има някаква билиотека за определяне на кодировката.
Не съм я пробвал досега.

charset_normalizer


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: rado84 в Mar 10, 2026, 02:06
JSON го дадох просто като пример за нещо различн от дат, което да може да се отвори и с текстов редактор. Мисля да се хвана да инсталирал някоя лайт БД, за да видя кое как става (досега не ми се беше налагало да работя с БД и затова не знам как става). Идеята е речникът да е максимално лесен за редакция и по възможност с малък брой скобички и подравнявания, че там ако объркаш подравняването (както и в Питон), е*аваш макята на всичко и после ходѝ намирай проблема.

А "спасяване"... не бих го нарекъл така. По-скоро поддържане работещо. Защото с КБГ-то ми писна кажи-речи всяка година да си играя на котка и мишка с библиотеките, които непрекъснато отпадат от употреба и после са трудни или невъзможни за намиране. С GTK3 поне съм се подсигурил за много дълго време, а за QT5/6 имам един познат, който е по-навътре с този фреймуърк и когато може, помага с конвертирането на кода от GTK към QT. Което от друга страна означава, че ако някой ден той каже, че не може повече или че изобщо няма да се занимава с кодене, QT версиите ще останат "заседнали" във времето, докато GTK ще продължи да бъде поддържана. В такъв случай ще се наложи или да намерим някой от общността да конвертира от GTK към QT, или да прибягвам до AI. Последното ще е само много краен случай, ако няма друг начин. Щот' нали на Уиндоус 11 кода му го пише AI (поне така казват), а всички знаем до какво доведе това.  ;D 


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: remotexx в Mar 10, 2026, 06:44
А бе що не се пробвате и на Пърл  ;D
https://www.youtube.com/watch?v=RCHhAEjEjKw


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 10, 2026, 06:52
А бе що не се пробвате и на Пърл  ;D
https://www.youtube.com/watch?v=RCHhAEjEjKw
Кой тук имаше подпис, който казваше, че Perl бил единствения език, който изглеждал еднакво преди и след криптиране на кода? :D

Форума ни не се ли обръщаше към нещо на Perl?


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: 4096bits в Mar 13, 2026, 08:49
Снощи преди да си легна набързо сглобих това.
Превръща .dat файла в json.

Но изглежда почти половината думи са без транскрипция или аз нещо не правя, както трябва.
Защото скрипта елиминира напълно всичко между [ и ], както ние пишем транскрипцията и търси думата във външен файл и заменя транскрипцията направо.

Ако във външния файл думата не е намерена, транскрипция за нея няма да бъде записана в новия файл.

Един начин да се избегне това, ако оригиналната транскрипция е налича в .dat файла, е да се използва предишния метод - подмяна на символите, както беше направено в примера в някой от предишните постове.
За това обаче, ще трябва да се въведат в mapping абсолютно всички символи, за да е коректно всичко и съответно, това да се добави към скрипта, където трябва.

Външния файл, в който се търси за транскрипция на думата е взет от https://github.com/open-dict-data/ipa-dict/releases/tag/1.0
Името му е директно вписано в скрипта и си го търси в текушата директория на скрипта.
Нарочно го направих така, вместо да се дава като параметър, защото второто може просто да не проработи - ако се зададе друг json файл, може да е форматиран по друг начин, с други ключове и да не го прочете изобщо.
Ако се подменя с по-пълен файл, трябва да се подменят и съответните ключове във функция search_pro в началото на скрипта.

Друг вариант да се въведе транскриция за всяка дума, е да се пита в интернет в някой сайт за това.
Можех да го пробвам, но не ми се занимаваше, че исках да си лягам.
Там можеше да се сблъскам и с проблеми с блокаж на IP адреса ми, ако ги ударех с 20 000+ заявки.

Скрипта се стартира с: python dat2json.py en-bg.dat
Скриптчето не прави никакви проверки, дали файла (en-bg.dat) съществува или пък някакви други, за коректност на подадените параметри.
Той параметъра е само един - името на dat файла.

Същия скрипт може да се ползва и за bg-en.dat, като се махне/коментира напълно частта, която търси за транскрипция и съответния ключ в променливата new_record.

Код:
import json
import re
import sys
from pathlib import Path

dat_file = Path(sys.argv[1]).resolve()


def search_pron(word, data_file):
    try:
        pron = data_file["en_UK"][0][word.lower()]
        return f"[{pron.strip('/')}]"
    except KeyError:
        return ""


def to_json(dat_file):
    with open(dat_file, "rb") as dat:
        data = dat.read()

    # en_UK.json от https://github.com/open-dict-data/ipa-dict/releases/tag/1.0
    # може да се замени с ne_US.json за американско произношение
    with (
        open("en_UK.json", "r") as transcriptions,
        open(f"{dat_file.parent}/{dat_file.stem}.json", "w") as result,
        open("no_transription.txt", "w") as missing,
    ):
        records = data.split(b"\x00")  # взето от GTK3 версията на програмата
        words = len(records)
        print(f"Words in {dat_file.name}: {words}")

        transcr = json.load(transcriptions)
        new_data = {dat_file.stem: list()}

        counter = 1
        no_pron = 0
        # transcr_pn = re.compile(r"\[.*?\]") # "\[[^\]]*\]"
        transcr_pn = re.compile(r"\[[^\]]*\]")  # r'\[.*?\]'
        for record in records:
            # взето от GTK3 версията на програмата
            if not record:
                continue

            record = record.decode("cp1251", errors="ignore")

            # взето от GTK3 версията на програмата
            if "\n" not in record:
                continue

            pron = ""

            if transcr_pn.search(record):
                word, translation = record.split("\n", 1)
                translation = transcr_pn.sub("", translation).strip()
                pron = search_pron(word, transcr)
            else:
                word, translation = record.split("\n", 1)
                pron = search_pron(word, transcr)

            if not pron:
                missing.write(f"{pron}\n")
                no_pron = no_pron + 1

            new_record = {word: {"transcription": pron, "translation": translation}}

            new_data[dat_file.stem].append(new_record)

            print(f"\rProcessed: {counter}/{words}", end="")
            counter = counter + 1

        json.dump(new_data, result, ensure_ascii=False, indent=2)

        print("\n\nDone!")
        print(f"Words without transcription: {no_pron}")
        print("List available in no_transription.txt")


if __name__ == "__main__":
    to_json(dat_file)


Титла: Re: Двупосочен английско-български речник с python 3
Публикувано от: rado84 в Mar 21, 2026, 16:49
Аз пък през последната седмица спя макс по 4 чàса (няма някаква конкретна причина), мозъкът ми е на каша и отказва да работи, така че това с конвертирането ще го мисля, ако или когато мозъкът ми се оправи.