Vinnaren i pepparkakshustävlingen!
2009-02-20, 22:49
  #1
Medlem
temps avatar
Hej!

Programmerar nu en chattbot och det den gör kort och gott är att den upprepar det man säger fast byter ut orden du/jag/din osv..

Exempel:

Bot: Hur mår du?
Jag: Jag är förkyld.
Bot: Jaså, DU är förkyld, än sen?
Jag: Din näsa är ful.
Bot: Jaså, MIN näsa är ful, än sen?
Jag: Mina nerver klarar inte detta.
Bot: Jaså, DINA nerver klarar inte detta.

Ja hoppas ni förstår. Och detta ordutbytet ska ske via inläsning från en vanlig textfil där orden redan finns inlagda i formatet:

jag/du
mina/dina
mig/dig

Det jag försöker göra nu är att på ett enkelt sätt få igång ordutbytet.
Jag har försökt på många olika sätt men är osäker på hur jag ska göra.

Har försökt läsa in textfilen i listor och dictionaries men får inget till att funka.

Jag har nu läst in filen, strippat den med readline() funktionen och läst in raderna i listor men vet inte vart jag ska ta mig därifrån.

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..
Måste ju på något sätt få datorn att förstå att när ett ord uppfattas ska den byta ut mot ordet på andra sidan "/"-tecknet.

Någon som har något tips på hur jag ska kunna genomföra detta ordutbytet på ett bra sätt? Behöver inte fungera som ovanstående.

Tack på förhand!
__________________
Senast redigerad av temp 2009-02-20 kl. 22:52.
Citera
2009-02-22, 13:57
  #2
Medlem
Var ett tag sen jag höll på med python, så jag kommer inte ihåg syntaxen riktigt, men jag hoppas att du förstår ändå.


Kod:
lista = "en jättelång lista med en massa ord uppdelat på en massa rader
en jättelång lista med en massa ord uppdelat på en massa rader
en jättelång lista med en massa ord uppdelat på en massa rader
en jättelång lista med en massa ord uppdelat på en massa rader
en jättelång lista med en massa ord uppdelat på en massa rader"


for rad in lista
     //variabeln "rad" är en array där varje element är en sträng med värdet "en jättelång lista med...."
     for ord in rad
     //variabeln "ord" är en array där varje element är en sträng där första elementet har värdet "en", andra elementet => "jättelång".. osv osv.
          for tecken in ord
          //variablen tecken är en array som vars första element => är första tecknet i första ordet, andra elementet => andra tecknet i första ordet osv osv..

På detta sätt kan du bryta ned en lång lista till lättanvända delar.

så i ditt fall så borde du kunna använda någonting 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 använda någonting liknande detta:
Kod:
ny_rad = ''
for ord in content
    if ord == 'jag'
        ny_rad += 'du'
    else
        ny_rad += ord
Det där spricker ganska så fort då han vill läsa vilka ord som skall bytas ut och vilket som är det ord som ersätter via en inläsning av en textfil då du "hårdkodar" in orden.
Citera
2009-02-22, 19:01
  #4
Medlem
Förvisso. Jag skrev förstås inte vad jag menade.

Nåja. Detta är hur man på ett lätt sätt hittar specifika ord iaf. Det borde ganska lätt gå att bygga upp ett förhållandevis simpelt system, med detta som princip, som inte klassas som hårdkodat.
Citera
2009-02-23, 02:18
  #5
Medlem
Det borde fungera med dict där du har båda 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 stöter på finns som nyckel:

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

Kanske inte den snyggaste lösningen. Speciellt inte att lagra samma information två gånger.
Citera
2009-02-23, 10:54
  #6
Medlem
temps avatar
Citat:
Ursprungligen postat av Parmesanost
Det borde fungera med dict där du har båda 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 stöter på finns som nyckel:

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

Kanske inte den snyggaste lösningen. Speciellt inte att lagra samma information två gånger.


Det där med dictionary hade jag helt glömt bort. Ska absolut testas. Hör av mig om hur det går!
Citera
2009-03-02, 19:02
  #7
Medlem
Citat:
Ursprungligen postat av temp
Det där med dictionary hade jag helt glömt bort. Ska absolut testas. Hör av mig om hur det går!
Hur går det då?
Citera
2009-04-19, 21:07
  #8
Medlem
War Skeletons avatar
Påminner mig om "spelet" Doktorn eller vad det nu hette som man satt och lekte med i mellanstadiet
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback