Японская транслитерация в Node.js и Kakasi

Я написал небольшую обертку для Kakasi.

это похоже на следующее:

Kakasi.prototype.transliterate = function (data) {
            var self = this;
            return new Promise(function (resolve, reject) {

                var args;
                args = [
                    '-i',
                    'euc',
                    '-Ha',
                    '-Ka',
                    '-Ja',
                    '-Ea',
                    '-ka',
                    '-s',
                    '-iutf8',
                    '-outf8'
                ];
                var kakasi = spawn(self._options.bin, args, {});
                console.log( "echo \""+data+"\" | " + kakasi.spawnargs.join(' ') )
                args = [
                    data
                ];
                var echo = spawn('echo', args, {});

                echo.stdout.pipe( kakasi.stdin );
                var res='';
                kakasi.stdout.on('data', function(_data) {
                    var data=new Buffer(_data,'utf-8').toString();
                    res+=data;
                });
                kakasi.stdout.on('end', function(_) {
                    return resolve(res);
                });
                kakasi.on('error', function(error) {
                    return reject(error);
                });

                if (self._options.debug) kakasi.stdout.pipe(process.stdout);

            });
        }//transliterate

Этот код в основном выполняет следующую команду

echo "退屈であくびばっかしていた毎日" | kakasi -i euc -Ha -Ka -Ja -Ea -ka -s -iutf8 -outf8

который выводит taikutsu deakubibakkashiteita mainichi Проблема в том, что в javascript отсутствуют некоторые выходные данные:

$ node transliterate.js 
echo "退屈であくびばっかしていた毎日" | kakasi -i euc -Ha -Ka -Ja -Ea -ka -s -iutf8 -outf8
----------
deakubibakkashiteita 

Входные параметры те же, но по какой-то причине (кодировка?) дочерний вывод для stdout отличается.

Код kakasi.js доступен здесь.


person loretoparisi    schedule 30.10.2017    source источник


Ответы (1)


Я думаю, что ваш загрузчик словарей вызывает эту проблему. Переворачивать словари следует следующим образом.

process.env.KANWADICTPATH = resolve('./data/kanwadict');
process.env.ITAIJIDICTPATH = resolve('./data/itaijidict');

вместо

process.env.KANWADICTPATH = resolve('./data/itaijidict');
process.env.ITAIJIDICTPATH = resolve('./data/kanwadict');
person goemon    schedule 25.02.2018
comment
привет @goemon! это было дело!!! Большое спасибо! Я обновил кодовую базу! github.com/loretoparisi/kakasi.js - person loretoparisi; 25.02.2018