... und täglich grüsst das Murmeltier ! Das lästige Leben mit dem Datum und zum Beispiel, dem Preis in DT3

Ein bestimmtes Datum aus einem durchsuchbaren pdf zu extrahieren. Beispielsweise zur Umbenennung von Dateinamen ist leider gruselig. Hier reichen die Möglichkeiten mit neuestem, oder jüngstem Datum oder den anderen wenigen Möglichkeiten in den SmartRules kaum aus und die Ergebnisse sind z.T. sehr unbefriedigend.

Das ähnliche hier:

Wenn ich ein OCR pdf habe, wie könnte ich den höchsten Preis der Ware finden (bei mir in Euro), da ja durch die Angaben mit Nettopreisen und den Steuern meist doch einige unterschiedliche Beträge auf Rechnungen sind. Ich würde gerne automatisiert den Bruttopreis übernehmen und zum Beispiel in meine Metadaten automatisch übernehmen?

Ich habe verstanden, dass sich die Möglichkeiten zum Beispiel mit RegEx hier sehr stark potenzieren lassen, aber als Nicht-Programmierer werden die Fragezeichen bei der Lektüre hier und an anderen Stellen eher größer als kleiner werden, es scheint schon sehr speziell, Zumal man ja wahrscheinlich die meisten Sachen mit „Schlüsselwort xy“, oder "Phrase xy“ im Abstand oder Nähe zu meinem gesuchten Ausdruck von XX Wörtern oder Silben oder Zeilen irgendwie zu fassen sein müssten.

Gibt es nicht eine Art “universelle RegEx“ Suchzeile, welche man sich auch als Laie einfach umbauen kann oder könnte man die Probleme nicht auch in einfach verständliche Regeln packen?

Gerade komme ich mir wie Vettel vor… fahre ein Megaauto mit was weis für unglaublichen Möglichkeiten, aber ich finde den TURBO Knopf nicht…

Vieleicht waren es jetzt zu viele Sachen, aber da knabbere ich schon seit meinem Einstieg im Januar rum und es lähmt mich.

Ein Dank an alle die sich diese „Arie der Tränen“ angelesen hat (natürlich nicht so ganz ernst gemeint).

CU Alex

Übersetzt mit DeepL:

Extract a specific date from a searchable pdf. For example renaming file names is unfortunately scary. Here the possibilities with the newest, or most recent date or the other few possibilities in the SmartRules are hardly sufficient and the results are sometimes very unsatisfactory.

The similar one here:

If I have an OCR pdf, how could I find the highest price of the goods (in my case in Euro), since the information with net prices and the taxes usually result in some different amounts on invoices. I would like to automatically take over the gross price and for example automatically transfer it to my meta data?

I have understood that the possibilities can be potentiated very much, for example with RegEx, but as a non-programmer, the question marks will become bigger rather than smaller when reading here and in other places, it seems to be very special, especially since you probably would have to be able to somehow grasp most things with “keyword xy”, or “phrase xy” in the distance or proximity to my searched expression of XX words or syllables or lines.

Isn’t there some kind of “universal RegEx” search line, which even a layman can easily modify, or couldn’t I put the problems into easy to understand rules?

Right now I feel like Vettel… driving a mega car with what incredible possibilities, but I can’t find the TURBO button…

Maybe it was too many things now, but I’ve been nibbling since I started in January and it paralyzes me.

Thanks to everyone who read this “Aria of Tears” (of course not really meant that seriously).

CU Alex

Ein konkretes Beispiel wäre hilfreich.

Allgemein gibt es keine Möglichkeit, den höchsten Betrag zu suchen. Ein spezieller Betrag lässt sich nur durch die Suche nach z.B. Präfix und/oder Suffix erkennen. Aber auch das erfordert ein Beispiel.

Ich habe ein Skript dafür, das den höchsten Betrag in einem PDF nach Rückfrage in ein Metadaten-Feld schreibt. Das funktioniert in allen Fällen, in denen es keinen Rabatt gibt und keine hohen Behälter vorkommen, die nicht in Rechnung gestellt werden - bspw bei Steuerberatern oder Rechtsanwälten. Da liegen Streitwerte etc. immer wesentlich über den Rechnungsbeträgen. Zum Glück.

