23
Linux I II III Res WN/TT NLTK XML Weka E NLTK 6 NLTK Ressourcen-Vorkurs

Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

  • Upload
    vuhuong

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

NLTK

6 NLTK

Ressourcen-Vorkurs

Page 2: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Plan

1 Einfuhrung

1 Wer, Wie, Was ist NLTK?2 IDLE3 Was bietet NLTK?4 Wo finde ich Hilfe?5 Wie kann ich beitragen?6 FAQ

2 Struktur und Inhalt

1 Ubersicht uber die Module2 Bsp. 1: Satzgenerierung mit Word-Predictor3 Bsp. 2: Part-of-Speech-Tags

3 Ubungen

Ressourcen-Vorkurs

Page 3: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Wer, Wie, Was? I

Zusammenstellung von Python-Modulen fur NLP-Forschungund -Entwicklung

Code fur Vielzahl von Aufgaben aus der Sprachverarbeitung

40 bekannte Korpora

ausfuhrliche Dokumentation inkl. Online-Buch

Ressourcen-Vorkurs

Page 4: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Wer, Wie, Was? II

Projekt-Administratoren: Steven Bird (University ofMelbourne), Edward Loper (University of Pennsylvania), EwanKlein (University of Edinburgh)

viele weitere Entwickler

Beitrage von Studenten & Forschern aus aller Welt

Ressourcen-Vorkurs

Page 5: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Wer, Wie, Was? III

Einbindung in Python-Programme:

>>> text = ’’’NLTK , the Natural Language Toolkit , is a suite of program

... modules , data sets and tutorials supporting research and teaching in

... computational linguistics and natural language processing.’’’

>>> import nltk

>>> nltk.LineTokenizer (). tokenize(text)

[’NLTK , the Natural Language Toolkit , is a suite of program ’, ’modules ,

data sets and tutorials supporting research and teaching in’, ’computational

linguistics and natural language processing.’]

schneller: from ... import ... - Konstrukt

Ressourcen-Vorkurs

Page 6: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - IDLE

IDLE ist das Integrated DeveLopment Environment von Python

Wird mit Python mitgeliefert

Aufruf mit $ idle

Standard-Fenster beim Offnen: Interpreter

Bietet außerdem: File Editor, Class Browser etc.

Function/Method Call Tips, Scroll-Down-Menu fur Methoden

Ressourcen-Vorkurs

Page 7: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Was bietet NLTK?

Infrastruktur als Grundlage fur NLP-Programme in Python:

1 Grundlegende Klassen zur Reprasentation NLP-relevanterDaten

2 Standard-Schnittstellen fur ubliche Aufgaben, z.B.Tokenisierung, Tagging, Parsing

3 Demos, Z.B. Parser, Chunker, Chatbots4 Ausfuhrliche Dokumentation, Tutorien, Referenzen

Ressourcen-Vorkurs

Page 8: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Was bietet NLTK?

Online-Buch:

1 Grundlagen: Textverarbeitung, Tokenization, Tagging,Lexikons, Language Engineering, Text Classification

2 Parsing: Phrase Structure, Trees, Grammars, Chunking, Parsing3 Fortgeschrittene Themen: Feature-Based Grammar,

Unification, Semantics, Linguistic Data Management

Ressourcen-Vorkurs

Page 9: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Wo finde ich Hilfe?

Online-Hilfe-Funktion:>>> help(nltk.stem.WordnetStemmer)

class WordnetStemmer(nltk.stem.api.StemmerI)

| A stemmer that uses Wordnet ‘s built -in morphy function.

|

| Method resolution order:

| WordnetStemmer

| nltk.stem.api.StemmerI

...

Doc-Strings:

>>> print nltk.tag.BrillTagger.__doc__

Brill’s transformational rule -based tagger. Brill taggers use an

X{initial tagger} (such as L{tag.DefaultTagger }) to assign an intial

tag sequence to a text; and then apply an ordered list of ...

Ressourcen-Vorkurs

Page 10: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Wo finde ich Hilfe?

Mailing-Listen: nltk-announce, nltk-devel, nltk-users

NLTK-Homepage: http://nltk.org, inkl. Tutorien,Code-Beispielen, Chatroom

