Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Ich habe einen Textabsatz, der mehrere Zahlen in verschiedenen Sätzen enthält, und ich möchte diese Zahlen extrahieren und sie in einer Spalte in einer neuen Tabelle gestapelt erhalten.
Der Satz sieht so aus:
Die Säcke werden am Lagerort auf einer mobilen Waage gewogen. Aus jedem 5. Sack wird eine Einzelprobe entnommen. Die Primärprobe von A: 10 kg, B: 20 kg, C: 30 kg,
40 kg und E: 50 kg wurden 24 Stunden lang bei 105 °C getrocknet. Die Probe wurde wiederholt gespalten, wobei etwa 800–1000 Gramm übrig blieben, die weiter gemahlen wurden, um durch ein 100-Maschen-Testsieb zu passen. Die zerkleinerte Probe wurde 20 Minuten lang in einem V-Mischer gemischt und in eine wasserdichte 100-ml-Plastikflasche gefüllt und versiegelt.
Darüber hinaus kann die Anzahl der verschiedenen Primärproben zwischen 1 und 20 oder 30 variieren.
Ich bin sehr dankbar, wenn mir jemand mit einem Skript den richtigen Weg weisen könnte. Ich habe versucht, es mit Hilfe von Copilot zu schreiben, habe aber nicht das gewünschte Ergebnis erzielt.
Vielen Dank!
Automatisierung und SkriptingBetreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?So können Sie das tun:
names default to here(1);
paragraph="The bags are weighed on a mobile scale at storage location. Each 5. bag is spear sampled.
The primary sample of A: 10 kg, B: 20 kg, C: 30 kg, 40 kg and E: 50 kg was dried for 24 hours at 105 C.
The sample was subject to repeated splitting, leaving some 800-1000 grams which was further milled to
pass a 100-mesh test sieve. The crushed sample is blended in a V-blender for 20 minutes and transferred
to 100 ml waterproof plastic bottle and sealed.";
theNumbers = {};
i = 1;
While( Word( i, paragraph, " ." ) != "",
theWord = Word( i, paragraph, " ." );
If( Is Missing( Num( theWord ) ) == 0,
Insert Into( theNumbers, Num( theWord ) )
);
i++;
);<BR />Show( theNumbers );
Ich bin sicher, dass es jemanden gibt, der auch eine RegEx()-Lösung bereitstellt.
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Sie können hierfür Words verwenden, müssen jedoch eine Liste nicht numerischer Zeichen haben. Anschließend können Sie Concat Items() verwenden, um die erhaltene Liste wieder in eine Zeichenfolge umzuwandeln.
Names Default To Here(1);
str = "The bags are weighed on a mobile scale at storage location. Each 5. bag is spear sampled. The primary sample of A: 10 kg, B: 20 kg, C: 30 kg, 40 kg and E: 50 kg was dried for 24 hours at 105 C. The sample was subject to repeated splitting, leaving some 800-1000 grams which was further milled to pass a 100-mesh test sieve. The crushed sample is blended in a V-blender for 20 minutes and transferred to 100 ml waterproof plastic bottle and sealed.";
matchchar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" || Get Punctuation Characters() || Get Whitespace Characters();
nums = Words(str, matchchar);
// {"5", "10", "20", "30", "40", "50", "24", "105", "800", "1000", "100", "20", "100"}
Concat Items(nums, ", "); // "5, 10, 20, 30, 40, 50, 24, 105, 800, 1000, 100, 20, 100"
Wenn eine kompliziertere Übereinstimmung erforderlich ist, sind Regex() oder Pat Match() Optionen, aber meiner Meinung nach lohnt es sich nicht wirklich, Pat Match() mit seiner aktuellen Dokumentation und den Beispielen aus der Dokumentation zu lernen. Das Hinzufügen eines Flags zu Regex Match(), um alle nicht überlappenden Mustervorkommen zu finden, würde die Ausführung solcher Aufgaben erheblich erleichtern.
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Ich habe versucht, Ihren Vorschlag weiter auszuführen, aber es hat nicht geklappt. Leider verwirren mich meine Ergebnisse, daher hoffe ich, dass ich noch mehr Input bekommen kann.
Der folgende Codeausschnitt findet „10 kg“. So weit, so gut.
Names Default To Here( 1 );
text = "The bags are weighed on a mobile scale at storage location. Each 5. bag is spear sampled. <BR />The primary sample of A: 10 kg, B: 20 kg, C: 30 kg, 40 kg and E: 50 kg was dried for 24 hours at 105 C. <BR />The sample was subject to repeated splitting, leaving some 800-1000 grams which was further milled to <BR />pass a 100-mesh test sieve. The crushed sample is blended in a V-blender for 20 minutes and transferred <BR />to 100 ml waterproof plastic bottle and sealed.";<BR />
// Use a regular expression to find all the numbers, including decimals
matches = Regex( text, "\d+([.,]\d+)?\s*kg" );
Show( matches );
Versuchen wir, dies in eine Schleife zu skripten, um alle mit „kg“ in der Zeichenfolge verknüpften Gewichte zu finden. Ich kann alle einzelnen Wörter finden und sie zu Paaren kombinieren. Innerhalb dieser Paare sollte es meiner Meinung nach ein Kinderspiel sein, Paare wie „10 kg“, „20 kg“, „30 kg“ usw. zu finden, aber der Code weigert sich hartnäckig, irgendwelche Übereinstimmungen zu finden und sie in die Liste matches={} aufzunehmen.
Ich habe versucht, das RegexPattern in die If-Funktion zu verschieben, und ich habe versucht, „combined“ sowie die Variable „regexPattern“ in Eval() zu verpacken.
Names Default To Here( 1 );<BR />// the text
text = "The bags are weighed on a mobile scale at storage location. Each 5. bag is spear sampled. <BR />The primary sample of A: 10 kg, B: 20 kg, C: 30 kg, 40 kg and E: 50 kg was dried for 24 hours at 105 C. <BR />The sample was subject to repeated splitting, leaving some 800-1000 grams which was further milled to <BR />pass a 100-mesh test sieve. The crushed sample is blended in a V-blender for 20 minutes and transferred <BR />to 100 ml waterproof plastic bottle and sealed.";<BR />
// break text into words and print each of them. works as expected
words = Words( text );
For( i = 1, i <= N Items( words ), i++,
Print( words[i] )
);
// regex pattern variable
regexPattern = "\d+([.,]\d+)?\s*kg";
// empty list to store matches
matches = {};
// loop over all words in text to create and print pairs of words (we're looking for "10 kg", "20 kg" and so on). works fine
For( i = 1, i <= N Items( words ) - 1, i++,
combined = words[i] || " " || words[i + 1];
Print( "Checking: " || combined );
);
<BR /><BR /><BR />// THIS PART DOESN'T WORK
// loop once more over all words from text to create pairs of words and look for the regexPattern
For( i = 1, i <= N Items( words ) - 1, i++,
combined = words[i] || " " || words[i + 1];
// check if the current combined string matches the pattern (e.g., "10 kg")
If( Regex Match( combined, regexPattern ),
Insert Into( matches, combined );
Print( "Match found: " || combined );
,
// else
Print( "No match for: " || combined );
);
);Was übersehe ich?
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Ich habe nicht alles durchgesehen, aber ein flüchtiger Blick auf das Skript hat ergeben, dass „.“ ein Platzhalter ist, Sie müssen es also maskieren.
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Danke, aber das wollte ich mit dem ersten Snippet demonstrieren: Es identifiziert die erste Übereinstimmung mit „einer Zahl + kg“ (also „10 kg“) im Beispiel korrekt. Wenn es einmal funktioniert, sollte es dann nicht für alle Token-/Wortpaare funktionieren?
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Oh, ja, tut mir leid. Ich sollte aufwachen und meinen Kaffee trinken, bevor ich hier poste. Ich bin schon einmal auf so etwas gestoßen und habe (als ich bei meinem letzten Job war) hier eine Antwort gepostet.
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Haha, das ist kein Grund zur Sorge! Es ist immer gut, freundliche Kommentare zu bekommen:)
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Gutes Argument für die Unterstützung des Wunschlisteneintrags von Hogi.
Regex-Option zum Hinzufügen für alle Flags
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Vielen Dank für alle bisherigen Beiträge. Ich teste es jetzt.
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Ich weiß nicht, ob Sie versuchen, RegEx anzuwenden, oder ob Sie tatsächlich versuchen, eine Lösung zu finden, um alle Verweise auf kg-Werte zu finden. Wenn letzteres der Fall ist, ist das folgende JSL eine sehr effiziente Lösung
Names Default To Here( 1 );// the text
text = "The bags are weighed on a mobile scale at storage location. Each 5. bag is spear sampled. The primary sample of A: 10 kg, B: 20 kg, C: 30 kg, 40 kg and E: 50 kg was dried for 24 hours at 105 C. The sample was subject to repeated splitting, leaving some 800-1000 grams which was further milled to pass a 100-mesh test sieve. The crushed sample is blended in a V-blender for 20 minutes and transferred to 100 ml waterproof plastic bottle and sealed.";
// break text into words and print each of them. works as expected
words = Words( text );
// regex pattern variable
regexPattern = "\d+([.,]\d+)?\s*kg";
// empty list to store matches
matches = {};
potential = loc(words,"kg");
If( length(potential) > 0,
for each( {kg}, potential,
if( isMissing(words[kg-1])==0,
insert into(matches, words[kg -1] || " kg")
)
)
);Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Eigentlich beides. Vielen Dank für Ihre Hilfe und Geduld. Ich habe „loc()“ noch nie verwendet, also ist das eine gute Lektion.
Wenn Sie Ihren gesamten Codeblock kopieren und einfügen und "Print( matches)" anhängen, erhalten Sie {"40 kg", "50 kg"}. Dies ist konsistent mit "potential = Loc( words, "kg" );" und ergibt nur "[32, 36]". Interessant.
- Warum findet Ihre Lösung nicht „10 kg“, „20 kg“ und „30 kg“?
- Warum findet meine Lösung nichts?
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Es liegt an den Kommas. „kg“ bringt es durcheinander.
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Die Funktion Words() verwendet nur Leerzeichen als Trennzeichen. Daher bleiben bei kg-Wörtern mit Kommas ( kg, ) oder Punkten ( kg. ) diese Zeichen im extrahierten Wort. Dies kann leicht geändert werden, indem das Komma und der Punkt als Trennzeichen hinzugefügt werden, auf die zusammen mit dem Leerzeichen geprüft werden soll.
Ändern
words = Words( text );
Zu
words = Words( text," ,." );
Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?Sie können für so etwas eine While-Schleife verwenden (dadurch wird die Originalzeichenfolge geändert, daher möchten Sie möglicherweise eine Kopie davon verwenden).
Names Default To Here(1);
text = "The bags are weighed on a mobile scale at storage location. Each 5. bag is spear sampled. The primary sample of A: 10 kg, B: 20 kg, C: 30 kg, 40 kg and E: 50 kg was dried for 24 hours at 105 C. The sample was subject to repeated splitting, leaving some 800-1000 grams which was further milled to pass a 100-mesh test sieve. The crushed sample is blended in a V-blender for 20 minutes and transferred to 100 ml waterproof plastic bottle and sealed.";
res = {};
While(!Is Missing(match = Regex(text, "\d+.kg")),
Insert Into(res, match);
text = Substr(text, Contains(text, match) + Length(match));
);
show(res);
Oder Pat Match, wenn Sie herausfinden, wie es funktioniert (ich habe das nie wirklich richtig hinbekommen)
Names Default To Here(1);
text = "The bags are weighed on a mobile scale at storage location. Each 5. bag is spear sampled. The primary sample of A: 10 kg, B: 20 kg, C: 30 kg, 40 kg and E: 50 kg was dried for 24 hours at 105 C. The sample was subject to repeated splitting, leaving some 800-1000 grams which was further milled to pass a 100-mesh test sieve. The crushed sample is blended in a V-blender for 20 minutes and transferred to 100 ml waterproof plastic bottle and sealed.";
found_list = {};
Pat Match(
text,
Pat Any("., ") + Pat Regex("(\d+.kg)") >> match + Pat Any("., ") + Pat Test(
Insert Into(found_list, match);
0;
)
);
Show(found_list);Betreff: Wie identifiziere ich Zahlen in einem Absatz und extrahiere sie als Spalte in einer neuen Tabelle?@CalibrationBear , haben Sie eine Lösung gefunden und würden Sie sie teilen? Danke:)