Handout

Transkrypt

Handout
Obliczenia Symboliczne I
Przetwarzanie Tekstu 2
Otwieranie pliku
source = open(path)
sink = open(path, "w")
#ponizej – low­level (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.icc­ccs.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 non­match
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”

Podobne dokumenty