Aufbau der Demo Grammar

November 2nd, 2015

Die Demo Grammar ist wie folgt aufgebaut:

 

from __future__ import print_function

import itertools

import sys

from nltk.grammar import Nonterminal

 

def generate(grammar, start=None, depth=None, n=None):

„““

Generates an iterator of all sentences from a CFG.

    :param grammar: The Grammar used to generate sentences.

    :param start: The Nonterminal from which to start generate sentences.

    :param depth: The maximal depth of the generated tree.

    :param n: The maximum number of sentences to return.

    :return: An iterator of lists of terminal tokens.

„““

  if not start:
       start = grammar.start()
  if depth is None:
       depth = sys.maxsize
  iter = _generate_all(grammar, [start], depth)
  if n:
       iter = itertools.islice(iter, n)
 
  return iter

  def _generate_all(grammar, items, depth):

      if items:

          for frag1 in _generate_one(grammar, items[0], depth):

            for frag2 in _generate_all(grammar, items[1:], depth):

               yield frag1 + frag2

       else:

           yield []

 

  def _generate_one(grammar, item, depth):

    if depth > 0:

      if isinstance(item, Nonterminal):

        for prod in grammar.productions(lhs=item):

          for frag in _generate_all(grammar, prod.rhs(), depth1):

            yield frag

    else:

      yield [item]

 

demo_grammar = „““

   S -> NP VP

   NP -> Det N

  PP -> P NP

  VP -> ’slept‘ | ’saw‘ NP | ‚walked‘ PP

  Det -> ‚the‘ | ‚a‘

  N -> ‚man‘ | ‚park‘ | ‚dog‘

  P -> ‚in‘ | ‚with‘

„““

def demo(N=23):
     from nltk.grammar import CFG
     print(‚Generating the first %d sentences for demo grammar:‘ % (N,))
     print(demo_grammar)
     grammar = CFG.fromstring(demo_grammar)
     for n, sent in enumerate(generate(grammar, n=N), 1):
          print(%3d. %s % (n, ‚ ‚.join(sent)))

if __name__ == ‚__main__‘:

    demo()


 

November 2nd, 2015
Folgend ist eine Kette von Befehlen aufgelistet, die für spätere Projekte sinnvoll sein können:
In Python Console:
>>> import nltk
>>> nltk.download()
>>> from nltk.corpus import wordnet as wn
>>> print(wn.synset(‚dog.n.01‘).definition())
a member of the genus Canis (probably descended from the common wolf) that has been domesticated by man since prehistoric times; occurs in many breeds
Wordnet NLTK Useage

Tokenize and Tag Text
>>> import nltk
>>> sentence = """I was feeling very odd this morning."""
>>> tokens = nltk.word_tokenize(sentence)
>>> tokens
['I', 'was', 'feeling', 'very', 'odd', 'this', 'morning', '.']
>>> tagged = nltk.pos_tag(tokens)
>>> tagged[0:8]
[('I', 'PRP'), ('was', 'VBD'), ('feeling', 'VBG'), ('very', 'RB'), 
('odd', 'RB'), ('this', 'DT'), ('morning', 'NN'), ('.', '.')]

Identify named entities
>>> entities = nltk.chunk.ne_chunk(tagged)
>>> entities
Tree('S', [('I', 'PRP'), ('was', 'VBD'), ('feeling', 'VBG'), ('very', 'RB'), 
('odd', 'RB'), ('this', 'DT'), ('morning', 'NN'), ('.', '.')])

Display a parse tree
>>> from nltk.corpus import treebank
>>> t = treebank.parsed_sents('wsj_0001.mrg')[0]
>>> t.draw()
Screenshot from 2015-11-02 11:23:58


>>> from nltk.parse.generate import generate, demo_grammar
>>> from nltk import CFG
>>> grammar = CFG.fromstring(demo_grammar)
>>> print(grammar)
Grammar with 13 productions (start state = S)
    S -> NP VP
    NP -> Det N
    PP -> P NP
    VP -> 'slept'
    VP -> 'saw' NP
    VP -> 'walked' PP
    Det -> 'the'
    Det -> 'a'
    N -> 'man'
    N -> 'park'
    N -> 'dog'
    P -> 'in'
    P -> 'with'

>>> for sentence in generate(grammar, depth=10): print(' '.join(sentence))
... 
the man slept
the man saw the man
the man saw the park
the man saw the dog
the man saw a man
the man saw a park
the man saw a dog
the man walked in the man
the man walked in the park
[...]
a dog walked with a park
a dog walked with a dog

WordNet weiter

November 2nd, 2015

Meronym relation: „has a
Holonym relation: „part of
Hyponym realtion: „is a
Meronym (opposite of) Holonym
Hyponym (opposite of) Hypernym

Grundlage von WordNet

Oktober 27th, 2015

