HATSON

171 days ago by PatrickHammer

%hide from YP import * from Atom import * from Compiler import * from ListPair import * from Variable import * from cStringIO import StringIO import sys sys.setrecursionlimit(100000) def PROLOG(prologCode): prologCode="\n"+prologCode+"\n" code=StringIO(); YP.tell(code); YP.see(YP.StringReader(prologCode)) TermList = Variable(); PseudoCode = Variable() for l1 in parseInput(TermList): for l2 in makeFunctionPseudoCode(TermList, PseudoCode): convertFunctionPython(PseudoCode) YP.seen(); return code.getvalue() Value=lambda v: v.getValue().toQuotedString() AIString=lambda s: s.replace("?","").replace(".","").replace(",","").lower() SetOf=lambda s: AIString(s).split(" ") class _: def __eq__(x,y): return true _=_() #enables haskell like pattern matching in python 
       
def KillGeneralWords(s): Generalwoerter=["jedermann","jemand"] #Verallgemeinerungs-Wörter for a in Generalwoerter: s=s.replace(a,"X") return s def question(s): #führt Prolog Abfragen aus s=KillGeneralWords(s) s=s.replace(" ","") s=s.replace("?-","") A=s.split(").")[0].split("(")[1]; B=s.split("(")[0] s=B+"("+A+")." X=Variable(); Y=Variable(); Rep=lambda A:A.replace("'X'","_").replace("'Y'","_") if "," not in A: #1 Argument Frage: (TODO für n Argumente machen) str="ret='"+A+"' in [Value(X) for l in "+B+"(X)]" else: #2 Argument Frage: str="ret=('"+A.replace(",","','")+"') in [(Value(X),Value(Y)) for l in "+B+"(X,Y)]" str=Rep(str) exec str return ret 
       
sv="" def FACT(x): #sorgt dafür dass Fakten Prolog bekannt gemacht werden und erhalten bleiben global sv x=KillGeneralWords(x) sv+="\n"+x str=PROLOG(sv.replace(" ","")) exec str in globals() 
       
H=lambda M: [M[i:j+1] for i in range(len(M)) for j in range(i,len(M))] #hierachical set h=lambda P,M: [sum([int(" ".join(b) in a)*len(b) for b in H(SetOf(P))]) for a in M] #hierachical matching def maxIndex(M): MAX=max(M); return M.index(max(M)) def Answer(Text,Question): Data=Text.replace(".",",").replace("\n",",").split(",") print AIString(Data[maxIndex(h(Question,Data))]) return AIString(Data[maxIndex(h(Question,Data))]) 
       
def prol(s,kw): #(todo mal n argumentverschachtelung) artikelEtc=["es","der","die","das","eine","ein"] #Artikeln for x in artikelEtc: s=s.replace(" "+x+" "," ").replace(x+" "," ").replace(" "+x," ") start="" if "?" in s: start="?-" s=s.replace("?","") L=["wenn"] #Bedingungswörter M=s.split(" "+L[0]+" ") ret="" ki=0 #keyword_index for m in M: N=m.split(" "+kw[ki]) ret+=kw[ki]+"("+N[0].replace(" ",",") if len(N)>1 and N[1]!="": ret+=N[1].replace(" ",",") ret=ret+"):-" ki+=1 return (start+ret[0:len(ret)-2]+".").replace("(,","(") #python strings #laden immer zu schlampereien ein ;) T=["geht", "ist","dauert","hat","haben","heiße","war","gewann"] #Verben 
       
Mem=[] def Work(s,SENTENCE=""): global T,Mem; s=" "+s; Mem+=s kw=[a for a in s.split(" ") if a in T] return question(prol(s,kw)) if "?" in s else FACT(prol(s,kw)) 
       
###################################### ANWENDUNG: ################################################## 
       
Work("mir geht es gut wenn der tag lang ist") 
       
Work("der tag ist lang") 
       
Work("mir geht es gut?") 
       
True
True
Work("geht es jemand gut?") 
       
True
True
#Die Eingabe ist zwar Deutsch aber folgt trotzdem gewissen Regeln. #Mithilfe meines hierachischen Matchings werden wir nun aber Informationen auch aus einem komplexen Datensatz extrahieren. SENTENCE=""" DeepThought (Schachcomputer) DeepThought war ein Schachcomputer, der von Feng-hsiung Hsu an der Carnegie Mellon University entwickelt wurde. Er wurde benannt nach dem fiktionalen Computer DeepThought aus Douglas Adams Romanreihe Per Anhalter durch die Galaxis. Die erste Version entstand im Mai 1988, eine Vorläuferversion trug den Namen ChipTest. Die Weiterentwicklung des Programms durch IBM erfolgte unter dem Namen Deep Blue. DeepThought gewann die nordamerikanische Computer-Schachmeisterschaft 1988 und die Computer-Schachweltmeisterschaft 1989. Schlagzeilen machte DeepThought 1988 durch einen geteilten 1. Platz beim Open von Long Beach, Kalifornien, bei dem das Programm eine Partie gegen Großmeister Bent Larsen gewinnen konnte, der zu dieser Zeit auf Platz 96 der Weltrangliste stand. Es lief auf einer Sun 4 Workstation und konnte etwa 720.000 Stellungen pro Sekunde berechnen. [1] Im Jahr 1989 verlor DeepThought zwei Partien gegen Garri Kasparow sowie eine Fernschachpartie gegen Michael Valvo, konnte aber eine Turnierpartie gegen Robert Byrne gewinnen und besiegte den Internationalen Meister David Levy in einem Wettkampf deutlich mit 4:0. Die Benennung von Schachprogrammen folgte später dem Beispiel DeepThoughts (so etwa Deep Blue, Deep Fritz und Deep Junior). """ 
       
Work(Answer(SENTENCE,"Was war er?")) 
       
deepthought war ein schachcomputer
deepthought war ein schachcomputer
Work("war deepthought ein opa?") 
       
False
False
Answer(SENTENCE,"Was gewann er?") 
       
deepthought gewann die nordamerikanische computer-schachmeisterschaft
1988 und die computer-schachweltmeisterschaft 1989
deepthought gewann die nordamerikanische computer-schachmeisterschaft 1988 und die computer-schachweltmeisterschaft 1989
Answer(SENTENCE,"Nach was wurde er benannt?") 
       
 er wurde benannt nach dem fiktionalen computer deepthought aus douglas
adams romanreihe per anhalter durch die galaxis
 er wurde benannt nach dem fiktionalen computer deepthought aus douglas adams romanreihe per anhalter durch die galaxis