Vipera Skrevet 18. desember 2007 Del Skrevet 18. desember 2007 (endret) Jeg skal lage et program som tar inn et ord som input og dereter sjekker om dette er et norskt ord. Tenkte å gjøre det ved å sjekke ordet opp mot en liste som består av alle de norske ordene. Problemet er at listen er på formen: ord1 ord2 ord3 ord4 etc Hadde det ikke vært så mang ord hadde jeg lagt de inn i en tuplet eller en liste. Men det blir ekstremt mye jobb når det er så mange ord. Er det noen andre måter jeg kan få programmet til å gå gjennom denne listen(linje for linje å regne hver linje som et element eller noe)? Endret 20. desember 2007 av _Viper_ Lenke til kommentar
zeitgeist Skrevet 18. desember 2007 Del Skrevet 18. desember 2007 Jeg skal lage et program som tar inn et ord som input og dereter sjekker om dette er et norskt ord. Tenkte å gjøre det ved å sjekke ordet opp mot en liste som består av alle de norske ordene. Problemet er at listen er på formen: ord1 ord2 ord3 ord4 etc Hadde det ikke vært så mang ord hadde jeg lagt de inn i en tuplet eller en liste. Men det blir ekstremt mye jobb når det er så mange ord. Er det noen andre måter jeg kan få programmet til å gå gjennom denne listen(linje for linje å regne hver linje som et element eller noe)? Ja, flere. Bruk en dictionary, da går oppslaget meget raskt. Den kan skrives til fil via cPicle eller Pickle eller en annen serialiseringsmodul etterpå. Du kan også bruke en database. anydbm, eller sqlite3 (som er bygget inn i Python 2.5). Lenke til kommentar
Vipera Skrevet 20. desember 2007 Forfatter Del Skrevet 20. desember 2007 Ja, flere. Bruk en dictionary, da går oppslaget meget raskt. Den kan skrives til fil via cPicle eller Pickle eller en annen serialiseringsmodul etterpå. Du kan også bruke en database. anydbm, eller sqlite3 (som er bygget inn i Python 2.5). tror ikke du skjønte helt hva jeg var ute etter, men takk alikevel. Men fant en måte å gjøre det på så problem løst Lenke til kommentar
zeitgeist Skrevet 20. desember 2007 Del Skrevet 20. desember 2007 Ja, flere. Bruk en dictionary, da går oppslaget meget raskt. Den kan skrives til fil via cPicle eller Pickle eller en annen serialiseringsmodul etterpå. Du kan også bruke en database. anydbm, eller sqlite3 (som er bygget inn i Python 2.5). tror ikke du skjønte helt hva jeg var ute etter, men takk alikevel. Men fant en måte å gjøre det på så problem løst Med mindre du mente noe helt annet enn du spurte om, er det mer trolig at du ikke skjønte svaret. Men du poster kanskje løsningsforslaget ditt, så kan vi se på det? Lenke til kommentar
Vipera Skrevet 22. desember 2007 Forfatter Del Skrevet 22. desember 2007 Med mindre du mente noe helt annet enn du spurte om, er det mer trolig at du ikke skjønte svaret. Men du poster kanskje løsningsforslaget ditt, så kan vi se på det? haha, kan godt være at jeg ikke skjønte svaret helt å ja ikke sikkert spørsmålet mitt var så godt heller ved nermere etter tanke. Problemet var at listen var i et eget tekstdokument. Det jeg endte med å gjøre var å importere listen inn i python programmet sånn: importertListe = codecs.open("liste.txt", "r", "utf-8").readlines() Lenke til kommentar
zeitgeist Skrevet 22. desember 2007 Del Skrevet 22. desember 2007 Det jeg endte med å gjøre var å importere listen inn i python programmet sånn:importertListe = codecs.open("liste.txt", "r", "utf-8").readlines() Ok, sett at filen liste.txt 7000 ord linje for linje. Da må du lese inn fila, lage en liste hver gang og attpåtil sammenligne hvert element sekvensielt. Du må potensielt sammeligne 6999 ganger før du får match. Det er en så cpu-hungrig prosess at det trolig er i strid med gjeldende miljøideologi. Hvis dette er noe som skal gjøres mange ganger i et program, blir det uhyggelig ineffektivt. Jeg foreslår noe slikt import sys import os.path import cPickle def make_db(words = 'liste.txt'): # les ord, lag dictionary, lagre som pickle, returner ordliste db = {} for word in open(words): word = word.strip() db[word] = '' word_db = open('liste.db', 'wb') p = cPickle.Pickler(word_db) p.dump(db) word_db.close() return db def read_db(word_db = 'liste.db'): # les inn pickle, returner dictionary f = open(word_db, 'rb') p = cPickle.Unpickler(f) db = p.load() f.close() return db def db_exists(word_db = 'liste.db'): return os.path.exists(word_db) def get_wordlist(): # hvis ordliste DB finnes: hent den, hvis ikke: lag den if db_exists(): return read_db() return make_db() def compare(input_word = ''): # hvis importert som modul wordlist = get_wordlist() if input_word in wordlist: return True return False if __name__ == '__main__': # Hvis kalt fra konsoll input_word = raw_input("Sjekk om ord finnes i orliste: ") print compare(input_word) sys.exit(0) Pickle lagrer datastrukturen som fil. Når du leser den inn har du datastrukturen rede. Vel så bra ville ha vært å bruke en database. Enklere til og med. Dersom orlisten vokser, kan du bare slette .db-filen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå