I have a text and I would like find dates in a text and add a annotation.
Exemple:
02 janvier 2019
to
<dates>20190102</dates>
I can't use python's date library because corpus is not in english, it's in french... I thought about creating a dictionary to replace months strings by numbers. But I'm not even able to make the simplest replacement without the dictionary...
test = "Plusieurs événements importants auront lieu à Fontainebleau au cours du . Après une visite le 10 juillet 1914 de l'ancienne impératrice Eugénie, le 26 juin 1921 a lieu à Fontainebleau l'inauguration du Conservatoire américain avant celle de l'École des beaux-arts américains le 25 juin 1923. Dès 1927 (date à laquelle le château est consacré musée national) et ce jusque dans les années 1930, les parties hautes de l'aile de la Belle Cheminée (incendiée en 1856) sont reconstruites grâce aux fonds Rockefeller. Le manège de Sénarmont est classé au titre des monuments historiques par arrêté du 10 octobre 1930. 4 janvier 2018 21 Mars 2013"
months = {'janvier':'01', 'février':'02', 'mars':'03', 'avril':'04', 'mai':'05', 'juin':'06', 'juillet':'07', 'août':'08','septembre':'09', 'octobre':10, 'novembre':11, 'décembre':12}
First attempt at replacement:
dates = '([0-9]{1,2})(\s)([A-Za-z]+)(\s)([0-9]{4})'
replace_text = test.replace(r'([0-9]{1,2})\s([A-Za-z]+)\s([0-9]{4})', r'\5\3\1')
#25 juin 1923 to 1923juin25 and then replace the strings with the dictionary values
My output: Same text, nothing has been modified
Good output:
(...)visite le <date>19140710</date> de(...) le <date>19210626</date> a lieu(...)
Edit: to achieve that, it is possible to do the following:
test = "Plusieurs événements importants auront lieu à Fontainebleau au cours du . Après une visite le 10 juillet 1914 de l'ancienne impératrice Eugénie, le 26 juin 1921 a lieu à Fontainebleau l'inauguration du Conservatoire américain avant celle de l'École des beaux-arts américains le 25 juin 1923. Dès 1927 (date à laquelle le château est consacré musée national) et ce jusque dans les années 1930, les parties hautes de l'aile de la Belle Cheminée (incendiée en 1856) sont reconstruites grâce aux fonds Rockefeller. Le manège de Sénarmont est classé au titre des monuments historiques par arrêté du 10 octobre 1930. 4 janvier 2018 21 Mars 2013"
months = {
'janvier':'01',
'février':'02',
'mars':'03',
'avril':'04',
'mai':'05',
'juin':'06',
'juillet':'07',
'août':'08',
'septembre':'09',
'octobre':10,
'novembre':11,
'décembre':12
}
def repl(m):
# make sure the day has a leading 0 if it is between 1 and 9
day = ('0' if len(m.group(1)) == 1 else '') + m.group(1)
return '<dates>' + m.group(3) + str(months[m.group(2).lower()]) + day + '</dates>'
re.sub(r"(\d+) (\w+) (\d+)", repl, test)
Output:
"Plusieurs événements importants auront lieu à Fontainebleau au cours du . Après une visite le <dates>19140710</dates> de l'ancienne impératrice Eugénie, le <dates>19210626</dates> a lieu à Fontainebleau l'inauguration du Conservatoire américain avant celle de l'École des beaux-arts américains le <dates>19230625</dates>. Dès 1927 (date à laquelle le château est consacré musée national) et ce jusque dans les années 1930, les parties hautes de l'aile de la Belle Cheminée (incendiée en 1856) sont reconstruites grâce aux fonds Rockefeller. Le manège de Sénarmont est classé au titre des monuments historiques par arrêté du <dates>19301010</dates>. <dates>20180104</dates> <dates>20130321</dates>"