Bir Metni Birden Fazla Yerden Parçalamak

Merhaba, elimde diyelim şöyle bir metin var.

"1. Eski Yunancadaki ethikos sözcüğü yerine Latincedeki moralis sözcüğünü ilk kullanan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates C) Cicero D) Herakleitos E) Pittakos 2. Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates
C) Platon D) Hobbes E) Demokritos 3. Aşağıdakilerden hangisi Aristoteles’in görüşlerinden biri değildir? A) Bütün insanlar doğal olarak bilmek isterler. B) İnsan insanın kurdudur. C) Bilmek insanın en temel gereksinimidir. D) Varlığını sürdürebilmek için insan doğal olarak ilişkide olduğu var olanları bilmek zorundadır. E) Bilgi insanın bir varlık koşuludur. 4. Aşağıdakilerden hangisi bilginin ölçütünü deneyle doğrulanabilir olmada gören, bu ölçüte dayanarak felsefenin metafizikten arındırılması, dünyanın bilimsel kavranması gerektiğini savunan ve böylece felsefeyi bilimsel felsefe olarak sınırlandırmayı amaçlayan Mantıkçı Pozitivizm akımının temsilcilerinden biri değildir? A) John Locke B) Moritz Schlick C) Rudolf Carnap D) Hans Reichenbach E) Otto Neurath "

Bunu soru formatında nasıl şu şekle getirebilirim:
Örnek soru:
1.Eski Yunancadaki ethikos sözcüğü yerine Latincedeki moralis sözcüğünü ilk kullanan filozof aşağıdakilerden hangisidir?
A) Thales
B) Sokrates
C) Cicero
D) Herakleitos
E) Pittakos

bu şekilde devam edecek. Split fonksiyonu ile yapmayı denedim .Fakat birden fazla nasıl parçalayabilirim bulamadım. Mesela A B C D E noktalarına gelince bir satır atlamak istedim. Fakat split fonksiyonunu kullanınca liste olarak döndüğünden 2. kez tekrar kullanamıyorum.

bilgiler = bilgiler.split("1." and "2.")
bilgiler = bilgiler.split("1.","2.")
bilgiler = bilgiler.split("1.") and bilgiler.split("2.")

gibi aklıma gelen şekillerde denedim fakat birden fazla kullanımı bulamadım. İnternette de araştırdım aynı şekilde. Bunu nasıl halledebiliriz? Veya istediğim olay için daha mantıklı bir çözüm varsa yardımlarınızı bekliyorum.

Edit = Bununla uğraşmak yerine aslında elle düzenlemek daha kolay olabilir ama elimizde 100lerce bu formatta soru olduğunu düşünelim ve amaç öğrenmek elbette :grin:

import re
from pprint import pprint as pp

>>> metin = """1. Eski Yunancadaki ethikos sözcüğü yerine Latincedeki moralis sözcüğünü ilk kullanan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates C) Cicero D) Herakleitos E) Pittakos 2. Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates
C) Platon D) Hobbes E) Demokritos 3. Aşağıdakilerden hangisi Aristoteles’in görüşlerinden biri değildir? A) Bütün insanlar doğal olarak bilmek isterler. B) İnsan insanın kurdudur. C) Bilmek insanın en temel gereksinimidir. D) Varlığını sürdürebilmek için insan doğal olarak ilişkide olduğu var olanları bilmek zorundadır. E) Bilgi insanın bir varlık koşuludur. 4. Aşağıdakilerden hangisi bilginin ölçütünü deneyle doğrulanabilir olmada gören, bu ölçüte dayanarak felsefenin metafizikten arındırılması, dünyanın bilimsel kavranması gerektiğini savunan ve böylece felsefeyi bilimsel felsefe olarak sınırlandırmayı amaçlayan Mantıkçı Pozitivizm akımının temsilcilerinden biri değildir? A) John Locke B) Moritz Schlick C) Rudolf Carnap D) Hans Reichenbach E) Otto Neurath """

>>> sorular = re.split(r"\d+\.", metin)
>>> pp(sorular)
['',
 ' Eski Yunancadaki ethikos sözcüğü yerine Latincedeki moralis sözcüğünü ilk '
 'kullanan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates C) Cicero '
 'D) Herakleitos E) Pittakos ',
 ' Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma '
 'yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını '
 'gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine '
 'katkıda bulunan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates\n'
 'C) Platon D) Hobbes E) Demokritos ',
 ' Aşağıdakilerden hangisi Aristoteles’in görüşlerinden biri değildir? A) '
 'Bütün insanlar doğal olarak bilmek isterler. B) İnsan insanın kurdudur. C) '
 'Bilmek insanın en temel gereksinimidir. D) Varlığını sürdürebilmek için '
 'insan doğal olarak ilişkide olduğu var olanları bilmek zorundadır. E) Bilgi '
 'insanın bir varlık koşuludur. ',
 ' Aşağıdakilerden hangisi bilginin ölçütünü deneyle doğrulanabilir olmada '
 'gören, bu ölçüte dayanarak felsefenin metafizikten arındırılması, dünyanın '
 'bilimsel kavranması gerektiğini savunan ve böylece felsefeyi bilimsel '
 'felsefe olarak sınırlandırmayı amaçlayan Mantıkçı Pozitivizm akımının '
 'temsilcilerinden biri değildir? A) John Locke B) Moritz Schlick C) Rudolf '
 'Carnap D) Hans Reichenbach E) Otto Neurath ']

