<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Nlp.py</id>
	<title>Nlp.py - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Nlp.py"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Nlp.py&amp;action=history"/>
	<updated>2026-11-07T01:05:59Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Nlp.py&amp;diff=15610&amp;oldid=prev</id>
		<title>Tammet: Uus lehekülg: &#039;&lt;pre&gt; # nlp.py # # this is a trivial English-to-reasoner-input converter. # # Steps in parsing: # split the text into sentences and then sentences to words (tokens) # then parse...&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Nlp.py&amp;diff=15610&amp;oldid=prev"/>
		<updated>2019-03-13T12:54:06Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;&amp;lt;pre&amp;gt; # nlp.py # # this is a trivial English-to-reasoner-input converter. # # Steps in parsing: # split the text into sentences and then sentences to words (tokens) # then parse...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# nlp.py&lt;br /&gt;
#&lt;br /&gt;
# this is a trivial English-to-reasoner-input converter.&lt;br /&gt;
#&lt;br /&gt;
# Steps in parsing:&lt;br /&gt;
# split the text into sentences and then sentences to words (tokens)&lt;br /&gt;
# then parse the .-ending and ?-ending sentences separately.&lt;br /&gt;
# Sentences are assumed to be either with the fixed structure like&lt;br /&gt;
#&lt;br /&gt;
# John is a father of Andrew.&lt;br /&gt;
#&lt;br /&gt;
#   where we look for word followed by &amp;quot;of&amp;quot; as predicate&lt;br /&gt;
#   and assume the first and last words are arguments, hence&lt;br /&gt;
#   we build&lt;br /&gt;
#   [&amp;quot;cfather&amp;quot;,&amp;quot;cjohn&amp;quot;,&amp;quot;candrew&amp;quot;]&lt;br /&gt;
#   and we convert to reasoner line&lt;br /&gt;
#   cfather(cJohn,cAndrew).&lt;br /&gt;
#   where the &amp;quot;c&amp;quot; is for avoiding capitals to &lt;br /&gt;
#   thought of as variables.&lt;br /&gt;
#&lt;br /&gt;
# or &lt;br /&gt;
#&lt;br /&gt;
# Andrew is a man.&lt;br /&gt;
#   where we check that it contains no &amp;quot;of&amp;quot;&lt;br /&gt;
#   and assume the last word is the single-arg predicate&lt;br /&gt;
#   and the firs is its arg&lt;br /&gt;
#   we build&lt;br /&gt;
#   [&amp;quot;cman&amp;quot;,&amp;quot;candrew&amp;quot;]&lt;br /&gt;
#   and we convert to reasoner line&lt;br /&gt;
#   cman(cAndrew).&lt;br /&gt;
#&lt;br /&gt;
# or questions like&lt;br /&gt;
# &lt;br /&gt;
# Who is the father of Andrew?&lt;br /&gt;
#&lt;br /&gt;
#   where we check if the first word is &amp;quot;who&amp;quot; or &amp;quot;what&amp;quot;&lt;br /&gt;
#   and assume the last word is the second argument&lt;br /&gt;
#   we build&lt;br /&gt;
#   [[&amp;quot;-cfather&amp;quot;,&amp;quot;X1&amp;quot;,&amp;quot;candrew&amp;quot;],[&amp;quot;ans&amp;quot;,&amp;quot;X1&amp;quot;]]&lt;br /&gt;
#   and we convert to the reasoner line&lt;br /&gt;
#   -cfather(X1,cAndrew) | ans(X1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
intext=&amp;quot;John is a father of Andrew. Andrew is a man. Who is the father of Andrew?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def main(txt):&lt;br /&gt;
  tmp=parse(txt)&lt;br /&gt;
  reasonertext=&amp;quot;&amp;quot;&lt;br /&gt;
  for tokenlst in tmp:&lt;br /&gt;
    sentparsed=parse_sentence(tokenlst)&lt;br /&gt;
    #print(&amp;quot;sentparsed in main&amp;quot;,sentparsed)&lt;br /&gt;
    reasonerline=make_reasoner_line(sentparsed)&lt;br /&gt;
    reasonertext+=reasonerline+&amp;quot;\n&amp;quot;&lt;br /&gt;
  print(reasonertext)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
