<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://courses.cs.taltech.ee/w/index.php?action=history&amp;feed=atom&amp;title=Lab_2_example_code_converted_to_give</id>
	<title>Lab 2 example code converted to give - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://courses.cs.taltech.ee/w/index.php?action=history&amp;feed=atom&amp;title=Lab_2_example_code_converted_to_give"/>
	<link rel="alternate" type="text/html" href="http://courses.cs.taltech.ee/w/index.php?title=Lab_2_example_code_converted_to_give&amp;action=history"/>
	<updated>2026-05-21T20:49:01Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>http://courses.cs.taltech.ee/w/index.php?title=Lab_2_example_code_converted_to_give&amp;diff=3408&amp;oldid=prev</id>
		<title>Tanel: Uus lehekülg: &#039;&lt;pre&gt;  intxt=&quot;&quot;&quot;Barack Obama went to China yesterday.  He lives in Grand Hyatt Beijing. This is a superb hotel.&quot;&quot;&quot;   nertable=[   [[&quot;Barack&quot;,&quot;Obama&quot;],&quot;Barack Obama&quot;,&quot;ner_noun&quot;,&quot;h...&#039;</title>
		<link rel="alternate" type="text/html" href="http://courses.cs.taltech.ee/w/index.php?title=Lab_2_example_code_converted_to_give&amp;diff=3408&amp;oldid=prev"/>
		<updated>2015-11-17T16:34:19Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;&amp;lt;pre&amp;gt;  intxt=&amp;quot;&amp;quot;&amp;quot;Barack Obama went to China yesterday.  He lives in Grand Hyatt Beijing. This is a superb hotel.&amp;quot;&amp;quot;&amp;quot;   nertable=[   [[&amp;quot;Barack&amp;quot;,&amp;quot;Obama&amp;quot;],&amp;quot;Barack Obama&amp;quot;,&amp;quot;ner_noun&amp;quot;,&amp;quot;h...&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;
&lt;br /&gt;
intxt=&amp;quot;&amp;quot;&amp;quot;Barack Obama went to China yesterday. &lt;br /&gt;
He lives in Grand Hyatt Beijing. This is a superb hotel.&amp;quot;&amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
nertable=[&lt;br /&gt;
  [[&amp;quot;Barack&amp;quot;,&amp;quot;Obama&amp;quot;],&amp;quot;Barack Obama&amp;quot;,&amp;quot;ner_noun&amp;quot;,&amp;quot;http://en.wikipedia.org/wiki/Barack_Obama&amp;quot;,&amp;quot;person&amp;quot;],&lt;br /&gt;
  [[&amp;quot;China&amp;quot;],&amp;quot;China&amp;quot;,&amp;quot;ner_noun&amp;quot;,&amp;quot;http://en.wikipedia.org/wiki/China&amp;quot;,&amp;quot;country&amp;quot;],&lt;br /&gt;
  [[&amp;quot;Grand&amp;quot;,&amp;quot;Hyatt&amp;quot;,&amp;quot;Beijing&amp;quot;],&amp;quot;Grand Hyatt Beijing&amp;quot;,&amp;quot;ner_noun&amp;quot;,&amp;quot;https://en.wikipedia.org/wiki/Grand_Hyatt_Beijing&amp;quot;,&amp;quot;company&amp;quot;]&lt;br /&gt;
]  &lt;br /&gt;
&lt;br /&gt;
postable=[&lt;br /&gt;
  [[&amp;quot;went&amp;quot;],&amp;quot;go&amp;quot;,&amp;quot;verb&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/go&amp;quot;,&amp;quot;past&amp;quot;],&lt;br /&gt;
  [[&amp;quot;to&amp;quot;],&amp;quot;to&amp;quot;,&amp;quot;preposition&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/to&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;yesterday&amp;quot;],&amp;quot;yesterday&amp;quot;,&amp;quot;adverb&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/yesterday&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;he&amp;quot;],&amp;quot;he&amp;quot;,&amp;quot;pronoun&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/data/web/c/en/this&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;lives&amp;quot;],&amp;quot;live&amp;quot;,&amp;quot;verb&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/live&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;in&amp;quot;],&amp;quot;in&amp;quot;,&amp;quot;preposition&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/in&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;this&amp;quot;],&amp;quot;this&amp;quot;,&amp;quot;pronoun&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/this&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;is&amp;quot;],&amp;quot;be&amp;quot;,&amp;quot;verb&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/type/v/identify_as_belonging_to_a_certain_type&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;superb&amp;quot;],&amp;quot;superb&amp;quot;,&amp;quot;adjective&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/superb&amp;quot;,None],&lt;br /&gt;
  [[&amp;quot;hotel&amp;quot;],&amp;quot;hotel&amp;quot;,&amp;quot;noun&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/hotel&amp;quot;,None]&lt;br /&gt;
]  &lt;br /&gt;
&lt;br /&gt;
idnum=0&lt;br /&gt;
&lt;br /&gt;
# [barack,action1,china]   &amp;quot;to china&amp;quot;, &amp;quot;went ... yesterday&amp;quot;&lt;br /&gt;
# [action1,activity,moveto]&lt;br /&gt;
# [action1,time,past]&lt;br /&gt;
&lt;br /&gt;
# [he,action2, grandhyattbeijing]&lt;br /&gt;
# [action2,activity,live_in]&lt;br /&gt;
# [action2,time,current]&lt;br /&gt;
&lt;br /&gt;
# TODO:&lt;br /&gt;
#sentencetable=[&lt;br /&gt;
#  [[&amp;quot;noun&amp;quot;,&amp;quot;verb&amp;quot;,&amp;quot;noun&amp;quot;],[[0,1,2]]]&lt;br /&gt;
  &lt;br /&gt;
