2009-02-20, 22:49
  #1
Medlem
temps avatar
Hej!

Programmerar nu en chattbot och det den gr kort och gott r att den upprepar det man sger fast byter ut orden du/jag/din osv..

Exempel:

Bot: Hur mr du?
Jag: Jag r frkyld.
Bot: Jas, DU r frkyld, n sen?
Jag: Din nsa r ful.
Bot: Jas, MIN nsa r ful, n sen?
Jag: Mina nerver klarar inte detta.
Bot: Jas, DINA nerver klarar inte detta.

Ja hoppas ni frstr. Och detta ordutbytet ska ske via inlsning frn en vanlig textfil dr orden redan finns inlagda i formatet:

jag/du
mina/dina
mig/dig

Det jag frsker gra nu r att p ett enkelt stt f igng ordutbytet.
Jag har frskt p mnga olika stt men r osker p hur jag ska gra.

Har frskt lsa in textfilen i listor och dictionaries men fr inget till att funka.

Jag har nu lst in filen, strippat den med readline() funktionen och lst in raderna i listor men vet inte vart jag ska ta mig drifrn.

Kod:
    infil = open("utbytesord.txt", "r")

    content = infil.readline().rsplit("/")

    orden = []
    while content!=[""]:
        orden.append((content[0], content[1]))
        content = infil.readline().rsplit("/")

P position 0 i listan ligger ("Jag", "du"), p position 2 ("mina", "dina") osv..
Mste ju p ngot stt f datorn att frst att nr ett ord uppfattas ska den byta ut mot ordet p andra sidan "/"-tecknet.

Ngon som har ngot tips p hur jag ska kunna genomfra detta ordutbytet p ett bra stt? Behver inte fungera som ovanstende.

Tack p frhand!
__________________
Senast redigerad av temp 2009-02-20 kl. 22:52.
Citera
2009-02-22, 13:57
  #2
Medlem
Var ett tag sen jag hll p med python, s jag kommer inte ihg syntaxen riktigt, men jag hoppas att du frstr nd.


Kod:
lista = "en jttelng lista med en massa ord uppdelat p en massa rader
en jttelng lista med en massa ord uppdelat p en massa rader
en jttelng lista med en massa ord uppdelat p en massa rader
en jttelng lista med en massa ord uppdelat p en massa rader
en jttelng lista med en massa ord uppdelat p en massa rader"


for rad in lista
     //variabeln "rad" r en array dr varje element r en strng med vrdet "en jttelng lista med...."
     for ord in rad
     //variabeln "ord" r en array dr varje element r en strng dr frsta elementet har vrdet "en", andra elementet => "jttelng".. osv osv.
          for tecken in ord
          //variablen tecken r en array som vars frsta element => r frsta tecknet i frsta ordet, andra elementet => andra tecknet i frsta ordet osv osv..

P detta stt kan du bryta ned en lng lista till lttanvnda delar.

s i ditt fall s borde du kunna anvnda ngonting liknande detta:
Kod:
ny_rad = ''
for ord in content
    if ord == 'jag'
        ny_rad += 'du'
    else
        ny_rad += ord
__________________
Senast redigerad av Antant 2009-02-22 kl. 14:06.
Citera
2009-02-22, 17:57
  #3
Medlem
Citat:
Ursprungligen postat av Antant
s i ditt fall s borde du kunna anvnda ngonting liknande detta:
Kod:
ny_rad = ''
for ord in content
    if ord == 'jag'
        ny_rad += 'du'
    else
        ny_rad += ord
Det dr spricker ganska s fort d han vill lsa vilka ord som skall bytas ut och vilket som r det ord som erstter via en inlsning av en textfil d du "hrdkodar" in orden.
Citera
2009-02-22, 19:01
  #4
Medlem
Frvisso. Jag skrev frsts inte vad jag menade.

Nja. Detta r hur man p ett ltt stt hittar specifika ord iaf. Det borde ganska ltt g att bygga upp ett frhllandevis simpelt system, med detta som princip, som inte klassas som hrdkodat.
Citera
2009-02-23, 02:18
  #5
Medlem
Det borde fungera med dict dr du har bda orden som nycklar:

Kod:
    
    content = infile.readline().rsplit("/")

    words = dict()
    while content!=[""]:
        words[content[0]] = content[1]
        words[content[1]] = content[0]
        content = infile.readline().rsplit("/")

Sen kan kolla om ordet du stter p finns som nyckel:

Kod:
if word in words:
    print words[word]

Kanske inte den snyggaste lsningen. Speciellt inte att lagra samma information tv gnger.
Citera
2009-02-23, 10:54
  #6
Medlem
temps avatar
Citat:
Ursprungligen postat av Parmesanost
Det borde fungera med dict dr du har bda orden som nycklar:

Kod:
    
    content = infile.readline().rsplit("/")

    words = dict()
    while content!=[""]:
        words[content[0]] = content[1]
        words[content[1]] = content[0]
        content = infile.readline().rsplit("/")

Sen kan kolla om ordet du stter p finns som nyckel:

Kod:
if word in words:
    print words[word]

Kanske inte den snyggaste lsningen. Speciellt inte att lagra samma information tv gnger.


Det dr med dictionary hade jag helt glmt bort. Ska absolut testas. Hr av mig om hur det gr!
Citera
2009-03-02, 19:02
  #7
Medlem
Citat:
Ursprungligen postat av temp
Det dr med dictionary hade jag helt glmt bort. Ska absolut testas. Hr av mig om hur det gr!
Hur gr det d?
Citera
2009-04-19, 21:07
  #8
Medlem
War Skeletons avatar
Pminner mig om "spelet" Doktorn eller vad det nu hette som man satt och lekte med i mellanstadiet
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in