Handout
Transkrypt
Handout
Obliczenia Symboliczne I Przetwarzanie Tekstu 2 Otwieranie pliku source = open(path) sink = open(path, "w") #ponizej – lowlevel (nieuzywane) import os source = os.open(path, os.O_RDONLY) source = os.fdopen(fd) sink_fd = os.open(path, os.O_WRONLY) sink = os.fdopen(sink_fd) Otwieranie pliku try: myfile = open(filename) except IOError, err: m="Couldn't open %s: %s" % (filename, err.strerror) raise AssertionError(m) „Chevron” print logfile = open("/tmp/log", "w") print>>logfile, "logujemy ..." print „wypisujemy” „Chevron” print ... a tak nie należy tego robić: import sys old_output, sys.stdout = sys.stdout, logfile print "logujemy ..." sys.stdout = old_output print "wypisujemy ..." „Chevron” print class FileDispatcher(object): def __init__(self, *files): self.files = files def write(self, msg): for f in self.files: f.write(msg) def close(self): for f in self.files: f.close() „Chevron” print x = open("test1.txt", "w") y = open("test2.txt", "w") z = open("test3.txt", "w") fd = FileDispatcher(x, y, z) print>>fd, "Foo" # to samo co: fd.write("Foo"); fd.write("\n") fd.close() Plik tymczasowy import tempfile myfile = tempfile.TemporaryFile(bufsize = 0) for i in range(10): print>>myfile, i myfile.seek(0) print "Tmp file has:", myfile.read() Plik tymczasowy import tempfile myfile = tempfile.TemporaryFile(bufsize = 0) for i in range(10): print>>myfile, i myfile.seek(0) print "Tmp file has:", myfile.read() Parametry z linii komend >>> import getopt >>> args = 'a b cfoo d bar a1 a2'.split() >>> args ['a', 'b', 'cfoo', 'd', 'bar', 'a1', 'a2'] >>> optlist, args = getopt.getopt(args, 'abc:d:') >>> optlist [('a', ''), ('b', ''), ('c', 'foo'), ('d', 'bar')] >>> args ['a1', 'a2'] Parametry z linii komend import getopt, sys def main(): try: opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) except getopt.GetoptError, err: # print help information and exit: print str(err) # will print something like "option a not recognized" usage() sys.exit(2) Parametry z linii komend output = None verbose = False for o, a in opts: if o == "v": verbose = True elif o in ("h", "help"): usage() sys.exit() elif o in ("o", "output"): output = a else: assert False, "unhandled option" # ... Pliki f = open("hello.txt") try: for line in f: print line finally: f.close() With (python 2.6+) from __future__ import with_statement # python 2.5 with open("hello.txt") as f: for line in f: print line Najpierw wołany jest __enter__() na wyrażeniu po prawej do with „context manager” Wynik podstawiany jest pod zmienną na prawo od as (jeśli nie było wyjątku) Na context manager wołany jest __exit__() Czytanie przez HTTP import urllib2 page = urllib2.urlopen("http://localhost/plik.txt") for line in page: Print line Parsowanie HTML import urllib2 from BeautifulSoup import BeautifulSoup page = urllib2.urlopen( "http://www.iccccs.org/prc/piracyreport.php") soup = BeautifulSoup(page) for incident in soup('td', width="90%"): where, linebreak, what = incident.contents[:3] print where.strip() print what.strip() print Symbol Kot forma desygnat pojęcie Symbol Symbol jest to relacja pomiędzy Pojęciem – znaczeniem przechowywanym w ludzkim umyśle Desygnatem – elementem rzeczywistości pozajęzykowej Formą samego symbolu która służy do jego reprezentacji Taki podział nazywany jest trójkątem semiotycznym i pochodzi od Pierce'a choć jego elementy już są wymieniane przez Arystotelesa Wyraz jako Symbol Głównym medium do przekazywania informacji nadal jest tekst. Tekst składa się z form wyrazów – symboli języka. Do badania tekstu potrzebujemy słowników – par (napis, opis) - (kot,AAA+subst:sg:nom:m2) Slowniki mogą być: Fleksyjne Semantyczne Etc. ... Wyraz jako Symbol Wyrazy mają różne formy gramatyczne: be, am, is Kot, kota, kotu, ... kotom, kotach ... Niektóre formy są niejednoznaczne Forma „pika”: od pik, pika, pikać Nie da się dobrze tego zdyzambiguować bez zrozumienia tekstu Nie da się dobrze zrozumieć tekstu bez usunięcia niejednoznaczności Etc ... Przetwarzanie tekstu Tokenizacja Podział na istotne elementy (symbole, formy) Tagging Nadanie znaczenia symbolom, najczęściej korzystając ze słownika W języku polskim – sprowadzenie do formy podstawowej wyrazu: kotu → kot Indeksacja Narzędzie do indeksacji i full-text search wyszukiwania w wielu plikach CHARMING PYTHON #15 (20010165) Developing a Full-Text Indexer in Python David Mertz, Ph.D. http://gnosis.cx/publish/programming/charming_python_15.txt http://home.agh.edu.pl/~korzycki/osi/indexer.py Indeksacja def add_file(self, fname, ftype='text/plain'): words = self.splitter(text, ftype) filedict = {} for word in words: if filedict.has_key(word): filedict[word] = filedict[word]+1 else: filedict[word] = 1 entry[file_index] = filedict[word] Indeksacja def find(self, wordlist): "Locate files that match ALL the words in wordlist" self.load_index(wordlist=wordlist) entries = {} hits = copy.copy(self.fileids) # Copy of fileids index for word in wordlist: if not self.casesensitive: word = string.upper(word) entry = self.words.get(word) # For each word, get index entries[word] = entry # of matching files if not entry: # Nothing for this one word (fail) return 0 for fileid in hits.keys(): # Eliminate hits for every nonmatch if not entry.has_key(fileid): del hits[fileid] Analiza frekwencyjna Analiza frekwencyjna Policzono częstotliwość występowania poszczególnych wyrazów w „Moby Dick” 50 najczętszych wyrazów stanowi niemal 50% książki To jest zjawisko niezależne od języka, tekstu (zbiór tekstów: korpus) Prawo fenomenologiczne znane jako „Prawo Zipfa” albo „Prawo Pareto dla tekstów”. Analiza frekwencyjna tf–idf weight (term frequency–inverse document frequency) dj – dokument j w korpusie, |D| - ilość dokumentów w korpusie, nij – ilość wystąpień wyrazu i w tekście j (tf-idf)i,j = tfi,j х idfi Stop Lista Pewne wyrazy nie wnoszą dodatkowego znaczenia – często wsadzane są na „stoplistę” Stoplista z polskiej Wikipedii (fragment): a, aby, ach, acz, aczkolwiek, aj, albo, ale, ależ, aż, bardziej, bardzo, bez, bo, bowiem, by, byli, bynajmniej, być, był, była, było, były, będzie, będą, cali, cała, cały, ci, cię, ciebie, co, cokolwiek, coś, czasami, czasem, czemu, czy, czyli, daleko, dla, dlaczego, dlatego, do, dobrze, dokąd, dość, dużo, dwa, dwaj, dwie, dwoje, dziś, dzisiaj, gdy, gdyby, gdyż, gdzie, gdziekolwiek, gdzieś, go, i, ich, ile, im, inna, .... Kolokacje >>> bigrams(['more', 'is', 'said', 'than', 'done']) [('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')] panna młoda, statek kosmiczny, Platforma Obywatelska Kolokacje Krotki wyrazów relatywnie dużo częściej występujące ze sobą razem w stosunku do innych; często niosące osobne znaczenie – zatem krotka taka reprezentuje odrębny symbol. Amazon nazywa to „Statistically Improbable Phrases”