Wordnet ist eine Ansammlung von Worten und Wortbedeutungen. Ähnlich wie ein Wörterbuch. Eigentlich genau wie ein Wörterbuch nur einfacher, schneller und Übersichtlicher.
Hauptsächlich ist WordNet auf die englische Sprache konzentriert, weshalb die nachfolgenden Beispiele immer in englischer Sprache auftreten.

Nomen bauen sich in vier Gruppen auf:

Hypernyms ¨Y¨ ist ein Hypernym von ¨X¨, wenn jedes X eine Art von Y ist (¨canine¨ ist ein Hypernym von ¨dog¨)
Hyponyms ¨Y¨ ist ein Hyponym von ¨X¨, wenn jedes Y eine Art von X ist. (¨dog¨ ist ein Hyponym von ¨canine¨)
Meronym ¨Y¨ ist ein Meronym von ¨X¨, wenn Y ein Teil von X ist. (¨window¨ ist ein Meronym von ¨building¨)
Holonym ¨Y¨ ist ein Holonym von ¨X¨, wenn X ein Teil von Y ist. (¨building¨ ist ein Holonym von ¨window¨)

Es gibt gesonderte Fälle von ¨coordinate terms¨, in denen mehrere Bedingungen zusammenlaufen: ¨Y¨ ist ein coordinate term von ¨X¨, wenn X und Y sich ein Hypernym teilen (¨wolf¨ ist ein coordinate term von ¨dog¨ und ¨dog¨ ist ein coordinate term von ¨wolf¨).

Verben bauen sich in drei Gruppen auf:

Hypernym Das Verb ¨Y¨ ist ein Hypernym vom Verb ¨X¨, wenn die Aktivität X eine Art von Y ist. (¨perceive¨ ist ein Hypernym von ¨listen¨)
Troponym Das Verb ¨Y¨ ist ein Troponym vom Verb ¨X¨, wenn die Aktivität Y der Aktivität X in bestimmter Art entspricht. (¨lisp¨ ist ein Troponym von ¨talk¨)
Entailment Das Verb ¨Y¨ ist ein Entailment von ¨X¨, wenn X nur durch Y bedingt wird. (¨sleep¨ muss erfüllt sein um ¨snore¨ zu bedingen)

Auch in den Verben gibt es die speziellen Fälle von coordinate terms, nämlich die Verben, die sich ein bekanntes Hypernym teilen. (¨lisp¨ und ¨yell¨)

Die Semantik hinter dem System steckt in den Synsets und den Synset members (Wörter) und deren lexikalischen Verbindungen. Ein Beispiel ist das Wort ¨director¨, welches sinngemäß vom Wort ¨direct¨ kommt und diese Worte in einer morphosemantischen Verbindung zueinander stehen. Die Morphologie der Semantik versucht die Worte auf ihre Stammform zu reduzieren und setzt Verbindungen über die Benutzerspizifische Eingabe. Unregelmäßige Vokabeln sind in einer bestimmten Liste gespeichert, die z.B. aus ¨ate¨ ein ¨eat¨ macht.

Verben und Nomen sind in Wordnet nach Hierarchien organisiert, welche sich über die Hypernyme und ¨is a¨ Beziehungen definieren.

dog, domestic dog, Canis familaris

  • canine, canid
    • carnivore
      • placental, placental mammal, eutherian, eutherian mammal
        • mammal
          • vertebrate, craniate
            • chordate
              • animal, animate being, beast, brute, creature, fauna

Die oberste Schicht dieser Hierarchien ist in 25 Anfangsbäume für Nomen und 15 Anfangsbäume für Verben aufgebaut. Alle sind mit dem Anfangs Synset ¨entity¨ verbunden. Hierarchien von Nomen sind dabei sehr viel tiefer strukturiert, als die der Verben.

Adjektive sind nicht in Baumhierarchien strukturiert, sondern in zwei zentrale Antonyme, wie ¨hot¨ oder ¨cold¨ als binäre Pole. Angehängte Synonyme, wie ¨steaming¨ oder ¨chilly¨ verbinden ihre jeweiligen Pole durch ähnliche Beziehungen. Somit können Adjektive viel mehr als Hantelstrukturen, statt als Baumstrukturen dargestellt werden.

Screenshot from 2015-10-27 12:24:41 Screenshot from 2015-10-27 12:24:16

 

 

 

 

 

 

Eintragung in den FB 3 – Informatik

Oktober 26th, 2015

Anscheinend bin ich schon die ganze Zeit in den Fachbereich Informatik eingetragen gewesen. Zum einen konnte ich mich bisher nicht damit in unserer Einrichtung anmelden, zum anderen war heute der letzte Tag, an dem ich das haette tun koennen.
Da war ich doch rechtzeitig zur Stelle


Zur Werkzeugleiste springen