Saya memiliki dua korpora paralel yang disejajarkan dengan kalimat (file teks) dengan sekitar 50 juta kata. (dari Europarl corpus -> terjemahan paralel dokumen hukum). Sekarang saya ingin mengocok kedua file, tetapi keduanya dengan cara yang sama. Saya ingin melakukan pendekatan dengan menggunakan gshuf (saya menggunakan Mac) menggunakan satu sumber acak unik.
gshuf --random-source /path/to/some/random/data file1
gshuf --random-source /path/to/some/random/data file2
Tapi saya mendapat pesan kesalahan end of file
, karena tampaknya seed acak perlu berisi semua kata yang berisi file yang akan diurutkan. Benarkah? Jika ya, bagaimana cara saya membuat benih acak yang baik untuk kebutuhan saya? Jika tidak, dengan cara apa lagi saya dapat mengacak file secara paralel? Saya berpikir tentang menempelkannya bersama, mengacak dan kemudian membelah lagi. Namun, ini tampak jelek karena saya harus terlebih dahulu menemukan pembatas yang tidak terjadi pada file.
sumber
random sources
. Untuk itupaste
, Anda dapat menggunakan sebagai pembatas beberapa char ascii rendah yang tidak mungkin terjadi pada file Anda (seperti\x02
,\x03
...).Jawaban:
Saya tidak tahu apakah ada metode yang lebih elegan tetapi ini berhasil bagi saya:
Hasil:
Tetapi file harus memiliki jumlah baris yang sama persis.
Dokumentasi GNU Coreutils juga menyediakan solusi yang bagus untuk keacakan berulang menggunakan
openssl
sebagai generator acak unggulan:Namun, pertimbangkan untuk menggunakan benih yang lebih baik daripada "42", kecuali jika Anda ingin orang lain dapat mereproduksi hasil acak "Anda" juga.
sumber
end of file
kesalahan tidak terjadi?/dev/null
karenatee
juga mencetak kestdout
. Bisa digunakan> threerandom
sebagai gantinya tetapi lebih sulit untuk skrip. Pipa yang dinamai akan menghasilkan data acak sebanyak yang diperlukan, jadi Anda tidak perlu tahu sebelumnya berapa banyak yang Anda perlukan.tee
...