Saturday, July 25, 2015

თავი 10 (10,7 - 10,9)

11.7 გამართვა


პითონს აქვს ჩაშენებული მარტივი დოკუმენტაცია, რომელიც საკმაოდ გამოსადეგია  თუ გჭირდება სწრაფად გაიხსენო რომელიმე კონკრეტული მეთოდის სახელი. ეს დოკუმენტაცია შეიძლება ნახო პითონის ინტერპრეტერში ინტერაქტიულ რეჟიმში.
შეგიძლია გამოიძახო დახმარება help() - ის გამოყენებით.

>>> help()
Welcome to Python 2.6! This is the online help utility.
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/tutorial/.

Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".

To get a list of available modules, keywords, or topics, type "modules",
"keywords", or "topics". Each module also comes with a one-line summary
of what it does; to list the modules whose summaries contain a given word
such as "spam", type "modules spam".

help> modules


თუ იცი რომელი მოდულის გამოყენება გინდა, შეგიძლია dir() ბრძანებით მოძებნო ამ მოდულის მეთოდები:

>>> import re
>>> dir(re)
[.. 'compile', 'copy_reg', 'error', 'escape', 'findall',
'finditer', 'match', 'purge', 'search', 'split', 'sre_compile',
'sre_parse', 'sub', 'subn', 'sys', 'template']

ასევე შეგიძლია კონკრეტული მეთოდის შესახებ მცირე დოკუმენტაციის მოძებნა dir ბრძანებით.

>>> help (re.search)
Help on function search in module re:

search(pattern, string, flags=0)
Scan through string looking for a match to the pattern, returning
a match object, or None if no match was found.
>>> 

ჩაშენებული დოკუმენტაცია არ არის ძალიან ვრცელი, მაგრამ შეიძლება იყოს გამოსადეგი როცა გეჩქარება ან არ გაქვს წვდომა ვებ-ბრაუზერთან ან საძიებო სისტემასთან.


11.8 ლექსიკონი

brittle code: კოდი, რომელიც მუშაობს მაშინ, როცა შეტანილი მონაცემები არის კონკრეტულ ფორმატში და მიდრეკილება აქვს გაფუჭებისკენ იმ შემთხვევაში თუ კონკრეტული ფორმატიდან რამე არის გადახრილი. ამას ვეძახით „მყიფე კოდს“ იმიტომ რომ ადვილად ტყდება.
greedy matching: The notion რომ+და*სიმბოლოები რეგულარულ გამოსახულებაში ამთხვევს რაც შეიძლება დიდ სტრინგს..
grep: ბრძანება ხელმისაწვდომია უმეტესობა Unix - ის სისტემებში, რომელიც იკვლევს ტექსტურ ფაილებს და ეძებს ხაზებს, რომელიც ემთხვევა რეგულარულ გამოსახულებებს.
ბრძანების სახელი მოდის ”Generalized Regular Expression Parser” - დან.
regular expression: ძებნის რთული სტრინგების გამოსასახი ენა.რეგულარული გამოსახულება შეიძლება შეიცავდეს სპეციალურ სიმბოლოებს, რომელიც აჩვენებს, რომ ეძებს დამთხვევებს მხოლოდ  ხაზის დასაწყისში ან ბოლოში (ან ბევრი სხვა მსგავსი შესაძლებლობები )
wild card: სპეციალური სიმბოლო, რომელიც ემთხვევა ნებისმიერ სიმბოლოს. რეგულარულ გამოსახულებაში wild card - ის სიმბოლოა წეტილის სიმბოლო.


11.9 სავარჯიშოები

სავარჯიშო 11.1 დაწერე მარტივი პროგრამა, რომელიც მოახდენს grep - ის სიმულაციას Unix - ზე. მომხმარებელს მოსთხოვე შეიყვანოს რეგულარული გამოსახულება და დაითვალოს ხაზები, რომელიც დაემთხვევა რეგულარულ გამოსახულებას.

$ python grep.py
Enter a regular expression: ˆAuthor
mbox.txt had 1798 lines that matched ˆAuthor

$ python grep.py
Enter a regular expression: ˆXmbox.
txt had 14368 lines that matched ˆX-

$ python grep.py
Enter a regular expression: java$
mbox.txt had 4218 lines that matched java$

სავარჯიშო 11.2 დაწერე პროგრამა შემდეგი ფორმის ხაზების მოსაძებნად:

New Revision: 39772

და ყოველი ხაზიდან ამოიღე ციფრები რეგულარული გამოსახულების და findall() მეთოდის გამოყენებით. გამოთვალე ციფრების საშუალო არითმეტიკული და ამობეჭდე.

Enter file:mbox.txt
38549.7949721

Enter file:mbox-short.txt
39756.9259259

თავი 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 ხაზიანი პროგრამით არის ერთი მიზეზი თუ რატომაა პითონი კარგი ენა ინფორმაციის მოკვლევისთვის.