Spracheingabe filtern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zayju
User
Beiträge: 12
Registriert: Mittwoch 22. Januar 2020, 15:43

Mittwoch 22. April 2020, 12:45

Hallo an alle,

Ich habe folgendes Problem: ich arbeite momentan mit der Spracherkennung, was aber mein Problem nicht wirklich deutlicher macht. Also wenn ich etwas sage wird dieser Satz angezeigt. Wenn ich jetzt diesen Satz habe möchte ich dabei aber zum Beispiel nur das 4 Wort oder Buchstaben im Satz haben. Jetzt frage ich mich wie das geht.
PythonProgrammer2.0
User
Beiträge: 12
Registriert: Montag 8. Juli 2019, 15:58

Samstag 23. Mai 2020, 09:38

Für das 4. Wort:

Code: Alles auswählen

# satz ist dein spracheingabenergebnis
# result ist das, was du haben willst
result = satz.split(" ")[3]
Für das vierte Zeichen (ohne Leerzeichen):

Code: Alles auswählen

result = ""
satzList = list(satz)
for i in range(len(satzList)):
    if satzList[i] != " ":
        result = result + satzList[i]
result = list(result)[3]
Ich ziehe als Ergebnis das 3. Element, da Python bei 0 zu zählen beginnt.
Benutzeravatar
__blackjack__
User
Beiträge: 6012
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 23. Mai 2020, 10:28

@PythonProgrammer2.0: Beim ersten Beispiel könnte man das Aufteilen noch begrenzen.

Das zweite Beispiel ist kein Python. Da sind zwei Sachen drin die man in Python nicht macht. 1. ``for i in range(len(sequence)):`` nur um `i` dann als Index in `sequence` zu verwenden ist ein „anti pattern“ weil man direkt über die Elemente von `sequence` iterieren kann, ohne den unnötigen Umweg über einen Index. 2. Das wiederholte addieren von Teilzeichenketten in einer Schleife ist potentiell sehr ineffizient weil Zeichenketten nicht veränderbar sind und deshalb jedes mal eine neue Zeichenkette erstellt werden muss die aus den beiden alten Zeichenketten zusammenkopiert wird. Idiomatisches Python sammelt die Teilzeichenketten in einer Liste oder verwendet einen Generator/Iterator und fügt sie mit der `join()`-Methode auf Zeichenketten zusammen. Nur das Dein nächster Schritt ist aus der Zeichenkette wieder eine Liste zu machen, also ist das auch etwas das man sich sparen kann.

`satzList` ist kein guter Name. Der hält sich nicht an die Konvention das Namen klein_mit_unterstrichen geschrieben werden und Grunddatentypen gehören nicht in Namen.

Aber man braucht diese Liste auch gar nicht, denn auch eine Zeichenkette kann man indexieren und auch in der letzten Zeile nicht:

Code: Alles auswählen

result = ""
satzList = list(satz)
for i in range(len(satzList)):
    if satzList[i] != " ":
        result = result + satzList[i]
result = list(result)[3]

# ->

result = ""
for i in range(len(satz)):
    if satz[i] != " ":
        result = result + satz[i]
result = result[3]
Jetzt ohne den unnötigen Index:

Code: Alles auswählen

result = ""
for character in satz:
    if character != " ":
        result = result + character
result = result[3]
Irgendwie hat man da jetzt die `replace()`-Methode nachprogrammiert, in schlechter:

Code: Alles auswählen

result = satz.replace(" ", "")[3]
long long ago; /* in a galaxy far far away */
Antworten