2009-12-16 14 views
5

Ich habe ein wenig gesucht, aber noch nichts gefunden, was nützlich erscheint, aber ich frage mich, ob irgendjemand etwas (tool, lib etc) kennt, das englische Phrasen analysieren und in eine Cron-Zeichenkette übersetzen kann.Wie konvertiert man Englisch nach Cron?

Zum Beispiel: Every Tuesday at 15:00 wandelt in 0 15 * * 2

Es ist wie etwas scheint, dass viele gotchas und es wäre vorzuziehen, profitiert von jemandem anderer Arbeit haben würde. Sie sehen es in ein paar netten Seiten/Apps, die herausfinden können, was Sie mit einer einfachen Phrase meinen, anstatt eine scheußliche Benutzeroberfläche zu haben.

Vielen Dank im Voraus.

+0

Das hört sich so an, als ob Sie nach einem vorhandenen Programm suchen. Dies stellt eine ServerFault-Frage dar, keine Programmierfrage. –

+0

Nicht mit Tags wie "nlp" und "Parser" und "parse". Definitiv eine Programmierfrage. – Thomas

+0

Werkzeug, Bibliothek, Rahmen - ich bin nicht wählerisch.Als Hintergrund möchte ich Cron-Strings für Cron und schließlich Quartz erzeugen. –

Antwort

2

Für Ruby gibt es "Whenever", die einen Ausgangspunkt bieten könnte: Es übersetzt quasi-Englisch (eigentlich ist es gültig Ruby) in Cron-Strings.

+0

Von Ihrem Beitrag wurde ich von Wanna inspiriert und habe eine kleine PHP-Bibliothek: https://github.com/bpolaszek/natural-cron-expression – user4994579

1

Je nachdem, wie flexibel Sie es brauchen und wie Sie Ihre eigenen Ärmel hochkrempeln können, können Sie eine einfache Grammatik dafür definieren.

Jeder wäre ein Quantifizierer. Vielleicht brauchst du andere, aber mir fällt nichts ein. Gültige Syntax könnte sein:

Jede(Tag-spec)AT(Zeit)

Wo Tag-spec ein wörtlicher Tag sein könnte (. Dh Montag) oder sei ein Tag des Monats (dh 30. Tag) oder eine andere Syntax (ich würde vierzehn Tage vorschlagen, aber ich bin mir nicht sicher, ob Cron diese gut darstellen kann).

Zeit konnte angegeben entweder 24 Stunden mit (16.00) oder 12 Stunden (04.00) Format.

Eine andere Syntax, die Sie vielleicht ist: Jeder(Frequenz)Von(Zeit), wo Frequenz grundsätzlich ist (Menge)(Einheit) (dh 10 Minuten.). Mit der Von-Zeit können Sie einen Offset einstellen (z. B. Alle 30 Minuten von 01:10 Uhr).

Sie müssten sich wahrscheinlich etwas mehr hinsetzen und diese Details herausfinden. Aber eine starre Grammatik könnte relativ einfach unter Verwendung recursive descent implementiert werden.

+0

Eine Grammatik dafür zu definieren wäre übertrieben. An dieser Grammatik gibt es nichts Rekursives. Eine kleine Staatsmaschine zu bauen, ist die schnellste Route. – Toad

+1

@reinier Es wäre nicht SO, wenn es nicht den "roll your own hammer" für das "Wie man eine Walnuss knackt?" Frage. :) –

0

Hmm, über diese Fragen ... Wie wäre es auch mit einem, der die Cron-Parameter übersetzt zurück auf Englisch? Auf diese Weise können Sie sehen, ob der Parser Sie "verstanden" hat.

+0

Ich sah eine Menge Sachen, die Cron in Englisch übersetzt, während der Suche und hatte die gleicher Gedanke. Offensichtlich bekommt man nicht immer das gleiche Englisch auf der anderen Seite, denn es gibt eine Viele-zu-Eins-Beziehung von Englisch zu Cron. Immer noch eine nette Idee. Erinnert mich eher an den Spaß, den man mit Google Translate übersetzen kann. –

Verwandte Themen