unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Jean-Christophe Helary <jean.christophe.helary@traduction-libre.org>
To: Emanuel Berg <moasenwood@zoho.eu>
Cc: help-gnu-emacs@gnu.org
Subject: Re: Emacs as a translator's tool
Date: Sat, 30 May 2020 12:12:08 +0900	[thread overview]
Message-ID: <F2E4E56C-7F1B-4AE7-93B6-541ACC63BDDF@traduction-libre.org> (raw)
In-Reply-To: <87o8q6ury3.fsf@ebih.ebihd>



> On May 30, 2020, at 10:33, Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
> 
> Can't we compile a list of what the commercial CATs
> offer? M Helary and Mr Abrahamsen?

x commercial → ○ professional, if you don't mind :)
OmegaT is very much a professional tool and certainly not a "commercial" one.


My 20 years of practice but otherwise not technically so very informed idea is the following:


1) CAT tools extract translatable contents from various file formats into an easy-to-handle format, and put the translated contents back into the original format. That way the translator does not have to worry *too much* about the idiosyncrasies of the original format.

→ File filters are a core part of a CAT tool *but* as was suggested in the thread it is possible to rely on an external filter that will output contents in a standard localization "intermediate" format (current "industry" standards are PO and XLIFF). Such filters provide export and import functions so that the translated files are converted back to the original format.

File filters can also accept rules for not outputting non-translatable text (the current standard is ITS)

The PO format can be handled by po4a (perl), translate-toolkit (python) and the Okapi Framework tools (java).
XLIFF has the Okapi Framework, OpenXLIFF (electron/node) and the translate-toolkit. All are top-notch pro-grade free software and in the case of Okapi and OpenXLIFF have been developed by people who have participated to the standardization process (XLIFF/TMX/SRX/ITS/TBX, etc...)

→ emacs could rely on such external filters and only specialize in one "intermediate" format. The po-mode already does that for PO files.


2) Once the text is extracted, it needs to be segmented. Basic "no" segmentation usually means paragraph based segmentation. Paragraphs are defined differently depending on the original format (1, or 2 line breaks for a text file, a block tag for XML-based formats, etc.).
Fine-grained segmentation is obtained by using a set of native language based regex that includes break rules and no-break rules. A simple example is break after a "period followed by a space" but don't break after "Mr. " for English.

→ File filters usually handle the segmentation part based on user specifications. Once the file is segmented into the intermediate format, it is not structurally trivial to "split" or "merge" segments because the tool needs to remember what will go back into the original file structure.

→ emacs could rely on the external filters to handle the segmentation.


3) The real strength of a CAT tool shows where it helps the translator handle all the resources needed in the translation. Let me list potential resources:

- Legacy translations, called "translation memories" (TM), usually in multilingual "aligned" files where a given segment has equivalents in various languages. Translated PO files are used as TMs, the XML standard is TMX.

- Glossaries, usually in a similar but simpler format, sometimes only TSV, sometimes CSV, the XML-based standard is TBX.

- Internal translations, which are produced by the translator while translating. Each translated segment adding to the project "memory".

- Dictionaries are a more global form of glossaries, usually monolingual, format varies.

- external files, either local documents, or web documents, in various formats, usually monolingual (otherwise they'd be aligned and used as TMs)

→ each resource format needs a way to be parsed, memorized, fetched, recycled efficiently during the translation


4) Usually the process is the following:

- the translator "enters" a segment
- the tool displays "matches" from the resources that relatively closely correspond to the segment contents
- the translator inserts or modifies the matches
- when no matches are produced the translator enters a translation from scratch
- the translator can add glossary items to the project glossary
- the new translation is added to the "internal" memory set
- the translator moves to the next segment


5) The matching is usually some sort of levenstein distance-based algorithm. The "tokens" that are used in the "distance" calculation are usually produced by native language based tokenizers (the Lucene tokenizers are quite popular)

The better the match, the more efficient the tool is at helping the translator recycle resources. The matching process/quality is where tools profoundly differ (OmegaT is generally considered to have excellent quality matches, sometimes better than expensive commercial tools).

Some tools propose "context" matches where the previous and next segments are also taken into account, some tools propose "subsegment" matches where even if a whole segment won't match significant subparts can, etc.