NLTK-Dokumentation:http://nltk.org/index.php/Documentation, inkl. Buch,API-Dokumentation

Ressourcen-Vorkurs

Page 11: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - Wie kann ich beitragen?

Open-Source-Gemeinschaftsprojekt

Email an User Group, Bugreports, Feature vorschlagen

Patch einreichen, Rezepte fur’s Kochbuch, Doku-Ubersetzung

Liste mit Projektvorschlagen unterhttp://nltk.org/index.php/Projects, z.B.:

Develop a morphological analyser for a language of your choiceDevelop a coreference resolution systemDevelop a program for unsupervised learning of phonologicalrules, using the method described by Goldwater and JohnsonImplement a dependency parser

Ressourcen-Vorkurs

Page 12: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Einfuhrung - FAQ

Welche Lizenz benutzt NLTK? - GNU Public License

Wie wird NLTK-Entwicklung unterstutzt? - GelegentlicheFunds fur Studenten, die an einem bestimmten Projektarbeiten oder ein Praktikum suchen

Wissenschaftliche Artikel uber NLTK? - siehehttp://scholar.google.com.au/scholar?q=NLTK

Was ist der Unterschied zw. NLTK und NLTK-Lite? -NLTK-Lite ist einfacher, schneller und stellt wenigerAnspruche an der Programmierer. Wo moglich, werdenStandard-Python-Objekte statt angepasster NLP-Versionengenutzt. Wenn fertig, wird es die gleiche Funktionalitat wieNLTK liefern.

Ressourcen-Vorkurs

Page 13: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Struktur und Inhalt - Ubersicht Module

NLTK-Api unter: http://nltk.org/doc/api/

Dokumentation aller Module, Klassen, Funktionen, Variablen

Ressourcen-Vorkurs

Page 14: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Struktur und Inhalt - Ubersicht ModuleModul cfg

Klassen zur Reprasentation kontextfreier Grammatiken,Regeln, Nonterminals, probabilistischer CFGs

Funktionen zum Prufen der Abdeckung, Induzierenprobabilistischer CFGs, Parsen von Grammatiken ...

cfg demo(), pcfg demo(), demo()

Ressourcen-Vorkurs

Page 15: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Struktur und Inhalt - Ubersicht ModuleModul classify

Klassifikation von: Wortern, Satzen, Dokumenten, etc.anhand von Merkmalen (”Feature-Sets”)

>>> # Define a feature extraction function.

>>> def document_features(document ):

... return dict ([(’contains -word(%s)’%w,True) for w in document ])

>>> # Classify each Gutenberg document.

>>> for file in nltk.corpus.gutenberg.files ():

... doc = nltk.corpus.gutenberg.tokenized(file)

... print doc_name , nltk.NaiveBayesClassifier.classify(

document_features(doc))

Trainieren & Anwenden versch. Klassifizierer: DecisionTree,NaiveBayes, Weka, Maxent ...

Ressourcen-Vorkurs

Page 16: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Struktur und Inhalt - Ubersicht ModuleModul corpus

Korpus-Readers fur 40 NLTK-interne & -externe Korpora

Bsp. fur Funktionen einzelner Reader: word(), sents(),paras(), tagged words(), chunked sents(),parsed paras(), raw()

>>> from nltk.corpus import brown

>>> print brown.words ()

[’The’, ’Fulton ’, ’County ’, ’Grand’, ’Jury’, ’said’, ...]

Paket nltk.corpus.reader stellt versch. Reader zurVerfugung (TaggedCorpusReader,PlaintextCorpusReader) → konnen auch auf fremdeKorpora ubertragen werden

Ressourcen-Vorkurs

Page 17: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Struktur und Inhalt - Ubersicht ModuleModul tag

Klassen fur verschiedene Taggermodelle: AffixTagger,BrillTagger, NGramTagger, HMM-Tagger (noch nicht in v0.9)

Tagger sind untereinander kombinierbar: Findet der ersteTagger kein Tag, kommt der backoff-Tagger ins Spiel usw.

>>> from nltk.tag import DefaultTagger , UnigramTagger

>>> from nltk.corpus import brown

