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”