Wie man Zeit Datum Periode Informationen aus rohen Sätzen in Python zu extrahieren

Eingang:

  1. Gültig für Ticketing und Reisen Ab 27. März 2016 bis 31.12.2006
  2. Gültigkeitsdauer Tickets müssen bis 18.00 Uhr 16 ausgegeben werden
  3. Gültigkeitszeitraum muss vor dem 29. Februar 2016 ausgegeben werden
  4. TRAVELING DATES JETZT – FEB 10 2016 FEB 22 2016 – 12. Mai 2016
  5. Ticketing Effektive Periode vor dem 31. Januar 2016

(Hinweis: Die Eingabe wurde in diesem Stadium von einigen Python-Codes vorverarbeitet, so dass es einfacher ist, mit einigen Python-Paketen zu verarbeiten.)

Erwartete Ausgabe:

  1. Von 2016-03-27 bis 2016-12-31
  2. Vor vor 2016-02-18
  3. Vor vor 2016-02-29
  4. Jetzt – 2016-02-10 2016-02-22 – 2016-05-12
  5. Vor vor 2016-01-31

Ich habe versucht Dateutil. Allerdings kann es nur ein Datum extrahieren, richtig? Auch für diese Situation ist die Extraktion von Präposition und Datum auch ein Problem.

Ich habe auch auf dateparser und datefinder geschaut. Es scheint, sie beide verwenden dateutil.

Termine können JJJJ-MM-DD, DDMMYYYY, etc., solange im gleichen Format.

Die Ausgabe muss nicht mit der obigen identisch sein, solange sie genaue Informationen widerspiegelt.

Endlich danke für deine Zeit und Gedanken. Ich werde auch immer versuchen.

  • Fehler 3 auf Dateutil / zoneinfo mit cx_freeze und pandas
  • Dateutil parse bug in python gibt den falschen Wert zurück
  • Dateutil.parser.parse () und verloren Zeitzone Informationen
  • Default "future" Jahr bei der Datumsumwandlung mit dateutil
  • Holen Sie sich tz offset von Sting
  • 2 Solutions collect form web for “Wie man Zeit Datum Periode Informationen aus rohen Sätzen in Python zu extrahieren”

    Nach ein paar Tagen der Forschung, komme ich mit den folgenden Ansätzen, die das Extraktionsproblem lösen.

    1. Erkennen Sie die Sätze und erkennt dann Monate und machen Sie die Extraktion.
    2. Erkennung '-' und dann erkennt Monate und die Extraktion.

    Teil die Codes sind unten gezeigt. (Ein Auszug, der Abhängigkeiten im Kontext benötigt)

     new_w = new_s.split() for j in range(len(new_w)): if new_w[j] in prepositions and (new_w[j+1].isdecimal() or new_w[j+1].lower() in months): # Process case like "Starting from Mar27, 2016 to Dec31, 2016" if j+7 in range(len(new_w)) and new_w[j+4] in prepositions: if new_w[j+5].isdecimal() or new_w[j+5].lower() in months: u = ' '.join(new_w[j:j+8]) print(label_class[i] + ': ' + u) break # Process case like "Ticket must be issued on/before 29FEB, 2016" elif new_w[j-1] in prepositions: u = ' '.join(new_w[j-1:j+4]) print(label_class[i] + ': ' + u) break # Process case like "Ticketing valid until 18FEB16" else: u = ' '.join(new_w[j:j+4]) print(label_class[i] + ': ' + u) break # Process case like "TICKETING PERIOD: NOW - FEB 02, 2016" # Process case like "TRAVELING DATES: NOW - FEB 10,2016 FEB 22,2016 - MAY 12,2016" if new_w[j] in ['-'] and (new_w[j+1].lower() in months or new_w[j+2].lower() in months): if new_w[j-1].lower() == 'now': u = released_date + ' - ' + ' '.join(new_w[j+1:j+4]) print(label_class[i] + ': ' + u) elif new_w[j-3].lower() in months or new_w[j-2].lower() in months: u = ' '.join(new_w[j-3:j+4]) print(label_class[i] + ': ' + u) 

    Dies ist ein typischer Gebrauchsfall für die exzellente dateparser . Lesen Sie einfach die docs und Sie sollten in der Lage sein, es zu tun.

    Python ist die beste Programmiersprache der Welt.