LINUX.ORG.RU

Замена английского текста на русский перевод в субтитрах

 


0

2

Добрый день!

Есть субтитры. Формат такой:

1
00:00:00,239 --> 00:00:03,280
Like most modern PBXs Asterisk supports a 
call queuing feature.

2
00:00:03,649 --> 00:00:07,080
In this module we will explain the ins and out of call queues in Asterisk,

3
00:00:07,008 --> 00:00:10,016
we will define some related terms in an 
Asterisk specific context

4
00:00:10,016 --> 00:00:13,825
and than look at how call queues can queue 
members are configured in Asterisk.

И есть тексовый файл с переводом:

Like most modern PBXs Asterisk supports a call queuing feature.
Как и большинство современных АТС Asterisk поддерживает управление очередями вызовов функции.

In this module we will explain the ins and out of call queues in Asterisk, we will define some related terms in an Asterisk specific context and than look at how call queues can queue members are configured in Asterisk.
В этом модуле мы расскажем тонкости очередей вызовов в Asterisk, мы определим несколько терминов, связанных с звездочкой конкретном контексте и чем смотреть на то, как называть очереди очереди члены настроены на звездочки.

Как заменить английский текст на русский перевод в субтитрах? Если бы английский текст был в одну строку, то можно было бы воспользоваться SED. Но английский текст не в одну строку. Как быть?

Ответ на: комментарий от wakuwaku

нечитаемый машинный перевод можно подправить/исправить.

Собственно такой формат

анг. текст
рус. текст

думаю легче переводить, чем субтитры.

chemtech
() автор топика

some related terms in an Asterisk specific context

терминов, связанных с звездочкой конкретном контексте

than look at how call queues can queue members are configured in Asterisk.

как называть очереди очереди члены настроены на звездочки.

Ох, лол.

anonymous
()
Ответ на: комментарий от anonymous

Да, знаю, надо перечитывать/перепроверять

chemtech
() автор топика
Ответ на: комментарий от webmak

Если вы имеете ввиду, изменять время

00:00:00,239 --> 00:00:03,280
На какое-то другое, то это время (позиции) надо где-то узнать.

chemtech
() автор топика

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

Deleted
()

звездочки

члены настроены на звездочки

зопейсал в юмор. бгг

mumpster ★★★★★
()
Ответ на: комментарий от Deleted

perl конечно будет по итогу проще

сед с оком также могут. но надо мурзилку читать - с ходу не соображу...((

mumpster ★★★★★
()
Ответ на: комментарий от Deleted

Субтитры удобны тем, что они короткие, выводимые большим шрифтом занимают одну две строчки. А если 2, 3, 4 вывести разом (как в переводе), будет на пол экрана. Это уже будут титры, а не на субтитры :-)

mky ★★★★★
()

С учетом того что строки разбиваются - только руками или криво по словам\длине резать. А с учетом качества - забей сабы в гуглтранслит, хуже не будет.

Как вариант добавь русский под все английские при совпадении и за 5 минут поправь руками, заодно сделаешь перевод более читабельным.

KillTheCat ★★★★★
()
Ответ на: комментарий от Deleted

КМК, задача разделения переведённых строк на подстроки, соответствующие оригиналам, конечно, относится к машинному обучению, но ИИ - это преувеличение.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

На самом деле проще. Склеиваешь строки из блоков пока не будет соответствия очередной строке с переводом, затем русскую строчку разбиваешь на примерно равные куски и кладёшь обратно в блоки. Мелкие косяки появятся, но на фоне членов звёздочек заметны не будут.

Deleted
()
Ответ на: комментарий от Deleted

Да, перевод не по блокам. И вот эта фраза у меня какое-то сомнение вызвает:

how call queues can queue members are configured in Asterisk.

Почему-то мне кажется, что вместо ″can″ должно быть ″and″. И если это действительно так, и исходные сабы были оцифрованы из видеопотока, то без ИИ вменяемый русский перевод однозначно не получить.

mky ★★★★★
()
Ответ на: комментарий от Deleted

Написал два цикла, которые читают построчно два файла Файл srt:

one two
three
Файл txt:
one two three
один два три
Скрипт на питоне:
#!/usr/bin/env python3

for line in open("srt"):
    print(line.strip())
    srt=line.strip()


for line in open("txt"):
    print(line.strip())
    txt=line.strip()

Но как сделать сравнение входит ли srt в txt? Ведь переменные srt и txt после цикла будут такие, какие последние строки. Можно сделать цикл в цикле, но не знаю, то что нужно или есть другой способ.

chemtech
() автор топика
Ответ на: комментарий от Deleted

Вот скрипт проверят вхождение строк.

Файл srt:

one two
three
Файл txt:
one two three
один два три

#!/usr/bin/env python3

for line in open("srt"):
    srt=line.strip()
    for line in open("txt"):
        txt=line.strip()
        if srt in txt:
            print(srt)

А как сделать замену английского блока на русский?

chemtech
() автор топика
Ответ на: комментарий от chemtech

1 Ищешь начало блока. Они у тебя пронумерованы даже.
2 Читаешь все строки из блока и склеиваешь в одну.
3 Проверяешь, совпадает ли полученная строка с строкой оригинала.
4. Если нет - сохраняешь блок в памяти && jmp 1.
5. Если строка совпала, разбиваешь строку перевода на количество сохранённых блоков, записываешь по куску в каждый и сбрасываешь в результирующий файл.
6. Если исходный файл не кончился, то jmp1.

В п 3 будут проблемы с пробелами. Чтобы не возиться, сравнивай вообще без них.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

До вашего сообщения переписал немного скрипт. Проверял количественное отношение строк из «srt» к «txt»

#!/usr/bin/env python3

for line in open("srt"):
    srt=line.strip()
    print(len(srt), "- длина строки в первом цикле:", srt)
    for line in open("txt"):
        txt=line.strip()
        print(len(txt), "- длина строки во втором цикле:", txt)
        divide_srt_by_txt=len(srt)/len(txt)
        print("- Отношение строки в ", srt, "к", txt, ":", divide_srt_by_txt)
        print(divide_srt_by_txt)
        if srt in txt:
            print(srt)
            print(len(srt), "- длина строки в проверке:", srt)

Вот что выдает:

7 - длина строки в первом цикле: one two
13 - длина строки во втором цикле: one two three
- Отношение строки в  one two к one two three : 0.5384615384615384
0.5384615384615384
one two
7 - длина строки в проверке: one two
12 - длина строки во втором цикле: один два три
- Отношение строки в  one two к один два три : 0.5833333333333334
0.5833333333333334
5 - длина строки в первом цикле: three
13 - длина строки во втором цикле: one two three
- Отношение строки в  three к one two three : 0.38461538461538464
0.38461538461538464
three
5 - длина строки в проверке: three
12 - длина строки во втором цикле: один два три
- Отношение строки в  three к один два три : 0.4166666666666667
0.4166666666666667
Подумал умножать «Отношение строки» к длине русской строки, и обрезать ее на последнем знаке

В файле «SRT» состоит из нескольких строк. Что вы имеете ввиду под началом блока? Первую строку? Или первый знак первой строки? Только как узнать длину русской строки внутри цикла? Ведь len(txt) меняется при каждом цикле.

Может сделать отдельный файл с английской строкой и русской строкой? тогда будут известны эти строки, их количественное отношение друг к другу.

chemtech
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.