Thursday, 21 March 2013

Babylon-based dictionaries on Kindle - Round 2

My post "Using Babylon-based dictionaries on your Kindle" seems to have gotten relatively wide attention. Currently the statistics show that 2595 users have seen it, 31 of them commented, 2 more via Facebook and a number of emails I've received from readers.
People's interest in pre-built dictionaries which they can run on their Kindle devices (specifically English-Hebrew dictionaries, but not just) is understandable. There are some issues with the BabylonToHtml conversion tool I've put together.

Due to lack of time for resolving the known issues with the project, or for production of pre-built dictionaries, I've decided to share BabylonToHtml publicly as an open-source project, for anyone who wishes to update/improve it.

Pre-Built Dictionaries in this post!

I'm sharing some pre-built dictionaries in this post. Some were produced by me and some by others. They are shared here so that they can be freely downloaded and used by anyone.
This section will be updated with dictionaries which the readers share with me over time.
 Jump to the pre-built dictionaries section!



BabylonToHtml is Now Open to the Public

Why?
My lack of time to address the currently known issues with BabylonToHtml, got me to a decision to make this an open-source project for the benefit (and intervention) of the public.

Known issues
At this time there are a few known issues which need to be addressed for better production of dictionaries. Here they are AFAIK:
  1. Unresolved characters #1:
    There are unresolved portions of the produced dictionary, which are wrapped by
    <charset c=T>****;</charset> blocks. Those are probably unicode characters which need to be resolved. If left unresolved they appear as gibberish in the output dictionary (and distort the HTML structure).

  2. Unresolved characters #2:
    There are unresolved portions of the produced dictionary, which are delimited with dollar-signs, e.g: $506274$ or cos$531761$. Not 100% sure how those should be treated/resolved.
    This would require some research (see "Additional resources for code-contributors" below).

  3. Bug in the project: Encoding is never really applied as requested:
    The encoding is actually force-resolved in the code, no matter what the user says (it gets overridden by the dictionary analysis code). This needs to be fixed.

  4. Potentially unresolvable bug with Hebrew and right-to-left dictionaries:
    Specifically for Hebrew dictionaries: Kindle (at least Kindle 2) always aligns the text from left-to-right.
    Not just the letters (this is a feature which would be relatively easy to implement), but also the order of the words themselves. This means that no matter what you do, the words will be placed in their original order, only starting from the left and going right (as if they were written in English).
    Simply reversing the word order will not work, because then the outcome would give the text from end to start (may work only if the definition's text is a single-line).
    To know which word will appear where is impossible (this depends on the screen's size and selected Unicode font (in the case of Kindle 2, a hacked font needs to be installed, as explained here).
    Some problems with Hebrew dictionaries (Click for full size)...
  5. Image handling
    Some .bgl files seem to contain embedded images. This thread may have a hint about the right way to extract resources, written in C++.

Where?
The project's sources are now shared as open-source on GitHub, which supports unlimited open-source repositories (to learn a bit more about source-control, see my post "Setting Up Subversion Source-Control with Assembla and TortoiseSVN". Although that post refers to Subversion and not Git, you can still get a general idea. Besides using GitHub's client on Windows or Mac is quite intuitive).
Everyone is now allowed to get a copy of the repository, apply changes and sync-in improvements.

Here's a link to the repository: BabylonToHtml (or click the screenshot below).
BabylonToHtml on GitHub

Additional resources for code-contributors
As I stated in the original post, Babylon's .bgl format is well known and there are other online projects which parse it, some of which were suggested by commentators of the post directly and some by email.
Personally I suspect they all yield from one single reverse-engineered implementation, because of the suspicious similarity in names of variables and embedded comments.
Here are a few of those projects, which may be useful for anyone who'd like to contribute to this project's code and its known issues listed above:
  • dictconv: This is the code I've used in my BabylonToHtml, with slight modifications and changes.
  • Forum thread: BGL (babylon glossary) to GLS (babylon glossary source) (C++ implementation). This one may also handle resources, such as images, embedded into the .bgl file.
  • BGL-Reverse - another open-source reverse engineered BGL parser (Python).
  • PyGlossary - yet another open-source reverse engineered BGL parser, this one is also in Python.
Pre-Built Dictionaries!

I'll share here links to pre-built .prc files which were converted from Babylon .bgl files using my tool.

To deploy/use them, simply transfer them to your Kindle device, as explained on step 4 of the previous post, see this link.

Readers: Send me your creations and I will post them here!
FileSource LanguageDestination LanguageNotes
Babylon English-Bulgarian dictionary.prc
(Alternative link)
EnglishBulgarianBy Alon Rotem
Babylon English Hebrew - Reversed Words.prc
(Alternative link)
EnglishHebrewBy Alon Rotem.
One of my attempts to get the words ordered correctly in Hebrew (words still need to be read from bottom to top) and to clean-up some of the unresolved character-codes, still has some troubles with gibberish characters.
Babylon English-Hebrew Dictionary.prc
(Alternative link)
EnglishHebrew22/03/2013 Contributed by a reader of the blog, Made with pyglossary.
Text that has both Hebrew and non-Hebrew (like numbers, latin characters, parenthesis, etc.) in the same paragraph is handled better, word aliasing (e.g. write/wrote/written --> write) is added. The Hebrew text is right aligned (still words still need to be read from bottom to top).
Tested on: Kindle 3 with v3.4, Kindle Keyboard with v3.4
Babylon English-Hebrew Dictionary (Kindle Voyage version).prc
EnglishHebrew25/05/2015 Contributed by a reader of the blog, Made with pyglossary.
This dictionary had layout issues (lines were overflowing the width of the screen) when using the default Kindle Voyage font (Caecilia size 4), thus it was forced to break 40 character lines. It may have layout issues if a non-default font is used.
Tested on: Kindle Voyage, Kindle Paperwhite (Firmware 5.6.1.1)
Babylon English-Hebrew Dictionary - MG Reversed Words.prc
(Alternative link)
EnglishHebrew25/03/2013 Contributed by a reader of the blog, Made with pyglossary.
Similar to "Babylon English-Hebrew Dictionary.prc" from 22/03/2013 but the letters are reversed in each word (still words still need to be read from bottom to top).
Should be working on: Kindle Paperwhite.
Babylon Russian English.prc
(Alternative link)
RussianEnglish09/07/2013 Contributed by Simon Brenncke.
Tested on: Kindle 4
A Spanish English Dictionary Granada University Spain.prc
(Alternative link)
SpanishEnglish15/05/2013 Contributed by Claudio Acevedo.
Tested on: Kindle Paperwhite
An English Spanish Dictionary Granada University Spain.prc
(Alternative link)
EnglishSpanish15/05/2013 Contributed by Claudio Acevedo.
Tested on: Kindle Paperwhite

babylon czech english.prc
(Alternative link)
CzechEnglish15/05/2013 Contributed by a reader of the blog.
Tested on: Kindle Paperwhite.

48 comments:

  1. Very good .
    The new verion worked well for me !
    NIr

    ReplyDelete
  2. I tried all of the prc files (including the new one 22/3) and I'm facing a reversed words problem. ex: שלום shown as םולש ...
    I have Kindle Paperwhite if it's matter.. Any way fix it?

    Thanks,
    Adir

    ReplyDelete
    Replies
    1. Please try the latest addition from 25/03/2013 and tell if it's working for you (and on which firmware)

      Delete
    2. it works nice! Thanks
      Pity I can't use two dictionaries at same time... Or Can I?

      Delete
    3. Maybe you can, if you manage to merge them into 1 file, for example to contain both words in Spanish and in French, so you have translations for words in both languages..

      Delete
  3. Hello Alon,

    don't know if this is off-topic or not... anyway,
    I'd like to lookup words in the dictionary even if they are not listed there.
    Say, if the dictionary doesn't contain "difficulty", it should land me anyway there where I could get by by looking at "difficult". This would make up for dictionaries without inflections; other ereaders work this way.
    ...any idea on this? can it be done on the kindle?

    Thanks

    Mauro

    ReplyDelete
  4. עובד מעולה, יש לי את הKindle paper white בגרסה 5.3.4
    זה נראה טוב ועובד טוב וממש משנה את חווית הקריאה, אני מודה לך מקרב לב !

    ReplyDelete
  5. Hi, I've downloaded the C# project from GIT to my Windows 7 Virtual Machine and I am studying the code (I am totally newbie) and playing with different dictionaries (English, Spanish, French). What I can see is that some special characters appear as Unicode, many of them from the BGL pronunciation "section" [], this only happens with latin html's, special characters from English BGL pronunciation section are written OK on the html file. The program detects correctly the languages but the source coding as Windows-1252, maybe it's a problem of MS Windows? Thanks in advanced

    ReplyDelete
    Replies
    1. Hi,
      Those characters have been discussed in the post and in the comments as well.
      First, there is a problem with the program's ability to detect the right dictionary languages, and thus the right encoding (although those can be forcefully provided as command line args, they are ignored at a later stage of the dictionary analysis). This has also been mentioned as a bug.
      Second, those pronunciation characters are not well handled and they leak to the HTML output (where they should not be present).
      There is an option to extract the definitions with pyglossary, which handles the special characters better, then combine those into the output html file. The better versions of the dictionaries I've shared (English > Hebrew) were built that way.
      I've been thinking about incorporating pyglossary into my project and using its abilities to better parse the .bgl file, but alas- not much time to do that yet..

      Delete
  6. שלום רב,
    סליחה על הבורות, אבל האם מדובר פה במילון מובנה בתוך הקינדל כך שאפשר לראות את התרגום תוך כדי קריאה?
    אם כן האם כל בור ועם הארץ יכול להתקין אותו?
    דרך אגב , מדוע אי אפשר להתקין מילון עברי כתוב באותיות לועזיות?
    שרה

    ReplyDelete
    Replies
    1. היי שרה,
      ראשית, תודה על ההתעניינות בבלוג ובפרוייקט הזה.

      המילון המובנה בתוך הקינדל (זה שמגיע כברירת מחדל כמילון אנגלי-אנגלי) ניתן להחלפה במילון אחר. זה הרעיון שעומד מאחורי הפרוייקט הזה.

      הפוסט הזה, וגם הפוסט שקדם לו (ר' קישור בראש הפוסט) בא לספק מילונים חלופיים ולתת פתרונות למספר בעיות הקיימות באופן כללי עם מילונים בקינדל, וגם בפרט לגבי עברית:

      אין כל כך מילונים טובים להורדה/רכישה.
      קינדל לא מתמודד היטב תמיד עם שפות שנכתבות מימין לשמאל.
      הדגמים הקצת-יותר-ישנים של קינדל (קינדל 2, כמו שיש לי) בכלל לא מציגים אותיות שאינן לטיניות אם לא מתקינים עליהם במיוחד גופן בינ"ל. כך שגם אם יש מילון עברי (או כל שפה שאינה בכתב לטיני) לא ניתן לקראו כלל.

      לשאלותייך:
      כן, מדובר במילון המובנה בתוך הקינדל.
      פיתחתי תוכנה שמאפשרת להמיר את מילוני המחשב המעולים של בבילון למילוני קינדל. שאותם אפשר להתקין כמילון חלופי למילון המובנה.
      אגב, עוד בעיה של המילון המובנה בקינדל היא שהוא מסוגל לאתר מילים באופן מבנה ישירות מחלון הקריאה רק כשמדובר במילים באותיות לטיניות. כך יוצא שמילונים שמתרגמים מאנגלית יעבדו, בעוד שבמילונים שמתרגמים משפות אחרות, כנראה לא יעבוד החיפוש המובנה של סימון מילה בטקסט.

      בפוסט הקודם הסברתי איך להתקין את המילונים, בצירוף צילומי מסך:
      http://www.alonintheworld.com/2012/06/using-babylon-based-dictionaries-on.html
      להערכתי, בורים ועמי ארצות אמורים להצליח באופן מיוחד עם התקנת המילון על הקינדל. יחד עם זאת אציין שאם בכל זאת הסתבכת עם ההתקנה, את מוזמנת לכתוב אליי מייל. הכתובת:
      alon@alonintheworld.com

      בטבלה בפוסט הזה יש קישורים למספר מילונים בכל מיני שפות. חלק מהם אני המרתי ממילוני בבילון, וחלק מהם הומרו באמצעות התוכנה שכתבתי ע"י קוראים של הבלוג.

      יש מספר גירסאות של המילון האנגלי-עברי. אני ממליץ להוריד ולנסות את זה מתאריך 22/03 או זה מה-25/03. ההבדל ביניהם הוא היפוך של האותיות. קיימות גירסאות של קינדל שבהן אחד מהם יציג את המילים נכון, בעוד האחר יציג אותן בהיפוך מהסוף להתחלה.

      מה שכן, מאחר ולקינדל יש בעיות עם יישור לימין, המילים תמיד תופענה בסדר הפוך בכל טקסט שאורכו עולה על שורה אחת (סדר המילים, לא סדר האותיות). אבל האותיות במילים אמורות להופיע כמו שצריך, ולא בהיפוך. אם ניסית את אחד המילונים האלה והאותיות מופיעות הפוך, נסי את המילון השני.

      אגב, כמדומני יש מילון שאמאזון מציעה לרכישה שבו ההגדרות בעברית כתובות באופן פונטי באנגלית. לא משנהו שבאופן אישי הייתי מוציא עליו כסף.

      בהצלחה!
      אלון

      Delete
  7. Any one who would upload german spanish (and viceversa)?
    I have converted the PONS dictionary but with lots of strange signals and unaligned..

    ReplyDelete
  8. אהלן ותודה ענקית על הרעיון והעבודה. יש לי בעיה עם המילונים:
    הקידל שלי - 5, ההוא עם הג'ויסטיק
    פותח את הקבצים של המילון ה פ ו ך.
    תגידו בבקשה, איך מתקנים את זה. ותודה רבה שוב.

    ReplyDelete
  9. !תודה רבה
    אצטרף למי שכבר ציין את זה לפני שהמילון עובד על paperwhite
    כמה נחמד שיצרת פיתרון נוח וחינמי!
    יישר כח!

    ReplyDelete
    Replies
    1. תודה רבה, איל!
      העבודה לא נפסקת, רק קצת בהקפאה

      Delete
  10. איזה כיף, ממש במקרה הגעתי לאתר הזה. עובד מעולה על הקינדל
    PW2
    תודה תודה תודה

    ReplyDelete
    Replies
    1. כיף לשמוע. תודה על הפידבק! אמשיך לנסות לשפר את הכלי הזה. כשיהיה לי זמן. כלומר מתישהו באינסוף

      Delete
  11. היי אלון,
    הורדתי את המילון לקינדל,והוא נמצא כקובץ נפרד בתוך הספרייה.
    אך אני הופכת אותו למילון ראשי? כך שאני מסמנת את המילה בלחצן ימני ומופיע לי הפירוש??

    ReplyDelete
  12. Is there an English-English dictionary?

    ReplyDelete
    Replies
    1. I can produce a Babylon-based one, but the Kindle has a built-in English-English dictionary by default.

      Delete
  13. תודה רבה!

    ReplyDelete
  14. זה כלי נפלא! חבל שאי אפשר לעשות את זה מעברית לאנגלית

    ReplyDelete
    Replies
    1. תודה! אני מסכים שחבל שאי אפשר. בעקרון אפשר לבנות את קובץ המילון, אבל פונקציית חיפוש המילים האוטומטית לא עובדת בקינדל על מילים שאינן באותיות לטיניות. בלי קשר, אני מתכנן לשפר את כלי המרת המילון ולעשות אותו חזק יותר וידידותי יותר מתישהו

      Delete
  15. יש לי Paperwhite
    המילון מציג את המילים כמו שצריך רק שצריך לקרוא מהסוף להתחלה (את המילים).
    למה לא ניתן להפוך גם את סדר המילים?

    ReplyDelete
  16. אציין גם שגם במידה ומדובר רק בשורה אחת - צריך לקרוא את המילים בסדר הפוך.

    ReplyDelete
  17. יש מילון תקין גם לגירסה 4.1.1?

    ReplyDelete
    Replies
    1. לא ניסיתי על גירסה 4.1.1 כי אין לי קינדל שמריץ את הגירסה הזאת. אבל את/ה מוזמנ/ת להריץ ולעדכן אותי אם המילון עובד או לא.

      Delete
    2. הרצתי. לצערי רואים אותיות בעברית אולם הפוך. לדוגמא הלכתי --> יתכלה
      אשמח מאוד אם תוכל לתת מענה

      תודה רבה ושנה טובה

      Delete
  18. היי אלון, תודה רבה..שנים שאני מחפש מילון אנגלי עברי לקינדל.
    ידוע לך למה לא ניתן להוריד את הקבצים?
    Quota exceeded
    יותר מ24 שעות

    ReplyDelete
    Replies
    1. היי ותודה! איזה קובץ ניסית להוריד ללא הצלחה? הרגע ניסיתי והצלחתי להוריד את קובץ המילון האנגלי-עברי

      Delete
    2. אף אחד מהמילונים
      (ניסיתי את כולם)
      למרות שעכשיו כבר לא מוצגת ההודעה, פשוט מופיע דף לבן ריק.
      אם אני פותח את הקישור במצב גלישה פרטית, מופיע שוב העמוד של
      Quota exceeded

      Delete
  19. תודה רבה על הלינק האלטרנטיבי! תבורך!

    ReplyDelete
    Replies
    1. בשמחה! ותודה שהערת את תשומת לבי לעניין

      Delete
  20. שלום,
    אני מעוניין לקנות קינדל כשהמטרה העיקרית שלי היא לשפר את האנגלית על ידי שימוש במילון שפרסמת.
    האם הוא יציב מספיק בשביל שהרכישה תהיה משתלמת?
    הבעיות יישור לימין הוראיות או שניתן להסתדר איתן?
    אני ממש מעריך את העבודה שהשקעת. תודה!

    ReplyDelete
    Replies
    1. אציין שאקנה את הקינדל הבסיסי החדש שיצא לפני כמה ימים. האם בו התמיכה בעברית תהיב טובה יותר?

      Delete
  21. בקינדל אנדרואיד הואותיות מופיעות כריבועים. האם יש דרך לתקן?

    ReplyDelete
  22. Bulgarian here. :) I'll write this in English as it's the language that this blog is primarily written in.

    This is great! BGL2HTML is an awesome idea! BTW, what version of HTML does this program output exactly? It would be very useful for this to be mentioned in the README.md file of your program.

    Is it possible for the reverse to be done (not with your program, but in general, with some other program), i.e. prc2html or prc2txt? I think that it is possible, by using the open-source program Calibre. PRC2html/txt or PRC2(other-formats-here) conversion is very useful for PC users, as HTML and .txt (UTF-8-encoded) are more universal formats and one needs just a web browser for .html (and .txt) and a text editor for viewing (and editing) .txt files, without having to install additional ebook-viewing software.

    ReplyDelete
    Replies
    1. Здравей, Sah War :-)
      I appreciate the fact you wrote in English, since your English is probably better than my Bulgarian :-)

      The output HTML more XMLized content with tag prefixes (but without specifying any special namespace), and does not use standard HTML elements, but special ones, like <idx:entry>, <idx:orth>, <idx:infl>.. (to see how it's generated, see HtmlGenerator.cs, if you read C#).

      As for reversing .prc files, there is open source for the PRC structure, for example the Calibre repository on GitHub. I guess this code (written in python) can be the base for eBook conversion, which is in fact what Calibre does.

      Delete
  23. אלון, יש הרבה אנשים מאוד מאוד מרוצים מהפרוייקט שלך.

    כולנו נשמח אם תוסיף כפתור קטן בצד לתרומת כסף בPAYPAL.

    ReplyDelete
    Replies
    1. קודם כל תודה רבה! מאוד נעים ומרגש לשמוע, לא חשבתי על זה בכלל. לעצתך הוספתי בצד כפתור תרומות, לכל מי שמעוניין להחזיר קצת ולתרום. שוב תודה

      Delete
  24. Hi Alon, and many thanks for this useful project.
    I wanted to to share two observations I had when installing this:
    1. The Kindle Voyage pre-built version works nicely on my Paperwhite (with firmware 5.6.1.1).
    2. At some point, dictionaries moved from the documents/ directory to the documents/dictionaries directory, so you now need to place your dictionary there for it to be identified.

    ReplyDelete
    Replies
    1. I updated the table of pre-built with the new info, and the installation instructions (on the previous post, also added a link to them here).
      Thank you very much for the feedback, Mikos!

      Delete
  25. שלום אלון האם ניתן להוריד מילון לתרגום מילים ע"ג קובץ PDF?
    וכן האם ניתן באייפד?
    תודה!

    ReplyDelete
  26. Amazing project. תודה רבה. Is there a link to a ready Hebrew to English dictionary for kindle? That would be awsome!

    ReplyDelete
    Replies
    1. Thank you, RunningRabbi! :-)
      Unfortunately, to my tests, dictionary lookup did not work with non-Latin characters (i.e. pointing a word does not look it up in the dictionary), thus there is no Hebrew-English dictionary. It may work on newer Kindle versions, but I have not tried.

      Delete
  27. Hi,
    Great job on the project!

    Is there any progress with the word order problem?
    Have you ever tried creating the dictionary in AZW3 format?

    ReplyDelete