(() => {
app = Application('DEVONthink 3');
app.includeStandardAdditions = true;

var sel = app.selection();


var amount = /(([\d.]+(:?,\d\d))|(\d+(:?\.\d\d)))(\s*(€|(EUR|Eur)[oO]?)|(?![\d.]))/g;
sel.forEach(el => {
  var betrag = app.getCustomMetaData({for: "Betrag", from:el});
  var txt = el.plainText();
/*   console.log(txt); */
  var maxAmount = -1;
  var matches = txt.match(amount);
/*  console.log(matches.length) */
  if (matches !== null && betrag === null) {
  matches.forEach(euro => {
     var digits = euro.replace(/[€a-z\s]/gi,""); /* remove all letters, euro sign and spaces */
	 if (digits.match(/,\d\d$/)) {
     	 /* decimal separator = comma: remove all dots from number and replace comma with dot */
	    var val = Number(digits.replace(/\./g,"").replace(/,/,"."));
	 } else {
		/* number contains commas, probably US format: remove them */
	    var val = Number(digits.replace(/,/g,""));
	 }
	 /* console.log(val); */
	 maxAmount = val > maxAmount ? val : maxAmount;
  }); 
  var answer = app.displayDialog("Betrag setzen?", {defaultAnswer: maxAmount + " €",
     buttons: ["Nein", "OK"],
	 defaultButton: "OK"});
  if (answer.buttonReturned === "OK") {
    app.addCustomMetaData(answer.textReturned, {for: "Betrag", to: el});
  }
  }
  });
 })();

“Ein bestimmtes Datum” ist so unbestimmt, dass man das mit DT mit Sicherheit machen kann. Ich vermute allerdings, dass deine Anforderungen etwas spezieller sind, als du hier sagst. Du könntest ja mal sagen, wie die aussehen.

Grundsätzlich kann man Daten in durchsuchbaren Dateien in DT mit Scripts finden. In Smart Rules lassen sich allerdings nur Apple Script Scripts nutzen, und damit ist das Suchen nach solchen Texten überaus mühsam. Aber möglich ist es, und m.E. gab es in der Automatisierungsabteilung des Forums auch schon einige Beispiele dafür.

Alternativ kann man vielleicht auch mit sed experimentieren, das ist da schon leistungsfähiger. Auch das lässt sich per Script machen.

So ich habe mal eine telekom Rechnung “zerpflückt”, Alle realen Daten Nummern und Kontodaten sollten verändern sein. Ich möchte Euch auch nicht mit x “Sonderfällen” konfrontieren, aber ich glaube an dem Beispiel kann es klar werden:

Etwas konstruiert aber so ähnlich ist es meistens.

Das Dokument schlummert in den Tiefen von DT3 und ich möchte in meine benutzerdefinierten Info Felder den Nettobetrag, den Bruttobetrag, den Steuersatz in % und den Grundpreis des Anschlusses möglichst automatisiert haben. Wie gesagt ist jetzt konstruiert. Bei der Steuer werde ich aber immer mit so komplexe Fragen an anderer Stelle konfrontiert. Die Dokumente im Grundsatz schnell zu finden (und besser als mit Spotlight only) , nur sind solche Rechnungen nicht normiert und kann eben nicht sagen Information A und B steht immer dort. Ich kann aber ganz gut sagen + - 30 Wörter vor oder zurück und innerhalb der ersten 3 Zeilen um den ausgewiesenen und gedruckten Wert XY.

Ähnlich sind die Datumsangaben, gerade die telekom Jungs sind hier Weltmeister. Ganz viele Daten in räumlicher und inhaltlicher/zeitlicher Nähe zueinander, z. T. in unterschiedlicher Notationsart. Also kann man hier auch eher sagen : Auf der ersten Rechnungsseite im unteren Drittel mit einer Begrenzung des Datenzeitraums. Wenn ich meine echten Daten (Patientendaten - Mediziner), dann falle ich sogar noch weiter runter, weil die Geburtsdaten immer “im Weg habe”. Das älteste Datum, dann ist es nicht die Untersuchung, die Prozedur oder was weis ich was , sondern das Patientenalter, so was müsste ich irgendwie ausschließen können.
Ich hoffe es ist nachvollziehbar…
CU und Thx für Eure Zeit! vorab…

Danke ich werde mich mal dran versuchen … noch nie gemacht … bin gespannt.

… aber Ihr versteht alle haben ähnliche Probleme, aber alle Ideen und Lösungen sind schon nicht ganz so ohne …

Eigentlich würde doch Netto & Steuersatz reichen. Daraus ergibt sich dann Brutto recht automatisch. Grundpreis des Anschlusses – wenn Du meinst. Aber ist das wirklich wichtig oder nur nice to have. Grundsätzlich gilt, das sagte ich schon: Scripts können nicht für jede Lebenslage alles erledigen. Meins z.B. scheitert kläglich an Rabatten (Magenta 1!).

Hier mal ein Beispiel, was ich mit der Telekom anstelle - und zwar fast alles in Hazel, weil mir das mit DT zu umständlich wäre:


