A feladatot számos módon meg lehet oldani, de általában az egy-két soros rövid, de mégis áttekinthető megoldások preferáltak. Két ilyen megoldást is mutatunk az alábbiakban.
A közös a kettőben, hogy a szöveget a szóközök mentén szétszedjük a split() metódussal. Az így kapott listában lehetnek olyan szavak, amelyeket írásjel követ. Ezeket a strip() metódussal távolítjuk el és hozunk létre egy csak szavakból álló sorozatot. Ahhoz, hogy a kis- és nagybetűvel kezdődő, azonos jelentésű szavak ne külön legyenek számba véve, ezért minden szót egységesen kisbetűsre konvertálunk a lower() metódussal.
Az első módszernél egy szótárépítő kifejezésben számoljuk meg az egyes szavak előfordulását a count() metódussal. A másik módszernél a collections modulból beimportáljuk a Counter osztályt és ennek használatával állítjuk elő a szavak gyakoriságának eloszlását. Ha a létrehozott Counter példány nem megfelelő számunkra, akkor ezt dict szótárrá alakítjuk.
Az egyes megoldások kódjai:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
szöveg = 'Kinek ez, kinek az az igénye: "kinek a pap, kinek a papné"!' írásjelek = '.,;:!?"' # 1. megoldás: szótárépítő kifejezés és count() metódus használatával. # Előkészítés: szöveg szétdarabolás szóközök mentén, majd pedig az # írásjelek leválasztása, hogy tisztán csak szavak sorozatát kapjuk. szavak = [w.lower().strip(írásjelek) for w in szöveg.split()] szó_stat = {szó:szavak.count(szó) for szó in szavak} print(szó_stat) # Eredmény: {'kinek': 4, 'ez': 1, 'az': 2, 'igénye': 1, 'a': 2, 'pap': 1, 'papné': 1} # 2. megoldás: Counter objektum használatával. from collections import Counter szó_stat = Counter(w.lower().strip(írásjelek) for w in szöveg.split()) print(szó_stat) # Eredmény: Counter({'kinek': 4, 'az': 2, 'a': 2, 'ez': 1, 'igénye': 1, 'pap': 1, 'papné': 1}) # vagy ha dict típusú szótárban szeretnénk megkapni, akkor szó_stat = dict(Counter(w.lower().strip(írásjelek) for w in szöveg.split())) print(szó_stat) # Eredmény: {'kinek': 4, 'ez': 1, 'az': 2, 'igénye': 1, 'a': 2, 'pap': 1, 'papné |
Ha valaki a megoldásokban alkalmazott nyelvi elemek részleteire és további alkalmazási példákra kíváncsi, akkor a Python tudásépítés lépésről lépésre című könyv „Beépített típusok nyilvános metódusai”, valamint a „Sorozatelemek összeszámolása – Counter” fejezeteket érdemes tanulmányozni.