Автор Тема: Двупосочен английско-български речник с python 3  (Прочетена 196 пъти)

rado84

  • Напреднали
  • *****
  • Публикации: 105
  • Window Manager: Cinnamon
    • Профил
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
Активен

RESIST OS Cinnamon; Core i7-12700F; RTX 3070 Ti 8 GiB, 62.62 GiB DDR5-4800 (5200).

4096bits

  • Напреднали
  • *****
  • Публикации: 9162
    • Профил
Добра инициатива, прост интерфейс, което много ми харесва.

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

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

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

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

spec1a

  • Напреднали
  • *****
  • Публикации: 6622
    • Профил
Тези неща:

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

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

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

4096bits

  • Напреднали
  • *****
  • Публикации: 9162
    • Профил
Единични изпълними файлове съм правил за двете системи чрез pyinstaller.

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

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

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

remotexx

  • Напреднали
  • *****
  • Публикации: 5297
    • Профил
и моите 5 ст. опа т.е. 5 цента (а бе що така... за левчето ривахте а за стинката не)

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

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

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

Nik123

  • Напреднали
  • *****
  • Публикации: 4678
  • Distribution: Mageia, Q4OS
    • Профил
Чак па да тегля анатема  ;D Нали сам съм писал, че ИИ-то си има своето приложение. Браво за труда на колегата.
Активен

remotexx

  • Напреднали
  • *****
  • Публикации: 5297
    • Профил
Чак па да тегля анатема  ;D Нали сам съм писал, че ИИ-то си има своето приложение. Браво за труда на колегата.

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

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

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

П.П. Ей, без да искам познах - "самопризнанието" чак сега го видях
докато козметиката и бутона за шрифта ги направих аз
- и то... (с печатни грешки)
къде с НЕмалко ровене из 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, обик. тук се пише пълното име (по документи) инак  утре Радо Шишарката ще каже че той държи авторските права ..а можеше да го направи правилно ма кой да се сети (и ИИто не подсказало, само тъй ще да е ИИто /му/ е виновно, т.е. за нас само заслугите а всичката вина е само за  ИИто)

Ето така се прави (за предпочитане с препратка към уеб страница, профил и т.н. а не да ти го ровим от профила - не всички ще да са го свалили от Гитхъба ти, а и Радослав Димитров-ци много)
Copyright (c) 2026 Radoslav Dimitrov
« Последна редакция: Mar 05, 2026, 20:58 от remotexx »
Активен

Nik123

  • Напреднали
  • *****
  • Публикации: 4678
  • Distribution: Mageia, Q4OS
    • Профил
..
2. Сменен е лиценза от ГПЛ къмто МИТ което май не е разрешено но нека адвокатите се изкажат там (Никсъне)
..
По тези лицензи имам съвсем ограничени познания и не знам правомерна ли е, или не е, такава промяна.
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 9162
    • Профил
Аз само мога да кажа евала на Радо.
Не бих се хванал да променям нещо толкова старо.

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

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

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


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

Няма да е трудно, като гледам,  да се добавят и други речници, за други езици.
« Последна редакция: Mar 05, 2026, 21:50 от 4096bits »
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

remotexx

  • Напреднали
  • *****
  • Публикации: 5297
    • Профил
според ИИ...
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 г. явно има развитие проекта - ето така се прави
« Последна редакция: Mar 05, 2026, 22:13 от remotexx »
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 9162
    • Профил
Ако се види оригиналния код, евентуално може да се разбере, какво става с транскрипцията.

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

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

remotexx

  • Напреднали
  • *****
  • Публикации: 5297
    • Профил
Не е до кодировка нито е до шрифт, нито една кодировка не поддържа IPA разширенията..в смисъл минимум заедно с латинициа и кирилица, само UTF-8 или нещо друго но Уникод т.е. без прекодиране няма да мине (като навремето Датекса прецакаха всички кирилиски шрифтове за целта и ги продадоха като кирилизатор - добре че беше Инжинера, че да има/ме правилен кирилизатор за Бозите)

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

https://en.wikipedia.org/wiki/IPA_Extensions
ʃ æ ŋ и т.н. (не че ни трябват всичките)
« Последна редакция: Днес в 00:45 от remotexx »
Активен

remotexx

  • Напреднали
  • *****
  • Публикации: 5297
    • Профил
Така става когато разчитаме изцяло 100% само на ИИто само да се оправи във всичко, а то.. разчита на правилни подсказки и насоки т.е. т'ва дето му викат пропмт (и кадърен промптаджия) ..все още - тук даже Никсъна е прав  [_]3

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

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

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

4096bits

  • Напреднали
  • *****
  • Публикации: 9162
    • Профил
По-изчекнато е от 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-а.
« Последна редакция: Днес в 02:14 от 4096bits »
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

4096bits

  • Напреднали
  • *****
  • Публикации: 9162
    • Профил
Ето я и оправията.
В 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

Радо, да не забравиш да върнеш оригиналния лиценз. Върши същата работа.
« Последна редакция: Днес в 02:21 от 4096bits »
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Запис на файл във цикъла (не селед изпълнението му) Python
Общ форум
NikolaiTalev 2 6130 Последна публикация May 19, 2014, 10:41
от NikolaiTalev
Едно питане за python
Web development
korea60 11 11371 Последна публикация Jul 05, 2014, 11:06
от zxz
Python и неволи с форматиране на дата
Web development
runtime 0 3555 Последна публикация Oct 23, 2014, 18:11
от runtime
Python GIL
Общ форум
4096bits 1 2562 Последна публикация Oct 26, 2015, 17:51
от gat3way
Искам да се зарежда python 3.7 вместо python 2.7
Web development
3p0 36 40546 Последна публикация Dec 27, 2019, 00:49
от 4096bits