>>> tagger = UnigramTagger(brown.tagged_sents (), backoff=DefaultTagger(‘NN’))

>>> tagger.tag([’The’, ’dog’, ’chewed ’, ’on’, ’a’, ’bone’, ’.’])

[(’The’, ’AT’), (’dog’, ’NN’), (’chewed ’, ’VBD’), (’on’, ’IN’), \\

(’a’, ’AT’), (’bone’, ’NN’), (’.’, ’.’)]

Zur Umwandlung von ’the/DT dog/N’ nach "[(’the’,’DT’), (’dog’, ’N’)]": str2tuple() und tuple2str()

Ressourcen-Vorkurs

Page 18: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Struktur und Inhalt - Ubersicht ModuleModul probability

Klassen zur Berechnung von Statistiken uber Ergebnisse vonExperimenten, z.B.

FreqDist: HaufigskeitsverteilungConditionalFreqDist - z.B. Wie oft wird ein Wort mit welchemTag versehen?GoodTuringProbDist: Good-Turing-Schatzung einer Verteilung

>>> fdist = FreqDist ()

>>> for word in tokenize.whitespace(sent):

... fdist.inc(word.lower ())

Ressourcen-Vorkurs

Page 19: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Struktur und Inhalt - Ubersicht ModuleAndere Module

chunk

cluster

containers

data

draw

featstruct

inference

sem

stem

tokenize

wordnet

Ressourcen-Vorkurs

Page 20: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Bsp. 1: Satzgenerierung mit Word-Predictor

(Beispiele entnommen aus Madnani (2007):http://www.umiacs.umd.edu/ nmadnani/pdf/crossroads.pdf)

>>> from nltk.corpus import gutenberg

>>> from nltk.probability import ConditionalFreqDist

>>> from random import choice

# Create distribution object

>>> cfd = ConditionalFreqDist ()

# For each token , count current word given previous word

>>> prev_word = None

>>> for word in gutenberg.words(’austen -persuasion ’):

. . . cfd[prev_word ].inc(word)

. . . prev_word = word

Ressourcen-Vorkurs

Page 21: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Bsp. 1: Satzgenerierung mit Word-Predictor

# Start predicting at the given word , say ’therefore ’

>>> word = ’therefore ’

>>> i = 1

# Find all words that can possibly follow the current word

# and choose one at random

>>> while i < 20:

. . . print word ,

. . . lwords = cfd[word]. samples ()

. . . follower = choice(lwords)

. . . word = follower

. . . i += 1

. . .

therefore it known of women ought . Leave me so well

placed in five altogether well placed themselves delighted

Ressourcen-Vorkurs

Page 22: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Bsp. 2: Part-of-Speech-Tags

>>> from nltk.corpus import brown

>>> from nltk.probability import FreqDist , ConditionalFreqDist

>>> fd = FreqDist ()

>>> cfd = ConditionalFreqDist ()

# for each tagged sentence , get the (token , tag) pair and update

# both count(tag) and count(tag given token)

>>> for text in brown.items:

. . . for sentence in brown.tagged_sents(text):

. . . for (token , tag) in sentence:

. . . fd.inc(tag)

. . . cfd[token].inc(tag)

>>> fd.max() # The most frequent tag is ...

’NN’

Ressourcen-Vorkurs

Page 23: Linux IIIIIIResWN/TTNLTKXMLWekaE NLTK fileLinux IIIIIIResWN/TTNLTKXMLWekaE Einf uhrung - Wie kann ich beitragen? Open-Source-Gemeinschaftsprojekt Email an User Group, Bugreports, Feature

Linux I II III Res WN/TT NLTK XML Weka E

Bsp. 2: Part-of-Speech-Tags

>>> wordbins = [] # Initialize a list to hold (numtags ,word) tuple

# append each (n(unique tags for token),token) tuple to list

>>> for token in cfd.conditions ():

. . . wordbins.append ((cfd[token].B(), token))

. . .

# sort tuples by number of unique tags (highest first)

>>> wordbins.sort(reverse=True)

>>> print wordbins [0] # token with max. no. of tags is ...

(12, ’that’)

Ressourcen-Vorkurs