Hanya mencocokkan angka yang datang dalam urutan numerik

1

Saya memiliki angka di [.] Yang menunjukkan nomor halaman dari dokumen cetakan asli yang saya transkrip. Namun, dokumen tersebut juga berisi nomor lain dalam [.] Yang tidak sesuai dengan nomor halaman.

Sebagai contoh:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Jangan diam   Lektus. Sed sit amet ipsum mauris. Maecenas membuat persetujuan ligula ac quam   viverra nec consectetur ante hendrerit. Donec et mollis dolor.   Sangat menyenangkan dan sangat mudah untuk membuat Anda lebih baik. Nam   tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut   libero sed arcu vehicula ultricies non tortor. Lorem ipsum dolor duduk   amet, consipetur adipiscing [267] elit. Aenean ut gravida lorem. Ut turpis   Ini adalah cara terbaik, adipiscing id dolor. Puctoresque auctor   nisi id magna konsekuensi sagittis. Curabitur dapibus enim sit amet elit   pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero di urna   ultrices accumsan. Jangan pernah melakukan kesalahan. Jangan lupa coba   pulvinar di malesuada arcu rhoncus. Dengan sosious natoque penatibus et   Magis dis parturient montes, nascetur ridiculus mus. Dalam rutrum   ultricies akumum. Mauris vitae nisi at sem facilisis semper ac in   Est.

Vivamus fermentum semper porta. Tidak, hanya diam, adipiscing ut   tristique vitae, sagittis vel odio. Maecenas convallis ullamcorper   ultricies. Curabitur ornare, ligula semper consectetur sagittis, nisi   diam iaculis velit, id [1] fringilla sem nunc vel mi. Nam diktum, odio nec   dengan volume tinggi, tanpa placerat erat, non tristique elit urna et   turpis. Dengan cepat, klik pada "amand fermentum et, tincidunt et."   orci. Fusce eve orci a orci congue vestibulum. Ut dolor diam,   dengan elemen lain, seperti portiritor atau elit. Curabitur venenatis   pulvinar tellus gravida ornare. Sed et erat faucibus nunc euismod   ultricies ut id justo. Nullam cursus suscipit nisi, dan ultrices justo   sodales nec. Lengkapi venenatis facilisis lectus ac semper. Aliquam di   massa ipsum. Quisque bibendum purus [2] convallis nulla ultrices   ultricies. Nullam aliku, mi eu aliku, tincidunt, purus velit   laoreet tortor, viverra pretium nisi quam vitae mi. Fusce vel volutpat   elit. Nam sagittis nisi dui.

Suspendisse lectus leo, consectetur di tempor sit amet, placerat quis   Neque. Etiam luctus porttitor [1] lorem, dan suscipit est rutrum non.   Curabitur lobortis nisl a enim congue semper. Ultriene komodo Aenean   imperdiet. [3] Vestibulum dan just sapi vel venenatis tincidunt.   Phasellus bahkan lupa duduk di atas ipsum dapibus condimentum vitae quis   Lektus. Semua dalam massa di turpis dapibus convallis. Elit terpuji   lacus, vestibulum di malesuada et, ornare et est. Ut augue nunc,   Tidak ada yang salah, tidak ada tambahan orci. Mauris dan placerat   justo. Mauris dalam ultricies enim. Tidak ada balasan untuk nulla   ultrices egestas quis ut quam. Donec sollicitudin lectus a mauris   pulvinar id aliquam urna cursus. Baca lebih lanjut tentang ini, atau elementum   mi Phasellus non ullamcorper urna. [24]

Kelas yang terkait dengan organisasi ini tersedia untuk setiap konferensi,   per himenaeos inceptos. Dalam euismod ultrices facilisis. Vestibulum   porta sapien adipiscing augue congue id pretium lectus molestie. Proin   quis dictum nisl. Muat dari id sapi, dengan vestibulum sem. Duis   elemen rutrum mauris sed convallis. Lihat di luar magna mi.   Aenean tristique hendrerit magna, [5] ac facilisis nulla hendrerit ut. Sed   sodales non tortor sam auctor elementum. Donec hendrerit nunc eget   elit pharetra pulvinar. Suspendisse id tempus tortor. Aenean luctus,   elit komodo laoreetomodo, justo nisi konsekuensiat massa, sed   vulputate quam urna quis eros. Donec vel.

Saya ingin mengganti secara berurutan semua [.] Itu adalah nomor halaman dengan, di TeX, \marginpar{[.]}, tetapi abaikan angka yang tidak berurutan.

Jadi saya ingin sed atau emacs atau utilitas lain yang serupa dengan, untuk contoh di atas, apa yang saya buat tebal di sini:

[267] [1] [2] [1] [3] [24] [5] ...

Jadi, saya hanya ingin mencocokkan apa yang ada dalam urutan angka.

Bagaimana saya bisa melakukan ini?

Geremia
sumber
1
Untuk memperjelas, [24] datang dalam urutan numerik setelah [3], tetapi tujuannya bukan untuk mencocokkan [24] tapi untuk mencocokkan [5], Yang juga datang setelah [3] dan juga tidak segera setelahnya [3]? Apa perbedaan yang bisa ditoleransi untuk pertandingan? Jika selisih 2 adalah OK, apakah selisih 3 juga OK?
Simon
@Simon: Perbedaan apa pun ≥2 harus ditolak, meskipun alangkah baiknya untuk dapat secara eksplisit menentukan ambang seperti itu juga.
Geremia
saya berpikir awk bisa melakukan apa yang saya cari.
Geremia

Jawaban:

2

awk pasti bisa melakukan ini. Misalnya skrip subpar.awk:

BEGIN   { 
    maxgap = ARGV[1]
    ARGV[1] = "-"
    count = 0 
    }

{   i = count + 1
    while (i <= count+maxgap) {
        n = sub("\\[" i "\\]","\\marginpar{[" i++ "]}")
        count += n
        }
    print
    }

... dapat memproses teks contoh sebagai awk -f subpar.awk 2 <lorem.txt, dimana parameternya 2 adalah perbedaan maksimum yang diijinkan dalam urutan. sub() mengembalikan jumlah penggantian yang dibuat (0 atau 1) jadi count hanya bertambah jika dilakukan substitusi. Kode ini berkaitan dengan kasus di mana ada lebih dari satu substitusi yang harus dilakukan pada suatu baris.

Simon
sumber
Satu-satunya hal adalah saya harus membuat maxgap sangat besar untuk beberapa alasan ...
Geremia
Untuk test case, maxgap = 2 cukup. Satu-satunya alasan untuk membuatnya lebih besar adalah jika ada kesenjangan asli yang jauh lebih besar dalam urutannya, yang tampaknya tidak mungkin dalam konteksnya. Seberapa besar Anda harus membuatnya dan bagaimana urutan angka yang dikurung dalam kasus itu?
Simon
Saya berlari persis awk -f subpar.awk 2 <lorem.txt, tetapi karena alasan tertentu hanya cocok dengan selusin pertama dan tidak cocok dengan yang lainnya. Saya harus meningkatkannya menjadi sekitar 23 sebelum cocok dengan segalanya, sampai akhir.
Geremia
Saya sarankan memasukkan kode berikut dalam satu baris setelahnya while (i <= count+maxgap) {: print "Searching for [" i "]", yang akan memberi tahu Anda dengan tepat nomor halaman yang dicari skrip pada saat tertentu. Kemudian Anda dapat membandingkan teks yang dicari (tetapi tidak ditemukan) dengan teks yang Anda harapkan akan ditemukan di paragraf berikut dan lihat apakah ada perbedaan.
Simon