Leider kann man da nicht alles sehen, in “Contents contain match Betrag…” stecken ein paar reguläre Ausdrücke. Wie Du siehst, schreibt Hazel hier den Rechnungsbetrag in ein Kommentarfeld, und DT kopiert das dann in ein Benutzerdatenfeld (user meta data). Ehrlich: Telekom-Rechnungen sind ziemlich harmlos, wenn man reguläre Ausdrücke hat und ein bisschen damit experimentiert. Nervig wird es, wenn man andere Datumsformate hat (“/” statt “.” oder yyyy-mm-dd oder “5. Mai 2019”).

DT ist mittlerweile besser darin, solche Ausdrücke zu finden und bereitzustellen. Aber Hazel kann da eben deutlich mehr. Das Script ganz am Ende (HazelMove.scpt) sortiert übrigens alles, was Hazel vorher in den Fingern hatte (auch Kontoauszüge, z.B.) in die passende DT-Gruppe ein. Das ginge irgendwie auch mit DT, denke ich. Aber Hazel hat keine Probleme mit JavaScript (anders als die SmartRules von DT), weshalb ich für manche Aufgaben Hazel vorziehe.

Noch eine Bitte: Du tust Dir und anderen hier m.E. keinen Gefallen, wenn Du so etwas

schreibst. Wer soll das (außer Dir möglicherweise) verstehen können? Wenn Du Hilfe haben möchtest, solltest Du es potenziellen Helfern so leicht wie möglich machen. Also “Ich will das und das haben. Ich habe dies und jenes versucht. Dabei ist erstens, zweitens, drittens passiert”. Wenn man deinen Satz oben liest, weiß man überhaupt nicht, was Du willst: Das “älteste Datum”? Irgendeine Prozedur (welche?)? Und Du willst irgendwas ausschließen, aber was?

Nein. Aber: Du kannst im Prinzip alles scripten. Auch in DT, auch mit AppleScript. Es ist halt eine Frage des Aufwands.

1 Like

Ganz herzlichen Dank erst einmal für die Hinweise, Ein - und Ausblicke. Um an der ein oder anderen Stelle Klarheit zu verschaffen, den ein oder anderen Weg vielleicht gehen zu können und nun doch leider die Gewissheit zu haben mich doch tiefer mit AppleScript zu beschäftigen. Man liest ja so, dass es leichter zu erlernen ist, aber so richtig scheint sich ja auch Apple nicht in die Karten schauen zu lassen, wie es damit weitergeht. Die rudimentären Grundmuster, welche ich benötige habe ich gefragt und ich werde dann mal in Ruhe damit ein wenig herumexperimentieren. CU

Guten Abend,

ich habe seit dem Upgrade auf Catalina sehr viele Probleme mit dem Erkennen des Datums in Hazel. Vorher ist es einwandfrei durchgelaufen.

Deswegen läuft die entsprechenden Regel falsch ab, was bewirkt, dass das Dokument vollkommen verkehrt einsortiert wird. Das OCR sieht dabei übrigens einwandfrei aus.

z.B. bei den Rechnungen von NetCologne wird das Rechnungs-Datum nicht erkannt, deswegen hat die Regel einen Fehler und wegen des Dateinamens „rechnung_1234…" greift eine andere Regel (Diverse R) und schiebt die Datei ohne Umbenennung, ohne Vergabe von Tags etc. in den falschen Ordner.

Und diesen Fehler habe sehr häufig. Bei anderen Dokumenten klappt das mit dem Datum. Andere Felder (z.B. Kontoauszugs-Nr.) werden einwandfrei erkannt.

Hat das auch noch jemand anderes beobachten können/müssen?

@chrillek
ich habe da mal eine Rückfrage zu deinem Datum, das du mit Hazel ausliest

Warum separierst du die einzelnen Zahlen des Datums? Das ginge doch auch mit dem Datumsfeld und die Formate kann man da ja auch einstellen

Ist das das Script aus dem Noodlesoft-Forum?

Mit den intelligenten Regeln von DT stehe ich allerdings ziemlich auf dem Kriegsfuss.

DT-Regel

  • Zum einen kann ich das Jahr nicht per Script o. Ä. anpassen und muss jede einzelne Regel beim Jahreswechsel anpassen.
  • Nach Import klappt mal - mal wieder nicht automatisch
  • Zum anderen steht hier zwar, dass das Dokument nach dem Verschieben auch in die Datenbank verschoben werden soll, aber auch das klappt bei „A-Diverse" nicht, bei anderen schon.

Leider noch sehr unflexibel und unzuverlässig. Ich hoffe da auf Besserung

Viele Grüße
Markus

Angenommen, du sprichst von Re_Monat usw: Vermutlich geht das auch anders. Ich habe das mal auf diese Art gelöst und keinen Grund gesehen, etwas zu ändern.

Möglich, ich habe es aber auch hier im Forum mal gepostet.