def main(txt):&lt;br /&gt;
  splitted=split_text(txt)&lt;br /&gt;
  #print(&amp;quot;splitted:&amp;quot;)&lt;br /&gt;
  #print(splitted)&lt;br /&gt;
  nerred=ner_text(splitted)&lt;br /&gt;
  #print(&amp;quot;nerred:&amp;quot;)&lt;br /&gt;
  #print(nerred)&lt;br /&gt;
  posed=pos_text(nerred)&lt;br /&gt;
  #print(&amp;quot;posed:&amp;quot;)&lt;br /&gt;
  #print(posed)&lt;br /&gt;
  #pretty_print(posed)&lt;br /&gt;
  rdf=simple_rdf(posed)&lt;br /&gt;
  #print(&amp;quot;rdf:&amp;quot;)&lt;br /&gt;
  #print(rdf)&lt;br /&gt;
  #pretty_print(rdf)&lt;br /&gt;
  &lt;br /&gt;
  print_otter_prefix()&lt;br /&gt;
  otter_print(rdf)&lt;br /&gt;
  print_otter_suffix()&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
def ner_text(slst):&lt;br /&gt;
  rlst=[]&lt;br /&gt;
  for sent in slst:&lt;br /&gt;
    srlst=[]&lt;br /&gt;
    i=0&lt;br /&gt;
    while i&amp;lt;len(sent):&lt;br /&gt;
      tmp=sent_has_name_at(sent,i)&lt;br /&gt;
      if tmp:&lt;br /&gt;
        srlst.append(tmp[0])&lt;br /&gt;
        i=tmp[1]&lt;br /&gt;
      else:&lt;br /&gt;
        srlst.append(sent[i])&lt;br /&gt;
      i+=1  &lt;br /&gt;
    rlst.append(srlst)&lt;br /&gt;
  return rlst&lt;br /&gt;
