Pisahkan kalimat yang diakhiri dengan nomor referensi ilmiah di r

Saya sedang mengerjakan proyek yang salah satu langkahnya adalah memisahkan teks artikel ilmiah menjadi kalimat. Untuk ini, saya menggunakan textrank yang saya pahami mencari . atau ? atau ! dll. untuk mengidentifikasi akhir kalimat tokenisasi.

Masalah yang saya hadapi adalah kalimat yang diakhiri dengan titik diikuti langsung dengan nomor referensi (yang mungkin juga ada dalam tanda kurung). Contoh di bawah ini mewakili pola yang saya identifikasi dan kumpulkan sejauh ini.


xx = c ("hello.1 World", "hello.1,2 World",  "hello.(1) world", "hello.(1,2) World", "hello.[1,2] World", "hello.[1] World")

Saya melakukan beberapa penelusuran dan sepertinya Deteksi batas kalimat adalah ilmu tersendiri yang bisa menjadi kompleks dan spesifik untuk domain.

Satu-satunya cara yang dapat saya pikirkan untuk memperbaiki masalah ini (setidaknya dalam kasus saya), adalah dengan menulis regex yang menambahkan spasi setelah titik sehingga textrank dapat mengidentifikasinya menggunakan pola biasanya.

ada saran bagaimana melakukannya dengan regex di R? Saya mencoba yang terbaik untuk mencari secara online tetapi saya tidak dapat menemukan jawaban.

Pertanyaan ini menjelaskan bagaimana cara menambahkan spasi antara huruf kecil diikuti huruf besar. Tambahkan spasi antara dua huruf dalam string di R dalam kasus saya, saya yakin saya perlu menambahkan spasi di antara huruf diikuti dengan titik dan angka/kurung.

Hasil yang saya harapkan adalah seperti:

("hello. 1 World", "hello. 1,2 World",  "hello. (1) world", "hello. (1,2) World", "hello. [1,2] World", "hello. [1] World")

Terima kasih


person Bahi8482    schedule 05.03.2021    source sumber
comment
Apakah ini akan membantu? \.(?=[[(]?\d+). Ganti setiap kecocokan dengan . yaitu titik diikuti spasi   -  person Gurmanjot Singh    schedule 05.03.2021
comment
@GurmanjotSingh terima kasih banyak. Ini bekerja. dan terima kasih telah mengirimkan link ke regex 101, dengan cara ini saya dapat memahaminya dan mengubahnya jika saya menemui variasi pola ini.   -  person Bahi8482    schedule 05.03.2021
comment
satu sedikit perubahan yang saya lakukan adalah menambahkan \D jadi saya tidak menambahkan spasi pada koma desimal. \D\.(?=[[(]?\d+) regex101.com/r/vffKdU/1   -  person Bahi8482    schedule 05.03.2021


Jawaban (1)


Untuk contoh masukan persis yang Anda berikan kepada kami, Anda dapat melakukan penelusuran regex dengan pola berikut:

\.(?=\d+|\(\d+(?:,\d+)*\)|\[\d+(?:,\d+)*\])

lalu ganti dengan titik diikuti spasi tunggal. Contoh skrip:

xx <- c("hello.1 World", "hello.1,2 World", "hello.(1) world", "hello.(1,2) World",
        "hello.[1,2] World", "hello.[1] World")
output <- gsub("\\.(?=\\d+|\\(\\d+(?:,\\d+)*\\)|\\[\\d+(?:,\\d+)*\\])", ". ", xx, perl=TRUE)
output

[1] "hello. 1 World"     "hello. 1,2 World"   "hello. (1) world"
[4] "hello. (1,2) World" "hello. [1,2] World" "hello. [1] World"
person Tim Biegeleisen    schedule 05.03.2021