Home > Enterprise >  How can I split a text using upper cases follow (blabla) - in R
How can I split a text using upper cases follow (blabla) - in R

Time:07-22

I have text data that include parliamentary speeches like this:

 df <- "MEHMET ALİ ÇELEBİ (İzmir) – Teşekkürler Sayın Başkan.

26-30 Haziran Özel Güvenlik Görevlileri Haftası’ndayız, kutluyorum.

Bugün ülkemizde 350 bini aşkın özel güvenlik görevlimiz esnek ve güvencesiz çalışmanın en ağır koşullarına muhataptır.

Bir: Maaş, özlük hakları, çalışma şartları ve risk tazminatları iyileştirilmelidir. İki: Görev tanımı dışında çalıştırılmaları engellenmelidir. Üç: Yıpranma hakkı, ödüllendirme, şehit ve gazilik talepleri karşılanmalıdır. Dört: Onlara yönelik yeni bir işçi sağlığı ve iş güvenliği düzenlemesi yapılmalıdır. Beş: Adli vakalarda avukat desteği verilmelidir. Altı: Taşeronda değil, çalıştıkları kurum bünyesinde istihdam edilmelidirler. Yedi: Belediye şirketlerine geçen özel güvenliklerimizin iş kollarının belirsizliği giderilmelidir. “Özel güvenlik her yerde, görmezden gelme!” diyorum, yüce Meclisi saygıyla selamlıyorum. 

BAŞKAN – Sayın Sazak… 

METİN NURULLAH SAZAK (Eskişehir) – Teşekkürler Başkanım.

Türk sinemasının değerli ismi, Eskişehirli hemşehrim Cüneyt Arkın’a Allah’tan rahmet; ailesine, sevenlerine sabırlar dilerim. Türk sinemasının başı sağ olsun. Cüneyt Arkın, oynamış olduğu filmlerde, Türk tarihinin önemli kahramanlarını gençliğe sevdirmiş; sadece sinemada değil, yaşadığı hayatta da duruşuyla takdir toplamıştır. Ruhu şad, mekânı cennet olsun. 

BAŞKAN – Sayın Aycan…

SEFER AYCAN (Kahramanmaraş) – Sayın Başkan, şehirlerimiz büyümektedir; bu nedenle de yeni imar planlarına, imar bölgelerine ihtiyaç doğmaktadır.

Sağlıklı şehirleşme, imar planı doğrultusunda alt yapısı tamamlanarak yeni imar bölgeleri oluşturmaktan geçmektedir; kentsel dönüşüm, sağlıklı şehirleşme ve güvenli bina için de buna ihtiyaç vardır. Şehrim Kahramanmaraş’ın merkezi de konut ihtiyacı açısından tıkanmıştır, yeni imar planına ihtiyacı vardır. Güneyi tarım arazileridir; buralara zarar vermemek, imara kapamak gerekmektedir.

Diğer taraftan, eski mahallelerde kentsel dönüşüm zorunlu hâle gelmiştir; bu nedenle, eski mahallelerde, özellikle Dulkadiroğlu bölgesinde kentsel dönüşümün teşvik edilmesi, kart sayısının 2’den 4’e hatta 6 veya 8 katlara çıkarılması gerekmektedir. Kahramanmaraş’ta kentsel dönüşüm teşvik edilmelidir; böylece, yeniden şehirleşme sağlanmalıdır; böylece, şehrin merkezinde konut ihtiyacı karşılanmış olacaktır.

Saygılarımla."

I want to create a separate data frame for every speaker using strsplit function and end up like this:

#      [Speaker]                            [text]                           
# [1,] "MEHMET ALİ ÇELEBİ"                  "Teşekkürler Sayın Başkan. 26-30 Haziran..."
# [2,] "METİN NURULLAH SAZAK"               "Teşekkürler Başkanım. Türk sinemasının..."   
# [3,] "SEFER AYCAN".                       "Sayın Başkan, şehirlerimiz büyümektedir..."

I have tried the code below but could not get the result. I have list of speakers if regular expressions not enough.

pat <- r"{(?>\p{Lu} ?\s?) \(?\p{Lu} \)?\K(:)|(?<!\w)(\s)(?=\p{Lu}{2,})}"
tmp <- trimws(el(strsplit(df, pat, perl=TRUE)))[-1]
res <- matrix(tmp, ncol=2, byrow=TRUE)
res