&lt;br /&gt;
def sent_has_name_at(sent,i):&lt;br /&gt;
  if not sent: return 0&lt;br /&gt;
  if i&amp;gt;=len(sent): return 0&lt;br /&gt;
  for known in nertable:&lt;br /&gt;
    phrase=known[0]&lt;br /&gt;
    j=0&lt;br /&gt;
    while j&amp;lt;len(phrase):&lt;br /&gt;
      if i+j&amp;gt;=len(sent): break&lt;br /&gt;
      if sent[i+j]!=phrase[j]:&lt;br /&gt;
        break&lt;br /&gt;
      j+=1&lt;br /&gt;
    if j==len(phrase):&lt;br /&gt;
      res=[known,i+len(phrase)-1]&lt;br /&gt;
      return res&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pos_text(slst):&lt;br /&gt;
  rlst=[]&lt;br /&gt;
  for sent in slst:&lt;br /&gt;
    srlst=[]&lt;br /&gt;
    i=0&lt;br /&gt;
    while i&amp;lt;len(sent):&lt;br /&gt;
      if type(sent[i])==type([0]): &lt;br /&gt;
        srlst.append(sent[i])&lt;br /&gt;
        i+=1&lt;br /&gt;
        continue&lt;br /&gt;
      tmp=sent_has_pos_at(sent,i)&lt;br /&gt;
      if tmp:&lt;br /&gt;
        srlst.append(tmp[0])&lt;br /&gt;
        i=tmp[1]&lt;br /&gt;
      else:&lt;br /&gt;
        srlst.append(sent[i])&lt;br /&gt;
      i+=1  &lt;br /&gt;
    rlst.append(srlst)&lt;br /&gt;
  return rlst&lt;br /&gt;
&lt;br /&gt;
def sent_has_pos_at(sent,i):&lt;br /&gt;
  if not sent: return 0&lt;br /&gt;
  if i&amp;gt;=len(sent): return 0&lt;br /&gt;
  for known in postable:&lt;br /&gt;
    phrase=known[0]&lt;br /&gt;
    j=0&lt;br /&gt;
    while j&amp;lt;len(phrase):&lt;br /&gt;
      if i+j&amp;gt;=len(sent): break&lt;br /&gt;
      if sent[i+j]!=phrase[j] and sent[i+j].lower()!=phrase[j]:&lt;br /&gt;
        break&lt;br /&gt;
      j+=1&lt;br /&gt;
    if j==len(phrase):&lt;br /&gt;
      res=[known,i+len(phrase)-1]&lt;br /&gt;
      return res&lt;br /&gt;
&lt;br /&gt;
def split_text(txt):&lt;br /&gt;
  sentlst=txt.replace(&amp;quot;,&amp;quot;,&amp;quot; &amp;quot;).split(&amp;quot;.&amp;quot;)&lt;br /&gt;
  wlst=[]&lt;br /&gt;
  for s in sentlst:&lt;br /&gt;
    if not s: continue&lt;br /&gt;
    sp=s.replace(&amp;quot;.&amp;quot;,&amp;quot; &amp;quot;).replace(&amp;quot;\n&amp;quot;,&amp;quot; &amp;quot;).split(&amp;quot; &amp;quot;)&lt;br /&gt;
    tmp=[]&lt;br /&gt;
    for w in sp:&lt;br /&gt;
      w1=w.strip()&lt;br /&gt;
      if w1: tmp.append(w1)      &lt;br /&gt;
    wlst.append(tmp)&lt;br /&gt;
  return wlst&lt;br /&gt;
&lt;br /&gt;
def pretty_print(sentlst):&lt;br /&gt;
  for sent in sentlst:&lt;br /&gt;
    print(&amp;quot;sentence: &amp;quot;)&lt;br /&gt;
    if type(sent)==type([1]):&lt;br /&gt;
      for phrase in sent:&lt;br /&gt;
        print(&amp;quot;  &amp;quot;+str(phrase)) &lt;br /&gt;
  &lt;br /&gt;
def print_otter_prefix():&lt;br /&gt;
  a=&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  % clear automatic strategy selection&lt;br /&gt;
clear(auto).&lt;br /&gt;
&lt;br /&gt;
% use capital letters (A,X,T,...) as vars&lt;br /&gt;
set(prolog_style_variables).&lt;br /&gt;
&lt;br /&gt;
% select the search strategy&lt;br /&gt;
set(hyper_res). % an alternative is to use set(binary_res).&lt;br /&gt;
set(factor).&lt;br /&gt;
&lt;br /&gt;
% select sensible amount of output&lt;br /&gt;
clear(print_given). % uncomment to see input and process&lt;br /&gt;
set(print_kept).  % this is important: prints all generated and kept clauses&lt;br /&gt;
assign(stats_level, 0).&lt;br /&gt;
&lt;br /&gt;
% just make it stop after N secs&lt;br /&gt;
assign(max_seconds, 10).&lt;br /&gt;
&lt;br /&gt;
list(sos).&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  print(a)&lt;br /&gt;
  &lt;br /&gt;