def parse(txt):&lt;br /&gt;
  tmp=txt.replace(&amp;quot;.&amp;quot;,&amp;quot; . &amp;quot;)&lt;br /&gt;
  tmp=tmp.replace(&amp;quot;?&amp;quot;,&amp;quot; ? &amp;quot;)&lt;br /&gt;
  tmp=tmp.replace(&amp;quot;!&amp;quot;,&amp;quot; ! &amp;quot;)&lt;br /&gt;
  tokens=tmp.split()&lt;br /&gt;
  sentences=[]&lt;br /&gt;
  sent=[]&lt;br /&gt;
  for token in tokens:    &lt;br /&gt;
    if token in [&amp;quot;.&amp;quot;,&amp;quot;?&amp;quot;,&amp;quot;!&amp;quot;]:&lt;br /&gt;
      sent.append(token)&lt;br /&gt;
      sentences.append(sent)&lt;br /&gt;
      sent=[]&lt;br /&gt;
    else:&lt;br /&gt;
      sent.append(token)      &lt;br /&gt;
  return sentences&lt;br /&gt;
&lt;br /&gt;
def parse_sentence(tokenlst):&lt;br /&gt;
  if tokenlst[-1]==&amp;quot;?&amp;quot;:&lt;br /&gt;
    return parse_question_sentence(tokenlst[:-1])&lt;br /&gt;
  else:&lt;br /&gt;
    return parse_fact_sentence(tokenlst[:-1])&lt;br /&gt;
&lt;br /&gt;
def parse_fact_sentence(tokenlst):&lt;br /&gt;
  #print(&amp;quot;tokenlst for parse_fact_sentence&amp;quot;,tokenlst)&lt;br /&gt;
  if not(&amp;quot;of&amp;quot; in tokenlst):&lt;br /&gt;
    return parse_type_fact_sentence(tokenlst)&lt;br /&gt;
  of_loc=tokenlst.index(&amp;quot;of&amp;quot;)&lt;br /&gt;
  pred=makeconst(tokenlst[of_loc-1]) &lt;br /&gt;
  arg1=makeconst(tokenlst[0])&lt;br /&gt;
  arglast=makeconst(tokenlst[-1])&lt;br /&gt;
  return [pred,arg1,arglast]&lt;br /&gt;
  &lt;br /&gt;
def parse_type_fact_sentence(tokenlst):&lt;br /&gt;
  #print(&amp;quot;tokenlst for parse_type_fact_sentence&amp;quot;,tokenlst)&lt;br /&gt;
  if &amp;quot;of&amp;quot; in tokenlst: return None  &lt;br /&gt;
  pred=makeconst(tokenlst[-1]) &lt;br /&gt;
  arg1=makeconst(tokenlst[0])&lt;br /&gt;
  return [pred,arg1]  &lt;br /&gt;
&lt;br /&gt;
def parse_question_sentence(tokenlst):&lt;br /&gt;
  #print(&amp;quot;tokenlst for parse_question_sentence&amp;quot;,tokenlst)&lt;br /&gt;
  of_loc=tokenlst.index(&amp;quot;of&amp;quot;)&lt;br /&gt;
  if not of_loc: return None&lt;br /&gt;
  pred=makeconst(tokenlst[int(of_loc)-1]) &lt;br /&gt;
  arg1=&amp;quot;X1&amp;quot; &lt;br /&gt;
  arglast=makeconst(tokenlst[-1])&lt;br /&gt;
  return [[&amp;quot;-&amp;quot;+pred,arg1,arglast],[&amp;quot;ans&amp;quot;,&amp;quot;X1&amp;quot;]]&lt;br /&gt;
  &lt;br /&gt;
def make_reasoner_line(lst):  &lt;br /&gt;
  #print(&amp;quot;make_reasoner_line input&amp;quot;,lst)  &lt;br /&gt;
  if not lst: return &amp;quot;&amp;quot;&lt;br /&gt;
  if type(lst[0])==list:&lt;br /&gt;
    # rule&lt;br /&gt;
    s=&amp;quot;&amp;quot;&lt;br /&gt;
    for part in lst:&lt;br /&gt;
      if s: s+=&amp;quot; | &amp;quot;&lt;br /&gt;
      s+=make_reasoner_atom(part)     &lt;br /&gt;
    return s+&amp;quot;.&amp;quot;&lt;br /&gt;
  else:&lt;br /&gt;
    # fact&lt;br /&gt;
    return make_reasoner_atom(lst)+&amp;quot;.&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
def make_reasoner_atom(lst):&lt;br /&gt;
  if not lst: return &amp;quot;&amp;quot;&lt;br /&gt;
  s=&amp;quot;&amp;quot;&lt;br /&gt;
  for el in lst[1:]:    &lt;br /&gt;
    if s: s+=&amp;quot;,&amp;quot;&lt;br /&gt;
    s+=el&lt;br /&gt;
  s=lst[0]+&amp;quot;(&amp;quot;+s+&amp;quot;)&amp;quot;  &lt;br /&gt;
  return s&lt;br /&gt;
  &lt;br /&gt;
def makeconst(s):&lt;br /&gt;
  return &amp;quot;c&amp;quot;+s&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
main(intext)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>