Could you help me? I am kind of new in R. Thanks in advance,

CodePudding user response:

A workflow can be to look for the (location) - pattern and insert a placeholder in order to split afterwards

Example:

df <- tibble(text = c("MEHMET ALİ ÇELEBİ (İzmir) – Teşekkürler Sayın Başkan. 26-30 Haziran Özel Güvenlik Görevlileri Haftası’ndayız, kutluyorum. Bugün ülkemizde 350 bini aşkın özel güvenlik görevlimiz esnek ve güvencesiz çalışmanın en ağır koşullarına muhataptır. Bir: Maaş, özlük hakları, çalışma şartları ve risk tazminatları iyileştirilmelidir. İki: Görev tanımı dışında çalıştırılmaları engellenmelidir. Üç: Yıpranma hakkı, ödüllendirme, şehit ve gazilik talepleri karşılanmalıdır. Dört: Onlara yönelik yeni bir işçi sağlığı ve iş güvenliği düzenlemesi yapılmalıdır. Beş: Adli vakalarda avukat desteği verilmelidir. Altı: Taşeronda değil, çalıştıkları kurum bünyesinde istihdam edilmelidirler. Yedi: Belediye şirketlerine geçen özel güvenliklerimizin iş kollarının belirsizliği giderilmelidir. “Özel güvenlik her yerde, görmezden gelme!” diyorum, yüce Meclisi saygıyla selamlıyorum.", "METİN NURULLAH SAZAK (Eskişehir) – Teşekkürler Başkanım. Türk sinemasının değerli ismi, Eskişehirli hemşehrim Cüneyt Arkın’a Allah’tan rahmet; ailesine, sevenlerine sabırlar dilerim. Türk sinemasının başı sağ olsun. Cüneyt Arkın, oynamış olduğu filmlerde, Türk tarihinin önemli kahramanlarını gençliğe sevdirmiş; sadece sinemada değil, yaşadığı hayatta da duruşuyla takdir toplamıştır. Ruhu şad, mekânı cennet olsun.","SEFER AYCAN (Kahramanmaraş) – Sayın Başkan, şehirlerimiz büyümektedir; bu nedenle de yeni imar planlarına, imar bölgelerine ihtiyaç doğmaktadır. Sağlıklı şehirleşme, imar planı doğrultusunda alt yapısı tamamlanarak yeni imar bölgeleri oluşturmaktan geçmektedir; kentsel dönüşüm, sağlıklı şehirleşme ve güvenli bina için de buna ihtiyaç vardır. Şehrim Kahramanmaraş’ın merkezi de konut ihtiyacı açısından tıkanmıştır, yeni imar planına ihtiyacı vardır. Güneyi tarım arazileridir; buralara zarar vermemek, imara kapamak gerekmektedir."))


df_with_split <- df %>% 
  mutate(text_helper = text,
         # look for (LOCATION) - and replace with SPLIT_HERE
         text_helper = str_replace(text_helper, "(?<=\\p{L}.\\)\\s–)", "SPLIT_HERE"),
         left = trimws(str_extract(text_helper, ".*(?=SPLIT_HERE)")),
         right = trimws(str_extract(text_helper, "(?<=SPLIT_HERE).*")))

df_with_split

# A tibble: 3 × 4

text

    text_helper left  right
  <chr>                                                                                                        
    <chr>       <chr> <chr>
1 MEHMET ALİ ÇELEBİ (İzmir) – Teşekkürler Sayın Başkan. 26-30 Haziran Özel Güvenlik Görevlileri Haftası’ndayız, k… MEHMET ALİ… MEHM… Teşe…
2 METİN NURULLAH SAZAK (Eskişehir) – Teşekkürler Başkanım. Türk sinemasının değerli ismi, Eskişehirli hemşehrim C… METİN NURU… METİ… Teşe…
3 SEFER AYCAN (Kahramanmaraş) – Sayın Başkan, şehirlerimiz büyümektedir; bu nedenle de yeni imar planlarına, imar… SEFER AYCA… SEFE… Sayı…

CodePudding user response:

I have found a simple way to obtain the same result by using the enter image description here

CodePudding user response:

Dataframe come from

"https://www5.tbmm.gov.tr/tutanak/donem27/yil5/ham/b10901h.htm"

Since data do not only contain the info on speeches, I cannot obtain the solutions from these codes. Sorry for the lack of info. It is my first text project.

  • Related