def print_otter_suffix():  &lt;br /&gt;
  a=&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
-rdf(X,&amp;quot;id:type&amp;quot;,&lt;br /&gt;
    &amp;quot;http://conceptnet5.media.mit.edu/web/c/en/person&amp;quot;) |&lt;br /&gt;
 rdf(X,&amp;quot;id:type&amp;quot;,&lt;br /&gt;
    &amp;quot;http://conceptnet5.media.mit.edu/web/c/en/animal&amp;quot;).&lt;br /&gt;
  &lt;br /&gt;
 -rdf(X,&amp;quot;id:type&amp;quot;,&lt;br /&gt;
    &amp;quot;http://conceptnet5.media.mit.edu/web/c/en/animal&amp;quot;) |&lt;br /&gt;
 rdf(X,&amp;quot;id:type&amp;quot;,&lt;br /&gt;
    &amp;quot;mortal&amp;quot;).	  &lt;br /&gt;
    &lt;br /&gt;
 -rdf(X,&amp;quot;id:type&amp;quot;,&lt;br /&gt;
    &amp;quot;http://conceptnet5.media.mit.edu/web/c/en/person&amp;quot;) |&lt;br /&gt;
  rdf(X,&amp;quot;id:CapableOf&amp;quot;,&lt;br /&gt;
    &amp;quot;id:eat&amp;quot;).&lt;br /&gt;
  &lt;br /&gt;
  -rdf(X , &amp;quot;http://conceptnet5.media.mit.edu/web/c/en/live&amp;quot;, Y) | &lt;br /&gt;
  rdf(X,&amp;quot;id:type&amp;quot;, &amp;quot;http://conceptnet5.media.mit.edu/web/c/en/animal&amp;quot;).    &lt;br /&gt;
   &lt;br /&gt;
  -rdf(X,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/type/v/identify_as_belonging_to_a_certain_type&amp;quot;,Y) | &lt;br /&gt;
  -rdf(Y,&amp;quot;id:isobject&amp;quot;, Z) |&lt;br /&gt;
  rdf(X,&amp;quot;id:type&amp;quot;,Z).&lt;br /&gt;
  &lt;br /&gt;
  -rdf(X,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/live&amp;quot;,Y) | &lt;br /&gt;
  -rdf(Y,&amp;quot;id:type&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/hotel&amp;quot;) |&lt;br /&gt;
  -rdf(Y,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/type/v/identify_as_belonging_to_a_certain_type&amp;quot;,Z) |&lt;br /&gt;
  -rdf(Z,&amp;quot;id:extrainfo&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/superb&amp;quot;) | &lt;br /&gt;
  rdf(X,&amp;quot;id:type&amp;quot;,&amp;quot;http://conceptnet5.media.mit.edu/web/c/en/rich&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
end_of_list.&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  print(a)&lt;br /&gt;
&lt;br /&gt;
def otter_print(sentlst):&lt;br /&gt;
  for sent in sentlst:&lt;br /&gt;
    print(&amp;quot;rdf(&amp;quot;)&lt;br /&gt;
    if type(sent)==type([1]):&lt;br /&gt;
      i=0&lt;br /&gt;
      while i&amp;lt;len(sent):&lt;br /&gt;
        phrase=sent[i]&lt;br /&gt;
        if i+1&amp;lt;len(sent): comma=&amp;quot;,&amp;quot;&lt;br /&gt;
        else: comma=&amp;quot;&amp;quot;&lt;br /&gt;
        if type(phrase)==type([1]):&lt;br /&gt;
          print(&amp;quot;  &amp;quot;+&amp;quot;\&amp;quot;&amp;quot;+str(phrase[0])+&amp;quot;\&amp;quot;&amp;quot;+comma)&lt;br /&gt;
        else:&lt;br /&gt;
          print(&amp;quot;  &amp;quot;+&amp;quot;\&amp;quot;&amp;quot;+str(phrase)+&amp;quot;\&amp;quot;&amp;quot;+comma)	&lt;br /&gt;
         &lt;br /&gt;
        i+=1  &lt;br /&gt;
    print(&amp;quot;).&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def simple_rdf(sentlst):&lt;br /&gt;
  done=[]&lt;br /&gt;
  prevsent=None&lt;br /&gt;
  for sent in sentlst:&lt;br /&gt;
    ns=simple_rdf_sentence(sent,prevsent)&lt;br /&gt;
    if ns: &lt;br /&gt;
      done+=ns&lt;br /&gt;
    prevsent=sent&lt;br /&gt;
  return done    &lt;br /&gt;
&lt;br /&gt;
def simple_rdf_sentence(sent,prevsent):&lt;br /&gt;
  verbs=[]&lt;br /&gt;
  adverbs=[]  &lt;br /&gt;
  nouns=[]&lt;br /&gt;
  adjectives=[]  &lt;br /&gt;
  for phrase in sent:&lt;br /&gt;
    if type(phrase)!=type([1]): continue&lt;br /&gt;
    if phrase[2]==&amp;quot;verb&amp;quot;:&lt;br /&gt;
      verbs.append(phrase[3])&lt;br /&gt;
    elif phrase[2]==&amp;quot;adverb&amp;quot;:&lt;br /&gt;
      adverbs.append(phrase[3])  &lt;br /&gt;
    elif phrase[2] in [&amp;quot;ner_noun&amp;quot;,&amp;quot;noun&amp;quot;]:&lt;br /&gt;
      nouns.append(phrase[3])      &lt;br /&gt;
    elif phrase[2] in [&amp;quot;pronoun&amp;quot;]:&lt;br /&gt;
      candidates=get_candidate_nouns(prevsent)&lt;br /&gt;
      if candidates and len(candidates)==1:&lt;br /&gt;
        nouns.append(candidates[0])   &lt;br /&gt;
      elif candidates:&lt;br /&gt;
        nouns.append(candidates)        &lt;br /&gt;
    elif phrase[2] in [&amp;quot;adjective&amp;quot;]:&lt;br /&gt;
      adjectives.append(phrase[3])    &lt;br /&gt;
  if verbs and len(nouns)&amp;gt;1:&lt;br /&gt;
    if adverbs:&lt;br /&gt;
      lid=create_local_id()&lt;br /&gt;
      rdf=[[nouns[0],&amp;quot;id:action&amp;quot;,lid],&lt;br /&gt;
           [lid,&amp;quot;id:isactivity&amp;quot;,verbs[0]],  &lt;br /&gt;
           [lid,&amp;quot;id:extrainfo&amp;quot;,adverbs[0]] ]&lt;br /&gt;
    elif adjectives:&lt;br /&gt;
      lid=create_local_id()&lt;br /&gt;
      rdf=[[nouns[0],verbs[0],lid],&lt;br /&gt;
           [lid,&amp;quot;id:isobject&amp;quot;,nouns[1]],  &lt;br /&gt;
           [lid,&amp;quot;id:extrainfo&amp;quot;,adjectives[0]] ]       &lt;br /&gt;
    else:&lt;br /&gt;
      rdf=[[nouns[0],verbs[0],nouns[1]]]      &lt;br /&gt;
  else:&lt;br /&gt;
    rdf=None    &lt;br /&gt;
  return rdf&lt;br /&gt;
&lt;br /&gt;
def get_candidate_nouns(sent):&lt;br /&gt;
  lst=[]&lt;br /&gt;
  for phrase in sent:&lt;br /&gt;
    if phrase[2] in [&amp;quot;ner_noun&amp;quot;,&amp;quot;noun&amp;quot;]:&lt;br /&gt;
      lst.append(phrase[3])&lt;br /&gt;
  return lst&lt;br /&gt;
&lt;br /&gt;
def create_local_id():&lt;br /&gt;
  global idnum&lt;br /&gt;
  idnum+=1&lt;br /&gt;
  return &amp;quot;id:local_&amp;quot;+str(idnum)&lt;br /&gt;
  &lt;br /&gt;
main(intxt)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tanel</name></author>
	</entry>
</feed>