Saya punya file teks ini:
714
01:11:22,267 --> 01:11:27,731
Auch wenn noch viele Generationen auf einen Wechsel hoffen,
Even if it takes many generations hoping for a change,
715
01:11:27,732 --> 01:11:31,920
werde ich mein Bestes geben
und hoffe, dass andere das gleiche tun.
I'm giving mine, I'm doing my best
hoping the other will do the same
716
01:11:31,921 --> 01:11:36,278
Wir haben eine harte Arbeit vor uns,
um den Lauf der Dinge zu ändern.
it's going to be hard work
for things to turn around.
717
01:11:36,879 --> 01:11:42,881
Wenn man die Zentren künstlicher Besamung,
die Zuchtlaboratorien und die modernen Kuhställe besichtigt,
When visiting artificial insemination centers,
the selection center, modern stables,
...
dan ingin menguraikannya sehingga hanya baris non-bahasa Inggris yang tetap
apakah ini mungkin?
Jawaban:
Ada cara yang sulit dan jauh lebih mudah. Cara yang sulit adalah dengan menggunakan penguraian bahasa alami untuk memberikan kemungkinan bahwa suatu baris diberikan dalam bahasa Inggris dan membuang garis-garis tersebut.
Cara yang lebih mudah adalah dengan mengambil daftar kata - kata berhenti berbahasa Inggris dan menghapus baris yang mengandung elemen dari daftar itu. Jika Anda ingin mengurangi kemungkinan salah mengkategorikan suatu garis, Anda juga bisa mencari keberadaan kata-kata berhenti berbahasa Jerman di baris-baris yang tidak Anda tolak untuk memastikan bahwa itu adalah bahasa Jerman.
Berikut ini skrip yang sangat cepat dan kotor untuk menggunakan daftar kata berhenti yang ditautkan untuk melakukan pemfilteran:
dan hasilnya:
Versi yang sedikit lebih lengkap harus mengabaikan berbagai tanda baca seperti
,.
tetapi bukan tanda kutip bahasa Inggris'
ketika dalam sebuah kata. Bahkan akurasi yang lebih besar dapat diperoleh dengan mencari«ßü
titik-titik kode yang tidak pernah terjadi dalam bahasa Inggris (misalnya ) tetapi itu dibiarkan sebagai latihan bagi pembaca.sumber
Pada sampel Anda, ini akan berhasil:
Detail
RS=
. Mengatur pemisah rekaman . Nilai kosong adalah kasus khusus yang berarti catatan adalah paragraf (urutan garis yang dibatasi oleh baris kosong).-F '\n'
: mengatur pemisah bidang ( bidang dalam setiap catatan adalah garis).OFS='\n'
: mengatur pemisah bidang keluaran.Untuk setiap catatan (paragraf):
NF=1+NF/2
(atauNF=2
(2 baris pertama)+ (NF-2)/2
(setengah dari sisa baris)): ubah jumlah kolom untuk mengecualikan yang berbahasa Inggris.printf "%s", $0 RT
: mencetak catatan diikuti oleh terminator catatan (untuk mengembalikan jumlah jarak yang sama antara paragraf). Untuk melihat apa yang dilakukan kode di atas, sangat membantu jika Anda menambahkan beberapa pernyataan cetak ke dalam campuran. Sesuatu seperti ini:Itu mengasumsikan ujung garis Unix. Jika file dalam format MSDOS seperti yang biasa terjadi pada file subtitle, Anda harus memprosesnya dengan
d2u
ataudos2unix
.sumber
NF-=NF/2-1
bit. Apakah Anda menghitung katakanNF=4
untuk catatan pertama, 714. Jadi, Anda mendapatkan nilaiNF=4
danNF/2-1=1
, lalu mengurangi1
dariNF
meninggalkan Anda dengan3
? Kemudian mencetak3
"bidang" pertama dari catatan, lalu menjatuhkan baris ke-4?Bagian penting dari jenis pendekatan ini adalah memiliki akses ke database kata-kata bahasa Inggris yang baik. Ada file ini di sistem saya,
/usr/share/dict/words
yang memiliki banyak kata, tetapi sumber lain dapat digunakan sebagai gantinya.Pendekatan
Pendekatan umum saya adalah menggunakan
grep
seperti:Di mana contoh output Anda berada
sample.txt
.Dalam pengujian terbatas saya, ukuran
words
kamus tampaknyagrep
macet. Versi saya memiliki 400k + baris di dalamnya. Jadi saya mulai melakukan sesuatu seperti ini untuk memecahnya sedikit:Pengerjaan sampel (10k)
Jalankan file Anda dengan menggunakan kata 10k pertama dari "kamus".
CATATAN: Pendekatan ini berjalan dalam ~ 1,5 detik, di laptop i5 saya.
Tampaknya menjadi pendekatan yang layak. Ketika saya menabraknya hingga 100k baris itu mulai memakan waktu lama, saya membatalkannya sebelum selesai, sehingga Anda dapat memecah
words
kamus menjadi beberapa file.CATATAN: Ketika saya memundurkannya ke garis 50k butuh waktu 32 detik.
Menyelam lebih dalam (garis 50k)
Ketika saya mulai memperluas kamus hingga 50k saya mengalami masalah yang saya takuti, tumpang tindih antara bahasa.
Menganalisis masalah
Satu hal yang baik dengan pendekatan ini adalah Anda dapat menghapus
-v
dan melihat di mana tumpang tindihnya adalah:Kata
auf
ini tampaknya dalam kedua bahasa ... paling tidak itu ada dalamwords
file saya , jadi ini mungkin sedikit pendekatan coba-coba untuk memperbaiki daftar kata yang diperlukan.CATATAN: Saya tahu itu adalah kata
auf
karenagrep
diwarnai merah, yang tidak muncul dalam output di atas karena sifat SE SE yang terbatas).sumber
grep -wf ...
dilakukannya. Dengan pasokan kata yang lebih baik, pendekatan ini akan menjadi lebih langsung. Solusi lain (Stephane) tergantung pada data yang terstruktur dan tidak melihatnya dengan cara kontekstual, pendekatan msw tampaknya memiliki kaki yang lebih baik bagi saya.Ini terlihat seperti
.srt
file. Jika ya, dan jika jumlah baris bahasa Inggris per subtitle selalu sama dengan jumlah baris bahasa Jerman, maka Anda dapat menggunakan:Di mana
old.srt
dannew.srt
file input dan output pilihan Anda.sumber