ArreMedlem sedan juli 200370 inlägg Halloj!
Jo, tänkte göra ett konversationsprogram där användaren kan skriva vanlig text och datorn svarar tbx med olika fraser osv.
Jag kommer att ha 2 st. vektorer:
1. vektor 1 innehåller ordpar dvs. din/min, jag/du.. om användaren skriver ett ord som finns med i en av ordparen så ersätter programmet det ordet med det andra vid utskrivningen.
Tex. Jag mår dåligt! --> Du mår dåligt? osv :D
2. vektor 2 innehåller nyckelord och motsvarande fraser. Om ett ord matchar en av nyckelorden så skrivs den frasen ut.
Tänkte splitta texten som användaren skriver in och lägga varje ord i en ArrayList. Kan man då jämföra innehållet i varje element hos denna ArrayList (dvs varje ord i meningen) med innehållet i varje element hos de andra två vektorerna? hur går man tillväga i så fall?
Jag har precis sketchat på hur programmet kan tänkas fungera.. skulle vara tacksam om ni kunde ge mig några tips lr råd :)
Tack på förhand!
LimeMedlem sedan sep. 2001961 inlägg Att söka i vektorer på det sättet är onödigt kraftkrävande.
Titta istället på HashMap och HashSet. Ordet som användaren skriver in och ordet som ska sökas upp motsvara nyckel och objekt. Borde gå lite fortare.
Sedan borde du kanske fundera på att inte analysera ord för ord utan istället analysera det som användaren matat in och bryta upp det i meningens olika satsdelar.
Om användaren t.ex skriver "Jag mår dåligt", "Mår dåligt", eller på Yodianska "Dåligt jag mår" så kan man, om man klurar lite, ändå få fram samma...
Kul att det fortfarande görs Eliza-program... ;-)
ArreMedlem sedan juli 200370 inlägg Tack för tipset Lima!
Gick och tittade runt i javadocen o hittade HashMap/HashSet men förstod inte direkt dess funktionalitet. Såg dock en metod i HashSet som såg ut att vara häftigt nämligen "contains(Object o)".
Haha jo, vi måste göra en uppgift i java programmering o det fanns runt 100 olika program att välja mellan.. tyckte att konversationsprogrammet var roligast :D
LimeMedlem sedan sep. 2001961 inlägg Mmm... men det är nog inte just HashSet du bör använda i det här fallet...
Vad du vill göra är matcha ihop två ord.
Om du t.ex. skriver "Jag mår dåligt" så vill du hitta ordet "Jag" för att ersätta det med "Du".
I HashMap:en som innehåller "ersättningsord" så har du då lagrat följande.
(pseudokod)
HashMap replacements = new HashMap();
replacements.add("jag", "du");
replacements.add("du", "jag");
...
(Smartast är att göra en lista... t.ex. en property-fil eller ett resource-bundle.)
Utifrån meningen "Jag mår dåligt" kan du då blocka fram ordet "jag" och ärsätta med "du" och enkelt svara "Varför mår du dåligt?" eller "Hur mår du dåligt?"
ArreMedlem sedan juli 200370 inlägg Aha underbart! nu vet jag hur den fungerar :)
Jo precis Lima, hade tänkte och ha alla dessa ord i en fil.. vid programstart tas dessa ut med en split metod och lägger dem i en ArrayList. Sen så tar jag väl och kör HashMap metoden som du visade mig ovan, i så fall hade jag tänkt se hur HashMap classen används när jag har orden i olika element i ArrayListen.
LimeMedlem sedan sep. 2001961 inlägg Skit i Splitmetoden... kolla på "ResourceBundle" och Properties istället.
Varför gå över ån efter vatten?
Och så är det Lime... inte Lima. Det ena är en frukt det andra är en stad.