The matching process must sometimes apply to extremely big resources (like many million lines of multilingual TMs in the case of the EU legal corpora) and must thus be able to handle the data quickly regardless of the set size.


6) Goodies that are time savers include:

- history based autocompletion
- glossary/TM/dictionary based autocompletion
- MT services access
- shortcuts that auto insert predefined text chunks
- spell-checking/grammar checking
- QA checks against glossary terms, completeness/length of the translation, integrity of the format structure, numbers used, etc. (QA checks are also available as external processes in some of the solutions mentioned above, or related solutions.)


> I'll read thru this thread tomorrow (today)
> God willing but I don't understand everything, in
> particular examples would nice to get the exact
> meaning of the desired functionality...

Go ahead if you have questions.

> With examples we can also see if Emacs already can do
> it. And if not: Elisp contest :)

:)

> Some features are probably silly, we don't have to
> list or do them, or everything in the CATs, just what
> really makes sense and is useful on an every-day basis.

A lot of the heavy-duty tasks can be handled by external processes.

> When we are done, we put it in the wiki or in a pack.
> 
> We can't have that Emacs doesn't have a firm grip on
> this issue. Because translation is a very common task
> with text!
> 
> Also, let's compile a list of what Emacs already has
> to this end. It doesn't matter if some of that stuff
> already appears somewhere else, modularity is
> our friend.

:)


-- 
Jean-Christophe Helary @brandelune
http://mac4translators.blogspot.com


  reply	other threads:[~2020-05-30  3:12 UTC|newest]

Thread overview: 146+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-29  5:55 Emacs as a translator's tool Marcin Borkowski
2020-05-29  6:21 ` stardiviner
2020-05-29  6:35 ` Marcin Borkowski
2020-05-29  8:14   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29  8:29     ` Yuri Khan
2020-05-29  8:35       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29  9:59         ` tomas
2020-05-29 10:44           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29 11:34             ` tomas
2020-05-29 11:51               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29 12:02                 ` Jean-Christophe Helary
2020-05-30  1:33                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-30  3:12                     ` Jean-Christophe Helary [this message]
2020-06-05  6:43                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-05  7:35                         ` Jean-Christophe Helary
2020-06-05  7:55                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-05  8:14                             ` Jean-Christophe Helary
2020-06-05 17:32                             ` Marcin Borkowski
2020-06-05 17:47                               ` Yuri Khan
2020-06-06  8:00                                 ` Marcin Borkowski
2020-06-05 23:23                               ` Jean-Christophe Helary
2020-05-31  5:14                 ` Marcin Borkowski
2020-06-01  8:53                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-01  8:26         ` Steinar Bang
2020-06-01  8:33           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29 17:39       ` Eric Abrahamsen
2020-05-29 17:58         ` Jean-Christophe Helary
2020-05-29 18:22           ` Eric Abrahamsen
2020-05-30  3:20             ` Jean-Christophe Helary
2020-05-30  6:24               ` Eli Zaretskii
2020-05-30  6:36                 ` Jean-Christophe Helary
2020-05-30 16:46               ` Eric Abrahamsen
2020-09-17 15:16             ` Eric Abrahamsen
2020-09-17 15:36               ` Arthur Miller
2020-09-17 16:03                 ` Eric Abrahamsen
2020-09-17 18:14                   ` arthur miller
2020-09-17 18:27                     ` Eric Abrahamsen
2020-09-17 19:44                       ` arthur miller
2020-09-17 20:42                         ` Eric Abrahamsen
2020-09-18 17:36                           ` Sv: " arthur miller
2020-09-18 18:26                         ` Arthur Miller
2020-09-18 19:08                           ` Eric Abrahamsen
2020-09-18 20:02                             ` Arthur Miller
2020-09-18 20:17                               ` Eric Abrahamsen
2020-09-18 20:47                                 ` Arthur Miller
2020-09-18 21:23                                   ` tomas
2020-09-18 22:57                                     ` Arthur Miller
2020-09-19  7:32                                       ` tomas
2020-09-18 21:26                                   ` Eric Abrahamsen
2020-09-18 23:05                               ` Arthur Miller
2020-09-18 23:39                                 ` Eric Abrahamsen
2021-12-20  7:00               ` Marcin Borkowski
2021-12-20 19:31                 ` Eric Abrahamsen
2021-12-21  8:31                   ` Kevin Vigouroux via Users list for the GNU Emacs text editor
2021-12-21  8:40                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-21 17:41                     ` Eric Abrahamsen
2021-12-21 19:37                       ` Kevin Vigouroux via Users list for the GNU Emacs text editor
2021-12-21 20:22                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-22  7:14                           ` Kevin Vigouroux via Users list for the GNU Emacs text editor
2021-12-22 18:36                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-21 23:58                         ` Jean-Christophe Helary
2021-12-22  7:36                           ` Kevin Vigouroux via Users list for the GNU Emacs text editor
2021-12-22  6:46                       ` Marcin Borkowski
2021-12-22 17:50                         ` Eric Abrahamsen
2021-12-22 18:48                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-22 19:09                             ` Eric Abrahamsen
2021-12-22 19:20                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-22 19:22                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-22 20:24                                 ` Eric Abrahamsen
2021-12-23 17:57                             ` Marcin Borkowski
2021-12-23 21:59                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-28 16:22                                 ` Marcin Borkowski
2021-12-22 18:52                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-23 17:44                           ` Marcin Borkowski
2021-12-22 18:41                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29  8:41     ` Jean-Christophe Helary
2020-05-29  8:43       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29  9:28         ` Jean-Christophe Helary
2020-05-29 10:40           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-31  5:09     ` Marcin Borkowski
2020-06-01  8:51       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-04 19:47         ` Marcin Borkowski
2020-06-05  0:43           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-05  0:49             ` Jean-Christophe Helary
2020-06-05  1:08               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-05  2:58                 ` Jean-Christophe Helary
2020-06-05  3:15                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-05  4:21                     ` Jean-Christophe Helary
2020-06-05 10:46                     ` Marcin Borkowski
2020-06-05 12:11                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-05 17:19             ` Marcin Borkowski
2020-06-07 21:15               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-07 21:37                 ` Eric Abrahamsen
2020-06-07 21:55                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-07 22:24                     ` Eric Abrahamsen
2020-06-07 22:30                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-08  6:04                 ` Marcin Borkowski
2020-06-08  6:30                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-08 11:59                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-08 12:15                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-08 12:34                         ` Jean-Christophe Helary
2020-06-09 21:13                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-09 23:28                             ` Jean-Christophe Helary
2020-06-10  0:12                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10  3:21                                 ` Jean-Christophe Helary
2020-06-10  1:39                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10  3:28                                 ` Jean-Christophe Helary
2020-06-10  3:47                                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10  3:57                                     ` Jean-Christophe Helary
2020-06-10  4:13                                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10  6:19                                         ` Jean-Christophe Helary
2020-06-10 11:49                                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10 13:39                                             ` Jean-Christophe Helary
2020-06-10 15:33                                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-08 19:45                     ` Marcin Borkowski
2020-06-08 20:44                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-09 19:32                         ` Marcin Borkowski
2020-06-09 20:54                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10  2:03                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10 13:35                             ` tomas
2020-06-10 13:38                               ` tomas
2020-06-10 15:27                                 ` recentering another window (was: Re: Emacs as a translator's tool) Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10 20:56                             ` Emacs as a translator's tool Marcin Borkowski
2020-06-10 21:28                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-12 19:46                                 ` Marcin Borkowski
2020-06-12 22:02                                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-12 22:23                                     ` Marcin Borkowski
2020-06-19 13:46                                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-19 13:51                                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10 21:29                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-09 21:03                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-06-10  1:02                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29  6:39 ` MENGUAL Jean-Philippe
2020-05-29  8:22   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29  8:29   ` Marcin Borkowski
2020-05-29  6:57 ` Jean-Christophe Helary
2020-05-29  8:03   ` Jean-Christophe Helary
2020-05-29  8:30     ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29  8:26   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-29 14:28 ` Takesi Ayanokoji
2020-05-29 15:02 ` Giovanni Bono
2020-05-29 22:48   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-30  6:20     ` Giovanni Bono
2020-06-01  8:39       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-05-31  5:17   ` Marcin Borkowski
2020-05-31  6:58     ` Giovanni Bono

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=F2E4E56C-7F1B-4AE7-93B6-541ACC63BDDF@traduction-libre.org \
    --to=jean.christophe.helary@traduction-libre.org \
    --cc=help-gnu-emacs@gnu.org \
    --cc=moasenwood@zoho.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).