Seite 1 von 1
Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Donnerstag 14. April 2016, 18:44
von marena
Hallo!
ich habe ein Lexikon "lex". Ich möchte prüfen, ob Wörter, die in der Liste "words" stehen einen Kex in "Lex" haben.
ich habe hier schon einmal "words" mit der Funktion Counter in Verbindung, da ich die Vorkommen von Counter in words auch zählen möchte.
Mit den For-Schleifen unten möchte ich prüfen, ob i (also das jeweilige Wort) in den Values von "lex", also(kateg) ist. Und das im allerletzen Schritt ausgeben lassen.
Code: Alles auswählen
for jedes, kateg in lex.items():
for i,k in Counter(words).items():
if i in kateg:
print(i)
print (jedes[[kateg][i]])
Leider wird mir dort immer folgender Fehler angezeigt: list indices must be integers, not str
Wie kann ich das lösen? Kann man das irgendwie anders audrücken, als mit meiner Formulierung in der letzten Zeile??
Wäre euch wirklich super dankbar!
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Donnerstag 14. April 2016, 19:36
von marena
okay, Lösung nach tausend mal hin und her^^:
Code: Alles auswählen
list_of_keys = lexicon.keys()
#for k in list_of_keys:
# print(str(k) + ":" + str(lexicon[k]))
for teil in lexicon.values():
#print(teil)
for t in teil:
for element in wort:
if element == t:
new.append(t)
for k in list_of_keys:
if t in str(lexicon[k]):
print(k,t)
from collections import Counter
Counter(new)
die variablen haben sich mit der Zeit umbenannt^^...aber man sieht ja was passiert, oder?-....LG
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Donnerstag 14. April 2016, 20:51
von BlackJack
@marena: Die Variablen sind vor allem schlecht benannt und eine Zeichenkette auf vorhandensein in der Zeichenkettendarstellung einer Liste zu testen ist gruselig kaputt.
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Freitag 15. April 2016, 07:09
von Sirius3
@marena: die Datenstruktur sieht falsch aus. Woher kommt eigentlich lexicon? Eigentlich willst Du es ja umgedreht haben, dass die Values von lexicon Keys und die Keys Values sind:
Code: Alles auswählen
# Umdrehen des Woerterbuchs
reverse_lexicon = defaultdict(list)
for key, words in lexicon.items():
for word in words:
reverse_lexicon[word].append(key)
Dann sparst Du Dir die hälfte der for-Schleifen und der Code wird klarer, was der eigentlich macht:
Code: Alles auswählen
for element in wort:
if element in reverse_lexicon:
new.append(element)
for key in reverse_lexicon[element]:
print(key, element)
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Montag 18. April 2016, 09:44
von marena
Hey! Vielen vielen Dank für die Verbesserung! Leider bekomme ich mein Probelm dadurch leider noch nicht so richtig gelöst :/...
Ich möchte eig nur, dass dann hinter
paeuschen: 1 "pause" steht
und hinter
stunden: 1 "zeit"
also eigentlich nur, dass nach jedem gezählten Synonym das "Grundwort" angezeigt wird. ...
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Montag 18. April 2016, 17:44
von Hyperion
Woran scheiterst Du denn noch? Zeig doch mal Deinen Code!
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Dienstag 19. April 2016, 17:13
von marena
Hey! Wie schon oben beschrieben möchte ich gerne eine Ausge in folgender Form erzeugen:
paeuschen: 1 pause
...bisher schaffe ich es aber immer nur separat von einander folgende ausgaben zu bekommen:
paeuschen:1
paeschen , pause
...und hier jetzt der Code, an dem ich schon die ganze zeit rumwerke :/
Code: Alles auswählen
lexicon={"pause":("pause","break","paeuschen", "intermezzo", "ruhephase"),
"arbeiten":("arbeiten","taetig", "malochen", "lernen"),
"zeit":("zeit","stunden","tag")}
text= "ich muss ertmal eine kleine ruhephase tag machen am tag, nach stunden pause. ich war den ganzen tag arbeiten und lernen, ein kleines paeuschen tut da schon gut, ich hatte naemlich heute gar keine pause, ich war nur arbeiten."
wort=re.findall(r'(\w+)',str(text))
syn=[]
probe={}
ja=[]
list_of_keys = lexicon.keys()
for teil in lexicon.values():
for t in teil:
for element in wort:
if element == t:
syn.append(t)
for k in list_of_keys:
if t in str(lexicon[k]):
ja.append(t)
print(ja)
from collections import Counter
hier=(Counter(syn))
#print(hier)
# Umdrehen des Woerterbuchs
from collections import defaultdict
reverse_lexicon = defaultdict(list)
for key, words in lexicon.items():
for word in words:
reverse_lexicon[word].append(key)
print(reverse_lexicon)
from collections import Counter
new={}
#print(wort)
#or var in reverse_lexicon:
# if var in wort:
for var in wort:
if var in reverse_lexicon:
#print(element)
#new.append(var)
#print(reverse_lexicon[var])
new[var]=reverse_lexicon[var]
print(new)
#Counter(new):
#for i in Counter(new):
# for e in reverse_lexicon:
# print(i)
entschuldigt, dass es ein bisschen chaotisch aussieht, aber wie gesagt, ich fummel da schon eine Weile rum und komme dem Ziel einfach nicht näher :/
Würd mich freuen, wenn ihr euch das nochmal anschauen könntet...LG
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Dienstag 19. April 2016, 18:24
von Sirius3
@marena: das Chaos in Deinem Code behindert Dich selbst beim Finden der richtigen Lösung, daher immer sauberen Code schreiben. Imports sollten immer ganz oben stehen. re wird gar nicht importiert. Die Werte von lexicon sollten Listen und keine Tuple sein. wort sollte eigentlich woerter oder words heißen, da es ja viele Wörter enthält. str auf einen String aufzurufen ist unsinnig. Dann willst Du die Anzahl der Wörter zählen und alles danach ausgeben:
Code: Alles auswählen
import re
from collections import Counter, defaultdict
lexicon={
"pause": ["pause","break","paeuschen", "intermezzo", "ruhephase"],
"arbeiten": ["arbeiten","taetig", "malochen", "lernen"],
"zeit": ["zeit","stunden","tag"]
}
# Umdrehen des Woerterbuchs
reverse_lexicon = defaultdict(list)
for key, words in lexicon.items():
for word in words:
reverse_lexicon[word].append(key)
text = "ich muss ertmal eine kleine ruhephase tag machen am tag, nach stunden pause. ich war den ganzen tag arbeiten und lernen, ein kleines paeuschen tut da schon gut, ich hatte naemlich heute gar keine pause, ich war nur arbeiten."
words = Counter(re.findall(r'(\w+)', text))
for word, count in words.items():
print word, count, reverse_lexicon.get(word, '??')
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Dienstag 19. April 2016, 18:54
von marena
Das ist super gut! Vielen vielen Dank! Ich fürchte ich wäre nie darauf gekommen!...gibt es jetzt nur noch eine Methode, mit der ich die Fälle mit "??" einfach löschen kann??^^...Sorry, aber dann wäre ich überglücklich ...
Re: Wörter aus Liste einem Key aud Dictionary zuordnen
Verfasst: Dienstag 19. April 2016, 18:58
von marena
Ah, ich habs!!!!

))))))
Code: Alles auswählen
for word, count in words.items():
if word in reverse_lexicon:
print word, count, reverse_lexicon.get(word)
Das passt doch, oder??^^
ich bin euch so unglaublich dankbar!!! Ich würd euch ja gern mal auf nen Kaffee einladen ^^...