Kezdőoldal » Számítástechnika » Programozás » Pythonnal kapcsolatos kérdés.V...

Pythonnal kapcsolatos kérdés.Van ennek más módja is?

Figyelt kérdés

Egy scriptet kellene írni, ami megszámolja hány mondat van a szövegben. Én így oldottam meg félig-meddig:


str="Ez egy mondat.Ez egy egy másik mondat.Ez is egy mondat.Ez mondat?"

str_count1=str.count(".")

str_count2=str.count("?")

print("A mondatok száma:",str_count1+str_count2)


Ezzel annyi a gond, hogy ha pl a szövegben valahol 2 vagy több pont/kérdőjel van, azt is mondatnak veszi. Hogyan tudnám ezt esetleg másképp megírni vagy kipótolni?

Köszönöm a válaszokat.



2020. dec. 27. 14:26
 1/5 anonim ***** válasza:
Pl. számold azokat az eseteket, ahol mondatvégi jelet nem mondatvégi jel követ. Ehhez vagy gyűjteni kell a mondatvégi jelek pozícióit, vagy karakterenként kell végigszaladni a szövegen. (Külön kérdés, hogy ilyenkor mennyire kell figyelni a karakterkódolásra.)
2020. dec. 27. 15:31
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
50%
A ... megzavarja, ha így csinálod. Egyrészt három mondatnak számolja, másrészt ... mondat közben is előfordulhat.
2020. dec. 27. 16:15
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
70%

A str-t ne használd változónévnek, mert így hívják a string típust Pythonban. Kihagytad a felkiáltójelet. Az első ötlete jó: mivel a mondatvégi írásjel után a helyesírás szabályai szerint szóköznek kell lennie, ezért az alábbi kód helyes:


mondatok = "Ez egy mondat. Ez egy egy másik mondat?! Ez is egy mondat... Ez mondat?"

mondatok += " " # szóköz a végére, hogy az utolsó mondatot is megszámolja

print("A mondatok száma:" mondatok.count(". ") + mondatok.count("? ") + mondatok.count("! "))


Ezt még bonyolíthatod a szöveg tisztításával (whitespace levágása elöl-hátul, stb.), vagy a 2-es megjegyzését is figyelembe vegye, hogy a ... után új mondat kezdődik-e vagy sem (nagybetű vagy kisbetű következik). Az univerzális megoldás szerintem regex-et használna, de egy kezdőnek túl az bonyolult.

2020. dec. 27. 16:50
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
78%

Amúgy igen, regex lenne a legcélszerűbb megoldás, az alábbi regex pl használható mind arra, hogy megszámold a mondatokat, mind pedig arra, hogy az egyes mondatokat (a felesleges whitespacek nélkül) ki tudd gyűjteni:


results = re.findall("/([^?!.]+[?!.]+)\s*(?=[^?!.]|$)/", myStr)


Ha érdekel ponosan hogyan épül fel, és melyik része mit csinál enneka regexnek, tudom javasolni a regex101.com oldalt, elég hasznos reguláris kifejezések írására és elemzésére.

2020. dec. 27. 18:02
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:
78%

Sőt, a lookahead a végére nem is kell, elég az alábbi is:

/([^?!.]+[?!.]+)\s*/

2020. dec. 27. 18:04
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!