>>> sorular = sorular[1:]
>>> SORU_NO = 1
>>> soru = sorular[SORU_NO]
>>> pp(soru)
(' Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma '
 'yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını '
 'gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine '
 'katkıda bulunan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates\n'
 'C) Platon D) Hobbes E) Demokritos ')

>>> mo = re.search(r"\s*A\)\s*", soru)
>>> mo
<re.Match object; span=(274, 278), match=' A) '>

>>> mo.start()
274

>>> soru[:mo.start()]
' Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir?'

>>> sorunun_kendisi, secenekler = soru[:mo.start()].strip(), soru[mo.start():].strip()
>>> sorunun_kendisi
'Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir?'
>>> secenekler
'A) Thales B) Sokrates\nC) Platon D) Hobbes E) Demokritos'


>>> bosluksuz_secenekler = re.sub(r"\s+", "", secenekler)
>>> bosluksuz_secenekler
'A)ThalesB)SokratesC)PlatonD)HobbesE)Demokritos'

>>> seceneklerin_degerleri = re.split(r"[A-E]\)", bosluksuz_secenekler)[1:]
>>> seceneklerin_degerleri
['Thales', 'Sokrates', 'Platon', 'Hobbes', 'Demokritos']

>>> secenek_baslari = "ABCDE"

>>> secenek_kismi = "\n".join(harf+") "+secenek for harf, secenek in zip(secenek_baslari, seceneklerin_degerleri))
>>> secenek_kismi
'A) Thales\nB) Sokrates\nC) Platon\nD) Hobbes\nE) Demokritos'

>>> sorunun_kendisi
'Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir?'

>>> print(f"{SORU_NO+1}.", sorunun_kendisi, "\n", secenek_kismi, sep="")
2.Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir?
A) Thales
B) Sokrates
C) Platon
D) Hobbes
E) Demokritos
>>>

Regex kullandık ve bir tane soru için böyle; yazdırma/inceleme kısımlarını çıkarıp bi’ for döndürürseniz hepsi için elde edersiniz. Sonuçları (i.e. sorunun_kendisi, secenek_kismi) nasıl saklamak istediğiniz de size bağlı tabii.

2 Beğeni

Uvv. Bu benim için biraz karışık oldu .Teşekkürler

Benim de aklima

(
(\d+)\. (.*?)
A\) (.*?)
B\) (.*?)
C\) (.*?)
D\) (.*?)
E\) (.*?)
)*

gibi bir regex geldi ama bu kadar komplikelestikten sonra regex’in imaen yapacagini elle yapmak daha mi iyi olur diye dusunmuyor da degilim, ozellikle sorularin formati bu kadar duzenli degilse.

Elle yapani da tek bir fonksiyon etrafinda tasarlardim:

Verilen metindeki ilk soruyu cevaplariyla birlikte cikartip, bunlari ve kalan metni donduren fonksiyon.

Yani:

def hede(metin):
    ...
    return (soru, cevaplar, kalan_metin)

Soyle bir parametre verdigimizde:

"1. Eski Yunancadaki ethikos sözcüğü yerine Latincedeki moralis sözcüğünü ilk kullanan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates C) Cicero D) Herakleitos E) Pittakos 2. Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates C) Platon D) Hobbes E) Demokritos 3. Aşağıdakilerden "

Sunlari donduruyor:

  1. Eski Yunancadaki ethikos sözcüğü yerine Latincedeki moralis sözcüğünü ilk kullanan filozof aşağıdakilerden hangisidir?

A) Thales B) Sokrates C) Cicero D) Herakleitos E) Pittakos

  1. Yaşama ilişkin sorunların söz konusu olduğu durumlarda bildiğini sanma yanılgısı karşısında insanları uyaran, doğru düşünme ve soru sorma yollarını gösteren, felsefenin bu yönde sorgulayıcı bir etkinlik olarak gelişmesine katkıda bulunan filozof aşağıdakilerden hangisidir? A) Thales B) Sokrates C) Platon D) Hobbes E) Demokritos 3. Aşağıdakilerden "

Ilk 2’leri toplayip 3.'leri kendisine paslayarak butun sorulari cikartabiliyoruz.

3 Beğeni

Bu benim için daha basit oldu teşekkür ederim.