Lookup mit Ergebnis aus Split Property

Hallo,

es handelt sich um unser Projekt 1531.
Ich möchte die Hauttyp Angabe gerne splitten und an Hand eines gesplitteten wertes in einer Lookup Tabelle einen Wert übergeben.
Das habe ich wie folgt versucht zu lösen:
zu erst zähle ich wie viele Hauttypen vorhanden sind.
$count_skin_type
Truth Expression
true
Mapping Expression
int(count(list(split(#skin_type, ", "))))

eine Property die nun die Hauttypen splittet. $split_skintype
Truth Expression
str(#skin_type) != ""
Mapping Expression
split(#skin_type, ", ")
Property Output (Vocabularies)

Nun möchte ich mit der Property $skin_type1 nur den ersten Hauttyp verwenden

Property: $skin_type1

Truth Expression
int($count_skin_type) > 1
Mapping Expression

Property Output (Vocabularies)
Noun: [split_skintype.Best(1)]
Adjective:
Headnoun:

Dieser Wert wird im Text auch korrekt ausgegeben.

Was muss ich jetzt noch machen, damit ich diesen Wert verwenden kann um ein Lookup zu ermöglichen.
Folgendes habe ich versucht.

Property: $lookup_hauttyp_mehrwie1
Truth Expression
truth($skin_type1)
Mapping Expression
lookup($skin_type1, “hauttypen”)
Property Output (Vocabularies)

Noun: Haut
Adjective: [lookup_hauttyp_mehrwie1.Value()]
Headnoun:

das funktioniert aber leider nicht.
Der Debug sagt mir folgendes
$lookup_hauttyp_mehrwie1
{
“truth-value”: “True”,
“mapping-value”: “”,
“vocabularies”: [
{
“noun”: “Haut”,
“adjective”: “”,
“headnoun”: “”
}
]
}

$skin_type1
{
“truth-value”: “True”,
“mapping-value”: “”,
“vocabularies”: [
{
“noun”: “jede Haut”,
“adjective”: “”,
“headnoun”: “”
}
]
}

Was muss ich ändern?
In $skin_type1 steht doch eigentlich “jede Haut” drin. Dieser Wert ist auch in der Lookuptabelle vorhanden.

Werde auch mal weiter probieren und meine Lösung, wenn ich eine finde, hier bereit stellen.

Sollte bereits jemand etwas ähnliches gemacht haben, dann wäre ich dankbar für die Hilfe.

Besten Dank
Nino

Habe eine Lösung gefunden. Mithilfe von 4 Properties kann ich nun den Lookup nutzen.
Hier nun die Properties falls einmal jemand vor dem gleichen Problem steht.

Property 1 splittet den Wert aus dem #Datenfeld

$split_skintype
Truth Expression
str(#skin_type) != “”

Mapping Expression
split(#skin_type, “,”)

Property Output (Vocabularies) - keine

Property 2 + 3 holt sich die Werte 1, bzw 2 aus dem split. Das kann man dann natürlich endlos weiterführen. Je nachdem wieviele Werte darin enthalten sind.

$skin_type1

Truth Expression
int($count_skin_type) > 1
($count_skin_type zählt die vorhandenen Werte in #skin_type | Mapping Expression int(count(list(split(#skin_type, “,”))))

Mapping Expression
$split_skintype[0] (der Wert in den eckigen Klammern gibt die Stelle in der Liste an. 0 steht hierbei für Stelle 1)

Property Output (Vocabularies)

Noun: [skin_type1.Value();raw]
Adjective:
Headnoun:

$skin_type2
Truth Expression
int($count_skin_type) > 1

Mapping Expression
$split_skintype[1]

Property Output (Vocabularies)

Noun: [skin_type2.Value();raw]
Adjective:
Headnoun:

zu guter Letzt kommt noch der Lookup

$lookup_hauttyp_1

Truth Expression
str($skin_type1) != “”

Mapping Expression
lookup($skin_type1, “hauttypen”)

Property Output (Vocabularies)
Noun: Haut
Adjective: [lookup_hauttyp_1.Value()]
Headnoun:

Für den zweiten Hauttyp benötige ich nun noch ein weitere Lookup property.

VG
Nino

Hallo Nino,

bitte entschuldige die späte Antwort.
Freut mich, das du dein Problem so elegant lösen konntest!

Wenn du um das Anlegen von so vielen Lookup-Variablen herumkommen möchtest, kannst du dich mit der Schleifenfunktion map() beschäftigen. Hier gibst du die Anweisung, eine Liste durchzugehen und bestimmte Operationen auf jedes Element auszuführen.

In deinem Beispiel könnte das sinngemäß lauten:
Name:
GROUP_Hauttypen
Truth Expression
true
Mapping Expression
map(list($split_skintype), [element -> lookup(#element, “hauttypen”)])

Die Syntax im Klartext:

  • Gehe durch die Liste $split_skintype
  • wende für jedes element folgenden Befehl an
  • schicke das Element an den Lookup “hauttypen”

Vorteile:

  • Du sparst dir die ganzen Hilfsvariablen auf der Ebene von $skin_type_1
  • Du musst nicht antizipieren, wie viele Angaben im Feld für den Hauttyp stehen

Heraus kommt eine Group Property, die du im Text einfach mit .all() aufrufen kannst.

Probier gerne mal, ob das für deinen Fall funktioniert.

Beste Grüße

1 Like

Hallo Frank,

danke für die Rückmeldung.
Die Lösung ist deutlich kompakter. Das ist wahr.
Habe es mal ausprobiert. Das Problem ist, dass es dann nicht mehr möglich ist die Adjektive zu beugen.
Zum beugen habe ich noch einen grammatikalischen Container im Text angelegt.
Word Type: noun, Content: “Haut”

Dann habe ich im Container von GROUP_Hauttypen, Use same Grammar as (Container “Haut”) ausgewählt.
Der Container GROUP_Hauttypen sieht so aus.
Group_Method: All
Use Adjective: yes
Adjective Conjuction: KOMMA_KOMMA

Leider ohne Erfolg.
Ist das mit deiner Methode überhaupt möglich?

VG
Nino

Hallo Nino,

du kannst die Adjektive im Lookup mit anlegen, dann müsste es gehen.

Deine Methode klingt aber grundsätzlich richtig.
Wenn das Adjektiv nicht reagiert, könnte das auch daran liegen, dass das Substantiv, das du dazu ausgibst, keinen Lexikoneintrag hat.

Btw: Versuchst du mit den beiden Containern eine Gruppe von Wörtern aufzurufen (mehrere Substantive mit Adj.) oder ein einzelnes? (Machst du mir bitte mal einen Screenshot?)

LG

Hallo Frank,

die Gruppe aus Adjektiven bezieht sich auf ein Substantiv.
Das Substantiv “Haut”. Denke das sollte im Lexikon verfügbar sein.
Wenn ich mit meiner langen Methode (splitten und dann Lookup) auf “Haut” verweise, dann klappt die Beugung.

Habe nun im Lookup den Wert als Noun + Adjektiv hinterlegt.

Anbei noch die Screenshots und der Debug zu der Group Property
{
“truth-value”: “True”,
“mapping-value”: [
“jede”,
“reif”
],
“vocabularies”: []
}


sample-output

Oder brauchst du noch einen anderen Screenshot?

Beste Grüße
Nino

Hi Nino,

super, vielen Dank für den Aufwand. Jetzt habe ich es verstanden.
Das Zusammenführen dieser zwei Gruppen im Satz geht tatsächlich nicht. Ich glaube, bei der Methode versteht der Gruppencontainer auf Satzebene nicht, dass er Adjektive enthält. Entsprechend verhalten sich die Inhalte auch nicht wie Adjektive und beugen sich nicht.

Workaround könnte noch eine Property sein, die im Noun “Haut” und im Adjektiv (sinngemäß) [GROUP_Hauttypen.all()] stehen hat.

Jetzt sind wir aber schon im Tausendtsel angekommen. Deine Lösung funktioniert ja und tut genau was sie soll.
Dennoch vielen Dank für den Einblick!

Beste Grüße

Danke Frank,

dein Vorschlag mit der Schleifenfunktion hilft mir sicher ein anderes mal weiter. Hatte das nämlich so noch gar nicht auf dem Schirm.

Beste Grüße
Nino

1 Like

This topic was automatically closed 4 days after the last reply. New replies are no longer allowed.