Saturday, July 25, 2015

თავი 10 (10,5 - 10,6)



10.5 Multiple assignment with dictionaries

items - ის თუპლის და for - ის კომბინირებით შეგიძლია ნახო კოდის კარგი ნიმუში ლექსიკონში ერთი მარყუჟით გასაღების და მნიშვნელობის გადაკვეთისა:

for key, val in d.items():
            print val, key

ამ მარყუჟს აქვს ორი გამეორებადი ცვლადი , items აბრუნებს თუპლის სიას და val, key არის თუპლის დავალება, რომელიც წარმატებით ამეორებს თითოეულ გმწ - ს ლექსიკონში.

მარყუჟში ყოველი გამეორებისთვის  key და value არის  advanced მომდევნო გასაღები/მნიშვნელობის წყვილისთვის ლექსიკონში (still in hash order)

მარყუჟის ამონაბეჭდია შემდეგი:

10 a
22 c
1 b

Again in hash key order ( ანუ კონკრეტული რიგის გარეშე).

თუ გავაერთიანებთ ამ ორ ტექნიკას შეგვეძლება ამოვბეჭდოთ ლექსიკონის შიგთავსი დახარისკებული გმწ - ის მნიშვნელობის მიხედვით.
ამის გასაკეთებლად პირველად ვაკეთებთ თუპლების სიას, სადაც თითო თუპლი არის (value, key). items მეთოდი მოგვცემს სიას (key, value) თუპლის, მაგრამ ამჟამად გვინდა დავახარისხოთ მნიშვნელობის მიხედვით.  რაკი ერთხელ გავაკეთებთ მნიშვნელობა/გასაღები თუპლის სიას, მერე უკვე მარტივია გავაკეთოთ პირიქით დახარისხებული სია  და ამოვბეჭდოთ.

>>> d = {'a':10, 'b':1, 'c':22}
>>> l = list()
>>> for key, val in d.items():
...     l.append( (val, key) )
...
>>> l
[(10, 'a'), (22, 'c'), (1, 'b')]
>>> l.sort(reverse=True)
>>> l
[(22, 'c'), (10, 'a'), (1, 'b')]
>>> 
თუპლის სიის ყურადღებით გაკეთებით - რომ ყოველი თუპლის პირველი ელემენტი იყოს მნიშვნელობა, შეგვიძლია დავახარისხოთ თუპლის სია და გამოვიტანოთ ლექსიკონის შიგთავსი მნიშვნელობის მიხედვით დახარისხებული.

10.6 the most common words.

დავუბრუნდეთ ტექსტს წინა მაგალითიდან Romeo and Juliet Act 2,
Scene 2 . შეგვიძლია გავზარდოთ ჩვენი პრორამა ისე, რომ ამობეჭდოს 10 ყველაზე ხშირად გამოყენებული სიტყვა:

import string
fhand = open('romeo-full.txt')
counts = dict()
for line in fhand:
line = line.translate(None, string.punctuation)
line = line.lower()
words = line.split()
for word in words:
if word not in counts:
counts[word] = 1
else:
counts[word] += 1

# Sort the dictionary by value
lst = list()
for key, val in counts.items():
lst.append( (val, key) )

lst.sort(reverse=True)

for key, val in lst[:10] :
print key, val


პრორამის პირველი ნაწილი, რომელიც კითხულობს ფაილს და ითვლის  ლექსიკონს - რომელიც ყოველ სიტყვას მიმართავს სიტყვების მთვლელისკენ; უცვლელია.  მაგრამ პროგრამის ბოლოში counts - ის მარტივად ამობეჭდვის ნაცვლად, ვაკეთებთ თუპლების (val, key) სიას და ამ სიას ვასწორებთ კლებადობის მიხედვით.

მაშინ, როცა მნიშვნელობა არის პირველი, ეს იქნება გამოყენებული შედარებისთვის და თუ შეგვხვდება ერთზე მეტი თუპლი იგივე მნიშვნელობით, შეადარებს მეორე პარამეტრს(გასაღებს), ასე რომ  ერთი და იგივე მნიშვნელობის მქონე თუპლებს დაახარისხებს ანბანის მიხედვით.

ბოლოს დავწერეთ for მარყუჟი, რომელიც აკეთებს ბევრ გამეორებას და ბეჭდავს სიაში (პარამეტრით lst[:10]) 10 ყველაზე ხშირად გამოყენებულ სიტყვას.
ამონაბეჭდი ახლა უკვე გამოიყურება ისე, როგორც გვინდოდა.

61 i
42 and
40 romeo
34 to
34 the
32 thou
32 juliet
30 that
29 my
24 thee
ფაქტი, რომ კომპლექსური მონაცემების გარჩევა და ანალიზი შეიძლება გაკეთდეს ადვილად გასაგები პითონის 19 ხაზიანი პროგრამით არის ერთი მიზეზი თუ რატომაა პითონი კარგი ენა ინფორმაციის მოკვლევისთვის.