Как пакетно удалить иностранный язык в субтитрах - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть такой пример:

2
00:01:32,288 --> 00:01:33,208
¬O¥L­Ì¶Ü¡H
How are you?

3
00:01:36,768 --> 00:01:39,648
€Ñ°Ú¡A¥L­Ì¥ŽºâŽN³o»ò°µ¶Ü¡H
âŽN³o»ò°µ¶Ü¡H
I am fine
And you ?

-------------------- Вот мое решение, но оно неполное

#!/usr/bin/perl -w
$lineIndex = 0;
while($line=<>){
    $lineIndex++;   #line index start from 1
    $content{$lineIndex}=$line;  #copy to content
    for($i = 0; $i < length ($line); $i++){
        $char = substr $line,$i,1;
        if($char =~ /\W/){
            #print $char;
            $count{$lineIndex}++; #how many special char this line
        }
    }
}
# if line contains more than 14 special char,then skip
print "\n";
for $i (keys %count){
    if($count{$i} > 14){       #<----------------see here
        delete $content{$i};#delete from content
    }
}

for $j (sort keys %content){ #output
    print $content{$j};
}

Мое решение имеет следующую проблему: ���O�J�b� յ ۺ�� X - несоответствие, потому что его длина <= 14, если изменить порог на небольшое число, например, 6 строк, таких как 00:01: 33,208 будут сопоставлены, поэтому удалите из содержимого </p>

Есть ли хороший способ проверить char в utf-8?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Вот гораздо более простое решение:

while($line = <>) {
    print $line unless $line =~ /[^\x00-\x7e]/;
}

Набор символов [\x00-\x7e] охватывает все основные символы ASCII (включая управляющие символы).

0 голосов
/ 11 ноября 2011
#!/usr/bin/perl -w
$lineIndex = 0;
$flag = 1;
while($line=<>){
    $line = join('',$line);
    $lineIndex++;  
    if($line =~ /\d\d:\d\d:\d\d,\d\d\d/){
    print $line;
    next;
    }
    for($i = 0; $i < length ($line); $i++){
        $char = substr $line,$i,1;
        if($char !~ /[\w ,.;!?'\-\r\n]/){
            $flag = 0;
        last;
        }else{
        $flag = 1;
        }
    }
    if($flag == 1){
       print $line;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...