Carsim3/ 0040755 0001756 0001774 00000000000 07400725004 0012365 5 ustar 00pierre cs 0000350 0000120 Carsim3/carsim.pl 0100644 0001756 0001774 00000015076 07400724727 0014221 0 ustar 00pierre cs 0000350 0000120 % The CarSim starting file
% Created and modified by Pierre Nugues
% Modified 27/11/2001
:- [utilities].
:- [parser]. % the partial parser
:- [tokenize]. % the tokenizer -- word breaker
:- [ontology]. % a small ontology of the domain
:- [statics]. % extracts the static objects
:- [collision_finder]. % finds the collisions
:- [info_extraction]. % the rest of the files
:- [init_directions]. % finds the initial directions of the vehicles
:- [fiche]. % writes the fiche describing the accident
% À FAIRE
% Il faut introduire une nouvelle catégorie d'objets mobiles en stationnement.
% Travailler le A13 et voir pourquoi definir avec defini/1 voiture
% entraîne autant de fautes
:-
nl, nl, write('\tTo process all the reports, type:'), nl,
write('\t?- process_reports.'), nl, nl,
write('\tTo process one report, type:'), nl,
write('\t?- carsim(+ReportID, -Report).'), nl,
write('\tas in'), nl,
write('\t?- carsim([''A1''], -Report).'), nl, nl.
%carsim(+ReportID, -Fiche)
% Input should be carsim(['A1'], L)
% or carsim(['B1', -, bis], L)
carsim(ReportID, [ReportID | Fiche]) :-
read_corpus('corpus.xml', XMLCorpusText),
parse_xml_corpus(CorpusText, XMLCorpusText, []),
member([ReportID | ReportText], CorpusText),
extract_information(ReportText, StaticObjects, DynamicObjects, Accidents),
append(ReportID, ['.', ad], FileName),
concat_atom(FileName, File),
concat_atom(ReportID, ReportIDAtom),
tell(File),
write('// '), write('Report '),
write(ReportIDAtom), nl,
write_statics(StaticObjects),
write_dynamics(DynamicObjects),
write_accidents(Accidents), nl,
told,
append(StaticObjects, DynamicObjects, Objects),
append(Objects, Accidents, Fiche),
!.
/*
parse_carsim(ReportID, Fiche) :-
read_corpus('corpus.xml', XMLCorpusText),
parse_xml_corpus(CorpusText, XMLCorpusText, []),
( atom(ReportID),
member([[ReportID] | ReportText], CorpusText)
; % for the reports with a bis suffix
member([ReportID | ReportText], CorpusText)
),
parse(ReportText, FirstSentence, ParsedSentence),
write(ParsedSentence), nl.
*/
parse_carsim(ReportID, ParsedText) :-
read_corpus('corpus.xml', XMLCorpusText),
parse_xml_corpus(CorpusText, XMLCorpusText, []),
( atom(ReportID),
member([[ReportID] | ReportText], CorpusText)
; % for the reports with a bis suffix
member([ReportID | ReportText], CorpusText)
),
parse_all_text(ReportText, ParsedText).
nouns_carsim(ReportID, ParsedText) :-
read_corpus('corpus.xml', XMLCorpusText),
parse_xml_corpus(CorpusText, XMLCorpusText, []),
( atom(ReportID),
member([[ReportID] | ReportText], CorpusText)
; % for the reports with a bis suffix
member([ReportID | ReportText], CorpusText)
),
find_all_nouns(ReportText, ParsedText).
assert_list([H | T]) :-
asserta(H),
assert_list(T).
assert_list([]).
check_statics(L) :-
read_corpus('corpus.xml', XMLCorpusText),
parse_xml_corpus(CorpusText, XMLCorpusText, []),
bagof([ReportID | StaticObjects],
ReportText^(member([ReportID | ReportText], CorpusText),
find_statics(ReportText, StaticObjects)), L).
write_reports_in_files :-
read_corpus('corpus.xml', XMLCorpusText),
parse_xml_corpus(CorpusText, XMLCorpusText, []),
write_files(CorpusText).
write_files([[ID | ReportText] | RestReports]) :-
( ID = [ReportID]
;
concat_atom(ID, ReportID)
),
tell(ReportID),
write('Texte '), write(ReportID), nl,
write_text(ReportText),
told,
write_files(RestReports).
write_files([]).
write_text([Word | ReportText]) :-
write(Word),
write(' '),
write_text(ReportText).
write_text([]) :- nl.
process_reports :-
get_reportIDs(ID),
process_reports(ID).
get_reportIDs(IDs) :-
read_corpus('corpus.xml', XMLCorpusText),
parse_xml_corpus(CorpusText, XMLCorpusText, []),
bagof(ID, Report^member([ID | Report], CorpusText), IDs),
!.
process_reports([]).
process_reports([ID | IDs]) :-
carsim(ID, _),
!,
process_reports(IDs).
make_runtime :-
qsave_program(carsim, [goal(process_reports), stand_alone(true)]).
% FONCTIONS D'INTERFACE
a(X):- acteur(X),nl,write(X).
d(X,Y):- init_direction(X,Y).
% affiche acteurs
aa :-
findall(X, acteur(X),L),
nl, write('voici les acteurs : '),nl,
affiche_acteur(L).
affiche_acteur([]).
affiche_acteur([X|Q]) :-
write(X), nl,
affiche_acteur(Q).
% affiche les vehicules
av :-
findall([X,Y,Z,T,U], vehicle(X,Y,Z,T,U), L),
nl, write('voici les vehicules : '), nl,
affiche_vehicule(L).
affiche_vehicule([]).
affiche_vehicule([X|Q]) :-
write(X), nl,
affiche_vehicule(Q).
% affiche les collisions
ao :-
findall([X,Y,Z,T,U,V], collision2(X,Y,Z,T,U,V), L),
nl, write('voici les collisions : '), nl,
affiche_collision(L).
affiche_collision([]).
affiche_collision([X|Q]) :-
write(X), nl,
affiche_collision(Q).
% affiche les chocs
ac :-
findall([X,Y,Z,T], choc(X,Y,Z,T), L),
nl, write('voici les chocs : '), nl,
affiche_chocs(L).
affiche_chocs([]).
affiche_chocs([X|Q]) :-
write(X), nl,
affiche_chocs(Q).
% affiche directions initiales
ad :-
findall([X,Y], init_direction(X,Y), L),
nl, write('voici les direction initiales : '), nl,
affiche_init_directions(L).
affiche_init_directions([]).
affiche_init_directions([X| Q]) :-
write(X), nl,
affiche_init_directions(Q).
at(ReportText) :-
parse_all_text(ReportText, T),
write(T).
extract_information(ReportText, FinalStaticObjects, EnunciatorInfoActors, Accidents) :-
find_statics(ReportText, StaticObjects),
cree_acteurs(ReportText, InitialInfoActors, StaticObjects, NonSorted),
parenthesized_actors(ReportText, EntreParenthesesActors),
!,
affine_acteurs(NonSorted, InitialInfoActors, EntreParenthesesActors, RefinedInfoActors),
cree_directions_initiales(ReportText, RefinedInfoActors, DirectionInfoActors),
reconcile_init_directions(StaticObjects, DirectionInfoActors, NewDirectionInfoActors),
trouve_events(ReportText, NewDirectionInfoActors, EventInfoActors),
cree_vehicules(EventInfoActors, VehicleInfoActors),
default_events(StaticObjects, VehicleInfoActors, RefinedVehicleInfoActors),
find_collisions(ReportText, StaticObjects, FinalStaticObjects, NonSorted, RefinedVehicleInfoActors, UpdatedInfoActors, Collisions),
affine_enonciateur(Collisions, UpdatedInfoActors, EnunciatorInfoActors),
%defaut_collision,
affine_collision(EnunciatorInfoActors, Collisions, Accidents),
write(EnunciatorInfoActors), nl,
!,
/* aa, % affiche acteurs
ad, % affiche directions initiales
av, % affiche les vehicules
ao, % affiche les collisions
*/ nl.
Carsim3/collision_finder.pl 0100644 0001756 0001774 00000016114 07400724727 0016257 0 ustar 00pierre cs 0000350 0000120 % Collision_finder.pl finds the collisions and the actors
% trouve les chocs et les acteurs avec une DCG
% trie tous les groupes de mots du texte et les range dans les listes ci dessous
% mots (ListeTotale, ListeActeurs, ListeChocs, ListeEvents).
mots([acteur(First) | Mots], [First | ListeActeurs], [acteur(First) | ListeChoc], [acteur(First) | ListeEvents]) -->
mot(acteur(First)),
{!},
mots(Mots,ListeActeurs,ListeChoc,ListeEvents).
mots([direction(First) | Mots],ListeActeurs,ListeChoc,[direction(First)|ListeEvents]) --> mot(direction(First)), {!}, mots(Mots,ListeActeurs,ListeChoc,ListeEvents).
mots([verbe_mouvement(First) | Mots],ListeActeurs,ListeChoc,[verbe_mouvement(First)|ListeEvents]) --> mot(verbe_mouvement(First)), {!}, mots(Mots,ListeActeurs,ListeChoc,ListeEvents).
mots([statique(A) | Mots],[A|ListeActeurs],[statique(A)|ListeChoc],ListeEvents) --> mot(statique(A)), {!}, mots(Mots,ListeActeurs,ListeChoc,ListeEvents).
mots([verbe_choc(V) | Mots],ListeActeurs,[verbe_choc(V)|ListeChoc],ListeEvents) --> mot(verbe_choc(V)), {!}, mots(Mots,ListeActeurs,ListeChoc,ListeEvents).
mots([verbe_double_choc(V) | Mots],ListeActeurs,[verbe_double_choc(V)|ListeChoc],ListeEvents) --> mot(verbe_double_choc(V)), {!}, mots(Mots,ListeActeurs,ListeChoc,ListeEvents).
mots([First | Mots],ListeActeurs,ListeChoc,ListeEvents) --> mot(First), {!}, mots(Mots,ListeActeurs,ListeChoc,ListeEvents).
mots([],[],[],[]) --> [].
mot(acteur(A)) --> [ng(A)], {is_actor(A)}.
mot(acteur(A)) --> [pg(A)], {is_actor(A)}.
mot(statique(A)) --> [ng(A)], {is_static(A)}.
mot(statique(A)) --> [pg(A)], {is_static(A)}.
mot(PG)--> [pg(PrepGroup)], {type_dir(PrepGroup,PG)}.
mot(PG)--> [rg(PrepGroup)], {type_dir(PrepGroup,PG)}.
mot(V) --> [vg(VerbeGroup)], {type_verbe(VerbeGroup,V)}.
mot(V) --> [ng(VerbeGroup)], {type_verbe(VerbeGroup,V)}.
mot(V) --> [gg(VerbeGroup)], {type_verbe(VerbeGroup,V)}.
mot(V) --> [infg(VerbeGroup)], {type_verbe(VerbeGroup,V)}.
mot(A) --> [A].
type_dir(PrepGroup,PG) :-
dir(PG2,Type,_),
subset(PG2,PrepGroup),
PG=..[Type,PrepGroup].
type_verbe(VerbeGroup, V) :-
verbe(Verbe, Type, _),
subset(Verbe, VerbeGroup),
V =.. [Type, VerbeGroup].
dir([gauche],direction,gauche).
dir([à_gauche],direction,gauche).
dir([droite],direction,droite).
dir([à_droite],direction,droite).
dir(['D'],direction,droite).
verbe([recevoir],verbe_choc,_).
verbe([faire,rentrer],verbe_choc,_).
verbe([N,éviter],verbe_choc,_) :- member(N,[ne,n]).
verbe([heurter],verbe_choc,_).
verbe([casser],verbe_choc,_).
verbe([percuter],verbe_choc,_).
verbe([taper],verbe_choc,_).
verbe([toucher],verbe_choc,_).
verbe([abîmer],verbe_choc,_).
verbe([accrocher],verbe_choc,_).
verbe([cogner],verbe_choc,_).
verbe([emboutir],verbe_choc,_).
verbe([accidenter],verbe_choc,_).
verbe([enfoncer],verbe_choc,_).
verbe([frotter],verbe_double_choc,_).
verbe([pousser],verbe_double_choc,_).
verbe([projeter],verbe_double_choc,_).
% verbe avec négation
verbe([N,démarrer],verbe_mouvement,verbe_stop):- member(N,[ne,n]).
verbe([N,arrêter],verbe_mouvement,verbe_avancer):- member(N,[ne,n]).
verbe([N,freiner],verbe_mouvement,verbe_avancer):- member(N,[ne,n]).
verbe([arrêter],verbe_mouvement,verbe_stop).
verbe([stopper],verbe_mouvement,verbe_stop).
verbe([stationner],verbe_mouvement,verbe_stop).
verbe([immobiliser],verbe_mouvement,verbe_stop).
verbe([circuler],verbe_mouvement,verbe_avancer).
verbe([rouler],verbe_mouvement,verbe_avancer).
verbe([démarrer],verbe_mouvement,verbe_avancer).
verbe([redémarrer],verbe_mouvement,verbe_avancer).
verbe([avancer],verbe_mouvement,verbe_avancer).
verbe([tourner],verbe_mouvement,verbe_tourner).
verbe([virer],verbe_mouvement,verbe_tourner).
% cherche les choc dans la liste de mots ListeChoc
% sort les chocs en liste
% la numérotation ne fonctionne pas
trouve_choc([],0) --> [].
trouve_choc([choc(A,B,V,N), choc(B,C,V,N2)|Reste],N2) -->
sujet_choc(A),
vdpronominalchoc(V,B),
cible_choc(C),
trouve_choc(Reste,M),
{N is M + 1, N2 is N + 1}.
trouve_choc([choc(B,A,V,N), choc(A,C,V,N2)|Reste],N2) -->
sujet_choc(A),
vdchoc(V),
cible_choc(C),
agent_choc(B),
trouve_choc(Reste,M),
{N is M + 1, N2 is N + 1}.
trouve_choc([choc(B,A,V,N), choc(A,C,V,N2)|Reste],N2) -->
agent_choc(B),
sujet_choc(A),
vdchoc(V),
cible_choc(C),
trouve_choc(Reste,M),
{N is M + 1, N2 is N + 1}.
trouve_choc([choc(B,A,V,N), choc(A,C,V,N2)|Reste],N2) -->
sujet_choc(A),
vdchoc(V),
agent_choc(B),
cible_choc(C),
trouve_choc(Reste,M),
{N is M + 1, N2 is N + 1}.
trouve_choc([choc(A,B,V,N), choc(B,C,V,N2)|Reste],N2) -->
sujet_choc(A),
vdchoc(V), objet_choc(B),
cible_choc(C),
trouve_choc(Reste,M),
{N is M + 1, N2 is N + 1}.
trouve_choc([choc(A,C,V,N)|Reste],N) -->
sujet_choc(A),
vdchoc(V),
cible_choc(C),
trouve_choc(Reste,M),
{N is M + 1}.
trouve_choc([choc(B,A,V,N)|Reste],N) -->
sujet_choc(A),
vchoc(V),
agent_choc(B),
trouve_choc(Reste,M),
{N is M + 1}.
trouve_choc([choc(A,B,V,N)|Reste],N) -->
sujet_choc(A),
vchoc(V),
objet_choc(B),
trouve_choc(Reste,M),
{N is M + 1}.
trouve_choc([choc(A,B,V,N)|Reste],N) -->
sujet_choc(A),
vpronominalchoc(V,B),
trouve_choc(Reste,M),
{N is M + 1}.
trouve_choc(Reste,N) -->
mot(_),
trouve_choc(Reste,N).
sujet_choc(X) --> [acteur(X)]. % un acteur peut être le sujet d'un choc
objet_choc(X) --> [acteur(X)]. % un acteur peut être l'objet d'un choc
objet_choc(X) --> [statique(X)]. % un objet statique peut être l'objet d'un choc
cible_choc([Prep|X]) --> [acteur([Prep|X])], {prep_sur(Prep)}. % un acteur peut être la cible d'un choc
cible_choc([Prep|X]) --> [statique([Prep|X])], {prep_sur(Prep)}. % un objet statique peut être la cible d'un choc
agent_choc([par|X]) --> [acteur([par|X])]. % un acteur peut être l'agent d'un choc
vchoc(V) --> [verbe_choc(V)].
vdchoc(V) --> [verbe_double_choc(V)].
vdpronominalchoc(V, [X]) -->
[verbe_double_choc(V)],
{pronom_reflechi(X), member(X,V)}.
vpronominalchoc(V, [X]) -->
[verbe_choc(V)],
{pronom_reflechi(X), member(X,V)}.
choc_par_defaut([], [choc([je],[him],[heurter],0)]).
choc_par_defaut(SortieChocs, SortieChocs).
%trouve_events(Events, ListeEvents) --> mot
% trouve la liste des acteurs et la liste des chocs pour l'instant
trouve_tout(ReportText, SortieActeurs, SortieChocs, SortieEvent) :-
parse_all_text(ReportText, ParsedText),
trouve_tout(ParsedText, [], [], [], SortieActeurs, SortieChocsProvisoire, SortieEvent),
choc_par_defaut(SortieChocsProvisoire, SortieChocs).
trouve_tout([L|Rest], ActeursPrecedents, ChocsPrecedents, EventsPrecedents, SortieActeurs, SortieChocs,SortieEvent) :-
mots( _, Acteurs, ListeChoc, /*Liste*/Events, L, []),
!,
trouve_choc(Choc, _, ListeChoc,[]),
%trouve_events(Events, ListeEvents, []),
append(ChocsPrecedents,Choc,NouveauxChocs),
append(EventsPrecedents,Events,NouveauxEvents),
append(ActeursPrecedents,Acteurs,NouveauxActeurs),
trouve_tout(Rest, NouveauxActeurs, NouveauxChocs,NouveauxEvents, SortieActeurs, SortieChocs,SortieEvent).
trouve_tout([],SortieActeurs, SortieChocs, SortieEvent, SortieActeurs, SortieChocs, SortieEvent).
Carsim3/compare.sh 0100644 0001756 0001774 00000000602 07400724727 0014355 0 ustar 00pierre cs 0000350 0000120 for i in A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 B1 B1-bis B2 B2-bis B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B40 B41 B42 B43 B44 B45 B46 B47 B48 B49 B50 B52 B53 B54 B55 B56 B57 B58 B60 B61 B62 B63 B65 B66 B68 B69 B70 B71 B72 B73; do diff ancien/$i nouveau/$i; done
Carsim3/corpus--real.xml 0100644 0001756 0001774 00000104507 07400724727 0015437 0 ustar 00pierre cs 0000350 0000120
]>
Me rendant à Beaumont sur Oise depuis Cergy, je me suis
retrouvée à un carrefour juste après la sortie Beaumont
sur Oise. J'étais à un stop avec 2 voitures devant moi
tournant à droite vers Mours. Alors que la première voiture
passait ce stop je fis mon contrôle à gauche et je
démarrais mais je percutais la deuxième voiture qui n'avait
pas encore passé le stop.
Voulant dépasser un semi-remorque clignotant à droite, ce dernier
tourna à gauche m'obligeant à braquer à gauche pour
l'éviter. La voiture a dérapé sur la chaussée
mouillée et a percuté un trottoir puis un mur de clôture
en face. Le conducteur du camion avait bien mis son clignotant à
gauche mais sa remorque inversait le signal sur la droite. Ne m'ayant
pas touché le conducteur s'est déclaré hors de cause et
n'a pas voulu établir de constat. Ayant quitté ma voiture pour
appeler un dépanneur j'ai retrouvé celle-ci avec la
portière arrière droite enfoncée sans coordonnées du
responsable.
Fort trafic à 17 h 15 Bd Sébastopol. Je roulais entre deux files de voitures arrêtées quand l'une des voitures à ma gauche a ouvert sa porte avant droite. Pour l'éviter, j'ai fait un écart qui m'a fait toucher le véhicule B avec l'arrière de ma moto ce qui a provoqué ma chute. Vu l'importance du trafic à cette heure là nous avons juste échangé nos assurances et noms ce qui explique que mon constat amiable ne soit signé que par moi.
Véhicule B venant de ma gauche, je me trouve dans le carrefour, à faible vitesse environ 40 km/h, quand le véhicule B, percute mon véhicule, et me refuse la priorité à droite. Le premier choc atteint mon aile arrière gauche, sous le choc, et à cause de la chaussée glissante, mon véhicule dérape, et percute la protection métallique d'un arbre, d'où un second choc frontal.
J'étais arrêté à l'intersection désirant emprunter la route où la circulation intense s'effectue à sens unique sur deux voies; lorsque le dernier véhicule du flot arrivait, j'ai voulu m'engager sur la deuxième file, lui laissant libre la première. Au moment où je démarrais, j'ai entendu le choc arrière; je ne m'attendais pas à ce qu'un usager désire me dépasser car il n'y avait pas deux voies matérialisées sur la portion de route où je me trouvais à l'arrêt.
Mr C.Delon, abordant le carrefour, laissait le passage aux véhicules roulant sur la voie abordée, car d'ordinaire se trouve un feu à ce carrefour(hors fonctionnement ce jour-là). Venant de derrière moi, roulant dans le même sens, dans la même file, Mr Oms n'a pas vu que j'étais arrêté et a percuté fortement mon véhicule, l'abîmant gravement. De ce fait, j'ai subi (C.Delon) "le coup du lapin"; le siège conducteur a été endommagé; les gendarmes se sont rendus sur place; j'ignore s'ils ont établi un rapport.
Etant arrêté momentanément sur la file de droite du Boulevard des Italiens j'avais mis mon clignotant j'étais à l'arrêt et m'apprêtant à changer de file. Le véhicule B arrivant sur ma gauche m'a serré de trop près et m'a abîme tout le côté avant gauche.
Je roulais sur la partie droite de la chaussée quand un véhicule arrivant en face dans le virage a été complètement déporté. Serrant à droite au maximum, je n'ai pu éviter la voiture qui arrivait à grande vitesse.
Nous roulions en ville sur une portion de route à deux voies où la vitesse est limitée à 45 km/h. Je clignotais et m'apprêtais à tourner à gauche vers le chemin de Condos. A ce moment, le véhicule B a doublé à grande vitesse notre véhicule et s'est immobilisé sur le trottoir gauche de la chaussée après m'avoir touché.
Nous roulions sur une route à 90 km/h. Un véhicule plein phares blancs nous aveuglant nous a percutés à grande vitesse à l'arrière du véhicule, nous entraînant dans une série de tonneaux avant l'immobilisation du véhicule dans un fossé.
Le conducteur du véhicule B me doublant par la droite a accroché mon pare-choc avant droit et m'a entraîné vers le mur amovible du pont de Gennevilliers que j'ai percuté violemment. D'après les dires du témoin le conducteur du véhicule B slalomait entre les voitures. qui me suivait, Après m'avoir heurtée, il a pris la fuite et n'a pu être rejoint par le témoin cité.
Je circulais à bord de mon véhicule A sur la file de droite réservée aux véhicules allant tout droit. Le véhicule B circulait sur la voie de gauche réservée aux véhicules allant à gauche (marquage au sol par des flèches). Celui-ci s'est rabattu sur mon véhicule A me heurtant à l'arrière gauche.
Je roulais dans la rue Pasteur quand une voiture surgit de ma droite; pour l'éviter, je me rabattais à gauche et freinais. Je pus l'éviter et mon rétroviseur heurte le sien. La voiture continue car elle n'eut rien et moi, je heurtais une benne qui stationnait sur le côté de la chaussée. La benne n'a pas été du tout endommagée. Ma voiture a été touchée à l'avant, ainsi qu'au rétroviseur.
Je circulais à environ 45 km/h dans une petite rue à sens unique où stationnaient des voitures de chaque côté. Surgissant brusquement sur ma droite sortant d'un parking d'immeuble, le véhicule de Mme Glorieux était à très peu de distance de mon véhicule; le passage étant impossible: surpris, je freinais immédiatement mais le choc fut inévitable.
Nous étions à Saint-Ouen, j'ai été surprise par la personne qui a freiné devant moi, n'ayant pas la possibilité de changer de voie et la route étant mouillée, je n'ai pu m'arrêter complètement à temps.
Je m'engageais (véhicule A) dans une file de station service. La pompe étant en panne, je reculais pour repartir lorsque j'ai heurté le véhicule B qui s'était engagé également dans la même file pour prendre de l'essence.
La conductrice de l'autre véhicule et moi amorcions le virage sur la gauche dans un carrefour. Nous étions à la même hauteur. Nous nous sommes certainement rapprochées et par conséquent percutées, sa voiture s'emboîtant dans la mienne, son aile gauche dans l'avant latéral droit de ma voiture.
Je commençais à tourner à droite lorsque j'ai vu en sens
inverse la voiture de Mr Louisnard qui empiétait sur ma voie de
circulation. Roulant doucement, j'ai immobilisé immédiatement
mon véhicule. Mr Louisnard qui roulait plus vite n'a pu en faire
autant et a frotté toute la longueur de sa voiture sur mon
pare-chocs avant qui n'a été que légèrement
abîmé. Je n'ai pu apercevoir Mr Louisnard avant car il roulait
sur sa gauche (il dépassait un véhicule en stationnement) dans
une rue qui m'était masquée par une haie. J'ai pris des photos
de l'endroit.
J'allais vers St Brice. Je venais de doubler un véhicule arrêté sur la droite, juste avant le carrefour et me rabattais, à faible allure, sur la droite. Le véhicule A, qui venait de ma gauche, a pris son tournant à vive allure, sans s'assurer de ma présence sur sa droite. J'étais d'ailleurs en partie passé, le choc ayant commencé à la portière gauche pour finir à l'arrière.
Je circulais sur la voie de droite. Dans le virage, la moto a dérapé sur des graviers. Je suis tombé de l'engin qui a fini sa course sur la voie de gauche. Le véhicule A, circulant sur cette voie, n'a pu stopper et a percuté mon véhicule.
Le motocycliste qui circulait sur la file de droite d'une double voie à sens unique a perdu le contrôle de sa moto et a dérapé sur une flaque d'huile. Il a été éjecté. Sa moto est venue heurter mon véhicule roulant à son niveau sur la voie de gauche. La moto a heurté l'avant, buté sur le coté droit de la voiture. Sur le moment, je me suis contentée de regarder les dégâts commis à l'avant de mon véhicule. Le flux de circulation, le choc causé par l'accident m'ont empêché d'inspecter aussi le coté latéral droit. Après inspection, il s'avère que ce côté est rayé et enfoncé à plusieurs endroits, notamment au niveau de l'aile, près des feux avant.
Lors d'un ralentissement, le conducteur qui me suivait n'a pas freiné et m'a percuté par l'arrière.
Etant à l'arrêt au feux tricolore (rouge) j'ai été percuté à l'arrière par le véhicule B, son conducteur n'ayant pas réussi à s'arrêter avant mon véhicule. Mon véhicule a subi des dégâts visuels à l'arrière. Sous réserve d'autres dégâts.
Le véhicule A était arrêté au céder le passage attendant que la voie soit libre sur la place à sens giratoire. Le véhicule B arrivant sur la même file n'ayant pas freiné à temps est allé heurter le véhicule A.
Alors que je redémarrais au feu vert, j'ai heurté l'arrière du véhicule qui me précédait. J'ai à peine touché ce véhicule puisque seul son pare-chocs est légèrement abîmé. Mon véhicule n'ayant lui, subi aucun dégât.
Les deux véhicules étaient en stationnement
perpendiculairement, l'un A dans la direction de la voie l'autre B
perpendiculairement à la chaussée. En l'absence des
conducteurs, le frein du véhicule B a lâché.
Entraîné par la pente, le véhicule B a traversé la
chaussée de l'avenue F.G. Lorca et a heurte le véhicule A, lui
enfonçant la portière droite, véhicule A garé de
façon normale sur le parking face au lycée Camille Claudel.
Dans un embouteillage, circulant sur la voie de gauche, j'ai empiété sur la ligne médiane pour juger l'étendue du bouchon, quand un motard (véhicule B) me doublant par la gauche et rendu invisible par l'angle mort de mon véhicule a heurté l'aile avant gauche. Si je suis conscient d'avoir commis une infraction en franchissant la ligne blanche, je tiens à signaler que le motard était dans le même cas.
En reculant pour sortir de ma place de parking, mon véhicule a heurté l'aile gauche de l'autre véhicule.
Sortant de mon lieu de travail, je m'engageais dans la rue Saulnier. A l'approche d'un carrefour de croisement avec l'avenue du Président Wilson je ralentis en présence d'un feu orange clignotant. Sur ma gauche se trouvait au loin la voiture B. J'estimais avoir le temps de traverser le carrefour, confiante en la priorité à droite à laquelle j'avais droit. La voiture B arrivait très vite et percuta l'arrière de mon véhicule qui bascula sur la droite et glissa sur la chaussée sur quelques mètres.
Alors que je roulais en direction de Genevilliers (Pont), un véhicule de "type trafic" stationné sur la bande d'arrêt d'urgence, a traversé la route sans aucune signalisation pour prendre un sens interdit, de droite à gauche. Je l'ai heurté perpendiculairement en son milieu latéral gauche. Le feu précédent était au vert et j'étais le seul véhicule sur la route.
Le véhicule C qui me précédait s'est mis à reculer. Voyant qu'il ne pourrait pas passer dans la rue de l'Ermitage, en travaux et barrée, (ce qui n'était pas indiqué) j'ai du reculer à mon tour ce faisant j'ai percuté le véhicule A se trouvant rue de la marée.
Véhicule B : Je circulais dans la rue de la Voie des Bans. Le véhicule A arrivait de la rue des Charretiers et s'apprêtait à tourner sur la gauche dans la rue de la voie des Bans. Les deux véhicules roulaient à faible vitesse. J'ai cru que le véhicule A me laissait passer. J'ai freiné mais mon pied a glissé sur la pédale.
Je me rendais chez Mr Petit, garagiste à St Martin du Tertre. Je stationnais mon véhicule Clio sur le coté droit de la rue à sens unique, devant l'entrée du garage. C'est alors que mon adversaire reculait et touchant la Clio cassait le phare avant gauche.
L'accident s'est produit sur le périphérique Est entre porte
des Lilas et porte de Pantin. La fermeture provisoire du
périphérique a entraîné une forte concentration de
véhicules avec un fort ralentissement. Le véhicule B a
"oublié" de freiner à temps et a provoqué l'accident en
venant heurter mon véhicule A à l'arrière.
Le véhicule A roulait lentement en ligne droite tout près de son domicile ; le véhicule B était en stationnement sur une bande réservée à cet effet et la conductrice a ouvert la portière gauche avant, provoquant, de ce fait, un choc : le rétroviseur du véhicule A (coté droit) fut brisé au moment du passage du véhicule A.
Je circulais dans la rue d'Herblay. J'ai mis mon clignotant pour tourner à gauche dans la rue Bossoutrot. Mr Joubert a été déporté sur la voie de gauche pour dépasser et a accroché mon véhicule alors que j'étais en train de tourner dans la rue Bossoutrot.
Les deux véhicules A et B roulaient sur un rond-point dans 2 files différentes, le véhicule A sur la voie de gauche, le véhicule B sur celle de droite. A et B ont pris la même sortie du rond-point (sortie à deux voies en sens unique). C'est au moment de s'engager dans cette sortie que le véhicule A est venue percuter le véhicule B au niveau de la portière arrière gauche. Le véhicule B à été projeté dans le trottoir, ce qui a endommagé la roue arrière droite.
Je roulais normalement sur ma droite lorsque la voiture B m'a coupé la route en sortant d'un parking où elle se trouvait, sans tenir compte du stop qui l'obligeait à s'arrêter. J'ai essayé de l'éviter en me déportant sur la gauche mais je n'ai pu éviter le choc.
A la sortie de l'autoroute A1, sortie Blanc Mesnil. Je suis arrivée sur la file extérieure sur le sens giratoire. Au feu vert j'ai tourné sur la droite pour rejoindre la nationale N17 en direction de Senlis. L'autre véhicule a fait la même manoeuvre, mais au moment de rejoindre la Nationale m'a heurté au niveau de la portière arrière droite.
A Taverny, nous nous sommes arrêtés alors que nous tournions à droite pour laisser passer un véhicule de pompiers, la voiture qui nous suivait nous a alors heurtés.
Mon véhicule était garé sur la place de stationnement du collège dans lequel je réside. J'ai reculé pour aller faire des courses et j'ai touché l'autre véhicule garé aussi sur ce lieu.
Je sortais du parking de la résidence des fleurs pour me diriger vers le centre d'Ecouen sur ma gauche. Il y avait un autre véhicule devant le véhicule A qui roulait à plus de 45 Km/h et pour lequel j'ai du reculer un peu pour le laisser passer. Cet autre véhicule étant passer (!) j'ai cru que le véhicule A me laisserait le passage mais il n'en a rien été et il m'a percuté au niveau de mon phare avant gauche.
Circulant Bd Couturier, le véhicule B était stationné sur ce même Boulevard quand celui-ci a effectué une marche arrière dans la rue Constantinide, puis a redémarré brusquement vers le bd Couturier pour tourner à gauche et m'a percuté au moment où j'arrivais sur le carrefour. Le véhicule B arrivait de la partie gauche de sa chaussée et a coupé sa manoeuvre pour tourner à gauche.
Par temps de brouillard, suis stoppé par police sur voie de gauche (raison : carambolage 1000m plus loin) et immédiatement percuté par véhicule A à l'arrière et projeté sur rail de sécurité.
Je circulais sur une rue en ville (voie prioritaire), lorsque à l'abord d'un carrefour un véhicule venant de ma gauche n'a pas respecté l'arrêt obligatoire au stop. En effet ce véhicule aurait du marquer l'arrêt avant le franchissement du carrefour. Malgré un respect certain de la limitation de vitesse en vigueur, je n'ai pu éviter le choc avec le véhicule qui a visiblement de façon délibérer (!) franchi le stop.
Médecin de garde sur la commune de Sannois alors que je rentrais à mon domicile après une visite de nuit auprès d'un malade le 9/5/93 à 1h du matin, au carrefour des rues Morinval et Renée Briand à Argenteuil une renault 9TSE immatriculée 5474 LT 92 m'a refusée la priorité en ne respectant pas le panneau et les bandes blanches de signalisation : cédez le passage. Mon véhicule a heurté l'aile avant droite, avant d'être arrêtée par l'autre panneau de signalisation qui a "cogné" mon aile avant droite.
Revenant à mon domicile, le chauffeur du véhicule B me précédant a perdu le contrôle de son véhicule à cause d'un brutal verglas. Je n'ai pas pu à mon tour, contrôler mon véhicule qui après 20 mètres a percuté le véhicule de Mme Louvet. Je tiens à signaler qu'il n'y avait pas de verglas ailleurs et que nous avons été beaucoup de véhicules à déraper sur cette rue. Rien ne pouvait laisser prévoir 1 tel verglas.
Je descendais l'avenue du Gal De Gaulle, roulant à 45 km/h je voyais la voiture de Melle Perrin arrêtée au stop. En me rapprochant de l'intersection représentée sur le schéma, j'ai vu sa voiture s'engager sur l'avenue, alors que j'arrivais quasiment à sa hauteur. J'ai immédiatement commencé à freiner. Je ne pouvais pas continuer sur la même trajectoire, pour ne pas percuter la voiture du côté conducteur. Je ne pouvais pas me déporter sur la droite pour l'éviter , à cause du trottoir, des arbres et des panneaux de signalisation. Afin d'éviter le choc, j'ai donc braqué sur la gauche, pensant que Melle Perrin freinerait pour éviter l'accident. Malheureusement, et comme elle me l'a dit par la suite, elle regardait à ce moment sur la droite (je venais de gauche) et n'a pas vu mon véhicule : elle a donc continué à s'engager, regardant toujours sur la droite et a heurté mon véhicule au niveau de l'aile avant droite.
Arrêté à la sortie du parking place de l'église a Jouy le Moutier la motocyclette est venue me percuter l'aile avant gauche de mon véhicule. La motocyclette à été perturbée par un véhicule qui circulait devant lui et a heurté ma voiture à l'arrêt qui n'était pas encore engagée sur la chaussée.
Je roulais sur la voix à droite. Devant moi roulait une camionnette. Elle s'est arrêtée. Puis le conducteur de la camionnette a enclenché la marche arrière et a reculé de telle manière, qu'il a finit par emboutir l'avant de mon véhicule. La boule pour tracter de la camionnette a enfoncé mon pare-choc et le devant de la voiture.
Mon véhicule a heurté l'angle avant gauche du véhicule stationné en prenant un stationnement en marche avant.
Je descendais vers Bellefontaine. La route est une route étroite sinueuse, bordée d'arbres. Dans un virage sans grande visibilité, nous nous sommes heurtés. La route était glissante. Je maintiens que je tenais correctement la droite, que je n'ai pas dépassé le milieu de la chaussée. Ma vitesse était limitée. Je vous signale que le pneu arrière gauche du véhicule B a dû se dégonfler au moment du croisement car elle a dû changer son pneu pour repartir. Je précise que sur la chaussée il n'y a pas de ligne médiane blanche continue ou pointillée.
Mon véhicule, en stationnement sur les berges, devant mon domicile a été heurté par un cycliste qui a perdu le contrôle de sa bicyclette.
Le véhicule B se trouvait immobilisé au milieu de la chaussée pour une raison inexpliquée. La chaussée étant glissante le véhicule A n'a pu s'arrêter.
Alors que nous rentrions à notre domicile de vacances à Draguignan un véhicule nous a percuté par la droite au niveau de l'aile avant. Nous étions sur un rond-point indonésien à priorité à gauche lorsque le tiers nous a percuté à droite nous projetant contre le rond point en béton.
J'étais (véhicule A) à l'arrêt au feu rouge derrière une 4L de la gendarmerie. Lorsque le feu est passé au vert, la 4L a calé. J'attendais qu'elle redémarre lorsque j'ai été heurtée à l'arrière par le véhicule B. Conduisant un véhicule aménagé pour la conduite manuelle, j'ai sans doute accentué la pression sur le frein principale que je tenais dans la main droite ce qui a causé une douleur du poignet mais qui m'a évité de heurter l'autre véhicule. Bien entendu ma tête a fait un(e) ???? involontaire.
J'étais engagé dans une rue à double sens quand la voiture B est arrivé de ma gauche. Pensant qu'il allait s'arrêter pour me laisser la priorité, il m'a coupé la route alors j'ai freiné mais c'était trop tard, je suis venu le percuter au niveau de son aile droite.
L'accident a eu lieu place Roger Levanneur à Montmorency le 27-4-93 à 17h. Alors que le véhicule B sortait d'un emplacement de parking, le véhicule A s'est engagé pour prendre la place du véhicule B avant que ce dernier ait pu se dégager totalement. La portière avant droite du véhicule A a percuté le pare choc arrière du véhicule B, qui était arrêté à ce moment là. Ayant oublié d'indiquer le point de choc sur le véhicule B le jour de l'accident je l'ai rajouté après. Le retard dans l'envoi de cette déclaration est du à la demande de l'adversaire qui souhaitait dans un premier temps ne pas faire de déclaration et m'a demandé d'attendre.
Dans un virage sur une route mouillée le véhicule à glissé et j'ai percuté la barrière de sécurité.
Je roulais dans la rue Pierre Curie St Prix quand j'ai vu le véhicule A qui arrivait en sens inverse, portière arrière gauche ouverte. Je me suis serrée sur le bas côté, mais au moment où il arrivait à ma hauteur il n'a pu m'éviter et m'a cogné avec sa portière ouverte. Le véhicule A s'est immobilisé 20 mètres plus loin, le conducteur ayant entendu un choc.
Je regardais si des véhicules venaient de ma droite et ai heurté le véhicule de devant.
Après avoir tourné à gauche le véhicule B m'a accroché en me dépassant et en virant à droite.
J'arrivais sur l'avenue de Poissy lorsque, à l'intersection de l'ave. Thorez, le véhicule A, après un temps d'hésitation, a réaccéléré pour s'engager à gauche en sens inverse dans l'ave. de Poissy et je n'ai pu l'éviter, heurtant de mon avant gauche sa portière arrière gauche.
Je venais du bd E. Quinet, le feu était au vert et deux flèches au sol m'indiquaient que les voies sur lesquelles je me trouvais me permettaient de tourner à gauche. Pensant avoir la priorité, je me suis engagée dans la direction de la place de gd Leclerc lorsque j'ai heurté la R11 de Mr Fouchard.
Je me trouvais dans la rue du Dct Leray au feu qui était rouge. Je virais à droite lentement puisque à hauteur du boulevard Maurice Berteaux la circulation était dense et un passage clouté était à proximité. Le véhicule A m'a percuté.
J'étais arrêtée à une intersection, clignotant à gauche pour prendre l'avenue des coquelicots quand le véhicule A m'a heurté à l'arrière.
Arrêtée à un feu rouge avec le pied sur le frein, frein à main levé, j'ai reçu un choc brutal à l'arrière provenant d'une Renault 21 immatriculée 1218 YV 95. J'ai moi même alors été projeter contre la voiture me précédent : Peugeot 205 immatriculée 6633 ZL 95. Il pleuvait averse et la chaussée était glissante. Le 1er choc venait en fait d'une Ford sierra immatriculée 180 AG T95 qui a initialement touchée la R21.
Arrêté pour céder à la traversée d'un piéton sur un passage clouté, je me suis fait rentrer dedans par derrière par le véhicule B.
Après m'être arrêté au feu rouge je suis reparti au feu vert et c'est à ce moment que le véhicule B est venu me percuter fortement à l'arrière. J'ai ressenti des douleurs à la nuque et dans le dos.
Au feu tricolore, j'étais arrêtée derrière une voiture (golf 434 ANP 95). Le feu passant au vert, j'ai amorcé un demarrage mais le chauffeur du véhicule ci-dessus nommé n'a pas démarré. Je suis donc venue heurter l'arrière de la voiture. Mon véhicule n'avait pas pris de vitesse, c'est juste un choc léger mais ceci a suffi pour tordre son pare-choc.
Je roulais à droite avenue de Libération en direction de la rue René Coty où je devais me rendre. Arrivant à cette rue, qui prend à gauche, je me suis rangé à droite le plus possible pour m'assurer qu'aucun véhicule n'arrivait. Je n'ai vu aucun véhicule proche ni devant ni derrière, et j'ai commencé à tourner à gauche. Ai-je mal apprécié la vitesse du véhicule A? Toujours est-il que la conductrice a freiné dans les dernières secondes, mais n'a pas pu éviter le choc. J'avais indiqué mon changement de direction.
Sur le périphérique, le 23/1/91, j'ai été heurté par l'arrière par le véhicule de Mme Lacoste Maryse, elle-même heurtée par un 3ième véhicule. Présente, immédiatement, sur les lieux, la police a constaté l'impossibilité de mon véhicule à redémarrer et a ordonné son enlèvement par un camion de dépannage.
Le véhicule B (627 JT 75) était sur la 3ème voie et mon véhicule A (7099 ZY 95) sur la 1ére voie. Alors que le véhicule B était en train de me doubler, le conducteur a perdu le contrôle de son véhicule. Il a tapé sur la rambarde centrale de sécurité et à traversé les voies. Il est venu me couper la route sur la 1ére voie. Mon véhicule A a tapé d'abord le véhicule B sur le côté droit, avant de s'écraser sur la rambarde de sécurité.
Ce jour (le 23-3/93) au moment de m'engager sur une place de parking en sous-sol, j'ai éternué fortement, ce qui me fit relâcher involontairement l'angle de braquage du volant si bien que l'angle AVD de mon véhicule a heurté le pilier à l'angle droit de la place de parking (prière de voir croquis p.1!).Le pilier n'a ni traces du choc, ni dommages.
Circulant Avenue du Sud, le véhicule B a brusquement coupée la voie au véhicule A. Le conducteur du véhicule B à reconnu ses torts en expliquant qu'il suivait le véhicule qui le précédait et qu'il ne voulait pas le perdre de vue.
Après un arrêt du véhicule C j'ai du freiner fortement. Le véhicule A a freiné trop tard et m'a poussé par l'arrière sur le véhicule C (constat séparé). J'étais donc à l'arrêt au moment de l'impact.
Je venais de freiner derrière B lorsque la 205 (532 JAL 75) m'a percuter l'arrière. Bien qu'à l'arrêt lors du choc j'ai été poussé sur B.
En roulant pour repartir du parking de la résidence ??? à
Franconville, j'ai heurté une clôture horizontale en ciment.
Me trouvant Av. Foch au carrefour de la rue Alfred ???, voulant tourner sur la D, le véhicule B, venant de gauche a forcé la priorité et m'a touché à l'avant droit. D'autre part, j'ai rajouté, après constat, la colonne observation et j'ai changé la croix n 13 par la croix n 12, ainsi que le témoin.
Heurté par le véhicule 646 XM 92 le véhicule A a été projeté contre ma voiture. Comme nous roulions à très faible vitesse mon véhicule n'a pas subi de dommages.
A Nanterre, arrêtée à un feu rouge, un automobiliste n'a pas vu le feu et m'a heurté de plein fouet à l'arrière gauche du véhicule. Pas de dommages autres que pour le véhicule A et B. Erreur au recto.
J'ai vu l'arrière du véhicule B s'approcher. J'ai appuyé à fond sur le frein, le véhicule B a continué à s'approcher. J'ai cru sur le moment que mes freins n'avaient pas répondu et nous avons rempli ce constat. J'ai immédiatement âpres essayé mes freins qui fonctionnaient très bien. J'ai maintenant la certitude, la rue étant légèrement en pente, que c'est le camion qui a reculé et est venu me percuter avec une de ses butées de quai située au niveau de son plancher donc de mon capot.(Pas de pare-choc!)
Je désirais sortir de la rue des Taupinières. Mon arrêt au stop n'était pas tout à fait rigoureux (chaussée mouillée). La voiture adversaire ne m'a pas évitée.
J'abordais l'intersection, la voiture "B" démarrait de la rue du Parc d'où je n'ai pu éviter la collision.
Le véhicule A était arrêté au cédé le passage car devant il y avait une file de voitures arrêtées pour cause d'un feu rouge. Le véhicule B est alors venu accidenté l'arrière du veh A.
Voulant éviter un chien qui traversait, j'ai heurté le mur de la maison 1 rue P. Doumer à Villiers-Adam. 95620.
Le lundi 1er février à 8h j'étais à l'arrêt à un feu rouge lorsque le véhicule A m'a percuté à l'arrière.
coupé la route alors j'ai freiné mais c'était trop tard, je suis venu le percuter au niveau de son aile droite.
L'accident a eu lieu placCarsim3/corpus.xml 0100644 0001756 0001774 00000071724 07400724730 0014437 0 ustar 00pierre cs 0000350 0000120
Me rendant à Beaumont sur Oise depuis Cergy, je me suis retrouvée à
un carrefour juste après la sortie Beaumont sur Oise. J'étais à un stop
avec 2 voitures devant moi tournant à droite vers Mours. Alors que la
première voiture passait ce stop je fis mon contrôle à gauche et je
démarrais mais je percutais la deuxième voiture qui n'avait pas encore
passé le stop.
Voulant dépasser un semi-remorque clignotant à droite, ce dernier tourna à gauche m'obligeant à braquer à gauche pour l'éviter. La voiture a dérapé sur la chaussée mouillée et a percuté un trottoir puis un mur de clôture en face. Le conducteur du camion avait bien mis son clignotant à gauche mais sa remorque inversait le signal sur la droite. Ne m'ayant pas touché le conducteur s'est déclaré hors de cause et n'a pas voulu établir de constat. Ayant quitté ma voiture pour appeler un dépanneur j'ai retrouvé celle-ci avec la portière arrière droite enfoncée sans coordonnées du responsable.
Fort trafic à 17 h 15 Bd Sébastopol. Je roulais entre deux files de voitures arrêtées quand l'une des voitures à ma gauche a ouvert sa porte avant droite. Pour l'éviter, j'ai fait un écart qui m'a fait toucher le véhicule B avec l'arrière de ma moto ce qui a provoqué ma chute. Vu l'importance du trafic à cette heure là nous avons juste échangé nos assurances et noms ce qui explique que mon constat amiable ne soit signé que par moi.
Véhicule B venant de ma gauche, je me trouve dans le carrefour, à faible vitesse environ 40 km/h, quand le véhicule B, percute mon véhicule, et me refuse la priorité à droite. Le premier choc atteint mon aile arrière gauche, sous le choc, et à cause de la chaussée glissante, mon véhicule dérape, et percute la protection métallique d'un arbre, d'où un second choc frontal.
J'étais arrêté à l'intersection désirant emprunter la route où la circulation intense s'effectue à sens unique sur deux voies; lorsque le dernier véhicule du flot arrivait, j'ai voulu m'engager sur la deuxième file, lui laissant libre la première. Au moment où je démarrais, j'ai entendu le choc arrière; je ne m'attendais pas à ce qu'un usager désire me dépasser car il n'y avait pas deux voies matérialisées sur la portion de route où je me trouvais à l'arrêt.
Mr C.Delon, abordant le carrefour, laissait le passage aux véhicules roulant sur la voie abordée, car d'ordinaire se trouve un feu à ce carrefour(hors fonctionnement ce jour-là). Venant de derrière moi, roulant dans le même sens, dans la même file, Mr Oms n'a pas vu que j'étais arrêté et a percuté fortement mon véhicule, l'abîmant gravement. De ce fait, j'ai subi (C.Delon) "le coup du lapin"; le siège conducteur a été endommagé; les gendarmes se sont rendus sur place; j'ignore s'ils ont établi un rapport.
Etant arrêté momentanément sur la file de droite du Boulevard des Italiens j'avais mis mon clignotant j'étais à l'arrêt et m'apprêtant à changer de file. Le véhicule B arrivant sur ma gauche m'a serré de trop près et m'a abîme tout le côté avant gauche.
Je roulais sur la partie droite de la chaussée quand un véhicule arrivant en face dans le virage a été complètement déporté. Serrant à droite au maximum, je n'ai pu éviter la voiture qui arrivait à grande vitesse.
Nous roulions en ville sur une portion de route à deux voies où la vitesse est limitée à 45 km/h. Je clignotais et m'apprêtais à tourner à gauche vers le chemin de Condos. A ce moment, le véhicule B a doublé à grande vitesse notre véhicule et s'est immobilisé sur le trottoir gauche de la chaussée après m'avoir touché.
Nous roulions sur une route à 90 km/h. Un véhicule plein phares blancs nous aveuglant nous a percutés à grande vitesse à l'arrière du véhicule, nous entraînant dans une série de tonneaux avant l'immobilisation du véhicule dans un fossé.
Le conducteur du véhicule B me doublant par la droite a accroché mon pare-choc avant droit et m'a entraîné vers le mur amovible du pont de Gennevilliers que j'ai percuté violemment. D'après les dires du témoin le conducteur du véhicule B slalomait entre les voitures. qui me suivait, Après m'avoir heurtée, il a pris la fuite et n'a pu être rejoint par le témoin cité.
Je circulais à bord de mon véhicule A sur la file de droite réservée aux véhicules allant tout droit. Le véhicule B circulait sur la voie de gauche réservée aux véhicules allant à gauche (marquage au sol par des flèches). Celui-ci s'est rabattu sur mon véhicule A me heurtant à l'arrière gauche.
Je roulais dans la rue Pasteur quand une voiture surgit de ma droite; pour l'éviter, je me rabattais à gauche et freinais. Je pus l'éviter et mon rétroviseur heurte le sien. La voiture continue car elle n'eut rien et moi, je heurtais une benne qui stationnait sur le côté de la chaussée. La benne n'a pas été du tout endommagée. Ma voiture a été touchée à l'avant, ainsi qu'au rétroviseur.
Je circulais à environ 45 km/h dans une petite rue à sens unique où stationnaient des voitures de chaque côté. Surgissant brusquement sur ma droite sortant d'un parking d'immeuble, le véhicule de Mme Glorieux était à très peu de distance de mon véhicule; le passage étant impossible: surpris, je freinais immédiatement mais le choc fut inévitable.
Nous étions à Saint-Ouen, j'ai été surprise par la personne qui a freiné devant moi, n'ayant pas la possibilité de changer de voie et la route étant mouillée, je n'ai pu m'arrêter complètement à temps.
Je m'engageais (véhicule A) dans une file de station service. La pompe étant en panne, je reculais pour repartir lorsque j'ai heurté le véhicule B qui s'était engagé également dans la même file pour prendre de l'essence.
La conductrice de l'autre véhicule et moi amorcions le virage sur la gauche dans un carrefour. Nous étions à la même hauteur. Nous nous sommes certainement rapprochées et par conséquent percutées, sa voiture s'emboîtant dans la mienne, son aile gauche dans l'avant latéral droit de ma voiture.
Je commençais à tourner à droite lorsque j'ai vu en sens inverse la voiture de Mr Louisnard qui empiétait sur ma voie de circulation. Roulant doucement, j'ai immobilisé immédiatement mon véhicule. Mr Louisnard qui roulait plus vite n'a pu en faire autant et a frotté toute la longueur de sa voiture sur mon pare-chocs avant qui n'a été que légèrement abîmé. Je n'ai pu apercevoir Mr Louisnard avant car il roulait sur sa gauche (il dépassait un véhicule en stationnement) dans une rue qui m'était masquée par une haie. J'ai pris des photos de l'endroit.
J'allais vers St Brice. Je venais de doubler un véhicule arrêté sur la droite, juste avant le carrefour et me rabattais, à faible allure, sur la droite. Le véhicule A, qui venait de ma gauche, a pris son tournant à vive allure, sans s'assurer de ma présence sur sa droite. J'étais d'ailleurs en partie passé, le choc ayant commencé à la portière gauche pour finir à l'arrière.
Je circulais sur la voie de droite. Dans le virage, la moto a dérapé sur des graviers. Je suis tombé de l'engin qui a fini sa course sur la voie de gauche. Le véhicule A, circulant sur cette voie, n'a pu stopper et a percuté mon véhicule.
Le motocycliste qui circulait sur la file de droite d'une double voie à sens unique a perdu le contrôle de sa moto et a dérapé sur une flaque d'huile. Il a été éjecté. Sa moto est venue heurter mon véhicule roulant à son niveau sur la voie de gauche. La moto a heurté l'avant, buté sur le coté droit de la voiture. Sur le moment, je me suis contentée de regarder les dégâts commis à l'avant de mon véhicule. Le flux de circulation, le choc causé par l'accident m'ont empêché d'inspecter aussi le coté latéral droit. Après inspection, il s'avère que ce côté est rayé et enfoncé à plusieurs endroits, notamment au niveau de l'aile, près des feux avant.
Lors d'un ralentissement, le conducteur qui me suivait n'a pas freiné et m'a percuté par l'arrière.
Etant à l'arrêt au feux tricolore (rouge) j'ai été percuté à l'arrière par le véhicule B, son conducteur n'ayant pas réussi à s'arrêter avant mon véhicule. Mon véhicule a subi des dégâts visuels à l'arrière. Sous réserve d'autres dégâts.
Le véhicule A était arrêté au céder le passage attendant que la voie soit libre sur la place à sens giratoire. Le véhicule B arrivant sur la même file n'ayant pas freiné à temps est allé heurter le véhicule A.
Alors que je redémarrais au feu vert, j'ai heurté l'arrière du véhicule qui me précédait. J'ai à peine touché ce véhicule puisque seul son pare-chocs est légèrement abîmé. Mon véhicule n'ayant lui, subi aucun dégât.
Les deux véhicules étaient en stationnement perpendiculairement, l'un A dans la direction de la voie l'autre B perpendiculairement à la chaussée. En l'absence des conducteurs, le frein du véhicule B a lâché. Entraîné par la pente, le véhicule B a traversé la chaussée de l'avenue F.G. Lorca et a heurte le véhicule A, lui enfonçant la portière droite, véhicule A garé de façon normale sur le parking face au lycée Camille Claudel.
Dans un embouteillage, circulant sur la voie de gauche, j'ai empiété sur la ligne médiane pour juger l'étendue du bouchon, quand un motard (véhicule B) me doublant par la gauche et rendu invisible par l'angle mort de mon véhicule a heurté l'aile avant gauche. Si je suis conscient d'avoir commis une infraction en franchissant la ligne blanche, je tiens à signaler que le motard était dans le même cas.
En reculant pour sortir de ma place de parking, mon véhicule a heurté l'aile gauche de l'autre véhicule.
Sortant de mon lieu de travail, je m'engageais dans la rue Saulnier. A l'approche d'un carrefour de croisement avec l'avenue du Président Wilson je ralentis en présence d'un feu orange clignotant. Sur ma gauche se trouvait au loin la voiture B. J'estimais avoir le temps de traverser le carrefour, confiante en la priorité à droite à laquelle j'avais droit. La voiture B arrivait très vite et percuta l'arrière de mon véhicule qui bascula sur la droite et glissa sur la chaussée sur quelques mètres.
Alors que je roulais en direction de Genevilliers (Pont), un véhicule de "type trafic" stationné sur la bande d'arrêt d'urgence, a traversé la route sans aucune signalisation pour prendre un sens interdit, de droite à gauche. Je l'ai heurté perpendiculairement en son milieu latéral gauche. Le feu précédent était au vert et j'étais le seul véhicule sur la route.
Le véhicule C qui me précédait s'est mis à reculer. Voyant qu'il ne pourrait pas passer dans la rue de l'Ermitage, en travaux et barrée, (ce qui n'était pas indiqué) j'ai du reculer à mon tour ce faisant j'ai percuté le véhicule A se trouvant rue de la marée.
Véhicule B : Je circulais dans la rue de la Voie des Bans. Le véhicule A arrivait de la rue des Charretiers et s'apprêtait à tourner sur la gauche dans la rue de la voie des Bans. Les deux véhicules roulaient à faible vitesse. J'ai cru que le véhicule A me laissait passer. J'ai freiné mais mon pied a glissé sur la pédale.
Je me rendais chez Mr Petit, garagiste à St Martin du Tertre. Je stationnais mon véhicule Clio sur le coté droit de la rue à sens unique, devant l'entrée du garage. C'est alors que mon adversaire reculait et touchant la Clio cassait le phare avant gauche.
L'accident s'est produit sur le périphérique Est entre porte des Lilas et porte de Pantin. La fermeture provisoire du périphérique a entraîné une forte concentration de véhicules avec un fort ralentissement. Le véhicule B a "oublié" de freiner à temps et a provoqué l'accident en venant heurter mon véhicule A à l'arrière.
Le véhicule A roulait lentement en ligne droite tout près de son domicile ; le véhicule B était en stationnement sur une bande réservée à cet effet et la conductrice a ouvert la portière gauche avant, provoquant, de ce fait, un choc : le rétroviseur du véhicule A (coté droit) fut brisé au moment du passage du véhicule A.
Je circulais dans la rue d'Herblay. J'ai mis mon clignotant pour tourner à gauche dans la rue Bossoutrot. Mr Joubert a été déporté sur la voie de gauche pour dépasser et a accroché mon véhicule alors que j'étais en train de tourner dans la rue Bossoutrot.
Les deux véhicules A et B roulaient sur un rond-point dans 2 files différentes, le véhicule A sur la voie de gauche, le véhicule B sur celle de droite. A et B ont pris la même sortie du rond-point (sortie à deux voies en sens unique). C'est au moment de s'engager dans cette sortie que le véhicule A est venue percuter le véhicule B au niveau de la portière arrière gauche. Le véhicule B à été projeté dans le trottoir, ce qui a endommagé la roue arrière droite.
Je roulais normalement sur ma droite lorsque la voiture B m'a coupé la route en sortant d'un parking où elle se trouvait, sans tenir compte du stop qui l'obligeait à s'arrêter. J'ai essayé de l'éviter en me déportant sur la gauche mais je n'ai pu éviter le choc.
A la sortie de l'autoroute A1, sortie Blanc Mesnil. Je suis arrivée sur la file extérieure sur le sens giratoire. Au feu vert j'ai tourné sur la droite pour rejoindre la nationale N17 en direction de Senlis. L'autre véhicule a fait la même manoeuvre, mais au moment de rejoindre la Nationale m'a heurté au niveau de la portière arrière droite.
A Taverny, nous nous sommes arrêtés alors que nous tournions à droite pour laisser passer un véhicule de pompiers, la voiture qui nous suivait nous a alors heurtés.
Mon véhicule était garé sur la place de stationnement du collège dans lequel je réside. J'ai reculé pour aller faire des courses et j'ai touché l'autre véhicule garé aussi sur ce lieu.
Je sortais du parking de la résidence des fleurs pour me diriger vers le centre d'Ecouen sur ma gauche. Il y avait un autre véhicule devant le véhicule A qui roulait à plus de 45 Km/h et pour lequel j'ai du reculer un peu pour le laisser passer. Cet autre véhicule étant passer (!) j'ai cru que le véhicule A me laisserait le passage mais il n'en a rien été et il m'a percuté au niveau de mon phare avant gauche.
Circulant Bd Couturier, le véhicule B était stationné sur ce même Boulevard quand celui-ci a effectué une marche arrière dans la rue Constantinide, puis a redémarré brusquement vers le bd Couturier pour tourner à gauche et m'a percuté au moment où j'arrivais sur le carrefour. Le véhicule B arrivait de la partie gauche de sa chaussée et a coupé sa manoeuvre pour tourner à gauche.
Par temps de brouillard, suis stoppé par police sur voie de gauche (raison : carambolage 1000m plus loin) et immédiatement percuté par véhicule A à l'arrière et projeté sur rail de sécurité.
Je circulais sur une rue en ville (voie prioritaire), lorsque à l'abord d'un carrefour un véhicule venant de ma gauche n'a pas respecté l'arrêt obligatoire au stop. En effet ce véhicule aurait du marquer l'arrêt avant le franchissement du carrefour. Malgré un respect certain de la limitation de vitesse en vigueur, je n'ai pu éviter le choc avec le véhicule qui a visiblement de façon délibérer (!) franchi le stop.
Médecin de garde sur la commune de Sannois alors que je rentrais à mon domicile après une visite de nuit auprès d'un malade le 9/5/93 à 1h du matin, au carrefour des rues Morinval et Renée Briand à Argenteuil une renault 9TSE immatriculée 5474 LT 92 m'a refusée la priorité en ne respectant pas le panneau et les bandes blanches de signalisation : cédez le passage. Mon véhicule a heurté l'aile avant droite, avant d'être arrêtée par l'autre panneau de signalisation qui a "cogné" mon aile avant droite.
Revenant à mon domicile, le chauffeur du véhicule B me précédant a perdu le contrôle de son véhicule à cause d'un brutal verglas. Je n'ai pas pu à mon tour, contrôler mon véhicule qui après 20 mètres a percuté le véhicule de Mme Louvet. Je tiens à signaler qu'il n'y avait pas de verglas ailleurs et que nous avons été beaucoup de véhicules à déraper sur cette rue. Rien ne pouvait laisser prévoir 1 tel verglas.
Je descendais l'avenue du Gal De Gaulle, roulant à 45 km/h je voyais la voiture de Melle Perrin arrêtée au stop. En me rapprochant de l'intersection représentée sur le schéma, j'ai vu sa voiture s'engager sur l'avenue, alors que j'arrivais quasiment à sa hauteur. J'ai immédiatement commencé à freiner. Je ne pouvais pas continuer sur la même trajectoire, pour ne pas percuter la voiture du côté conducteur. Je ne pouvais pas me déporter sur la droite pour l'éviter , à cause du trottoir, des arbres et des panneaux de signalisation. Afin d'éviter le choc, j'ai donc braqué sur la gauche, pensant que Melle Perrin freinerait pour éviter l'accident. Malheureusement, et comme elle me l'a dit par la suite, elle regardait à ce moment sur la droite (je venais de gauche) et n'a pas vu mon véhicule : elle a donc continué à s'engager, regardant toujours sur la droite et a heurté mon véhicule au niveau de l'aile avant droite.
Arrêté à la sortie du parking place de l'église a Jouy le Moutier la motocyclette est venue me percuter l'aile avant gauche de mon véhicule. La motocyclette à été perturbée par un véhicule qui circulait devant lui et a heurté ma voiture à l'arrêt qui n'était pas encore engagée sur la chaussée.
Je roulais sur la voix à droite. Devant moi roulait une camionnette. Elle s'est arrêtée. Puis le conducteur de la camionnette a enclenché la marche arrière et a reculé de telle manière, qu'il a finit par emboutir l'avant de mon véhicule. La boule pour tracter de la camionnette a enfoncé mon pare-choc et le devant de la voiture.
Mon véhicule a heurté l'angle avant gauche du véhicule stationné en prenant un stationnement en marche avant.
Je descendais vers Bellefontaine. La route est une route étroite sinueuse, bordée d'arbres. Dans un virage sans grande visibilité, nous nous sommes heurtés. La route était glissante. Je maintiens que je tenais correctement la droite, que je n'ai pas dépassé le milieu de la chaussée. Ma vitesse était limitée. Je vous signale que le pneu arrière gauche du véhicule B a dû se dégonfler au moment du croisement car elle a dû changer son pneu pour repartir. Je précise que sur la chaussée il n'y a pas de ligne médiane blanche continue ou pointillée.
Mon véhicule, en stationnement sur les berges, devant mon domicile a été heurté par un cycliste qui a perdu le contrôle de sa bicyclette.
Le véhicule B se trouvait immobilisé au milieu de la chaussée pour une raison inexpliquée. La chaussée étant glissante le véhicule A n'a pu s'arrêter.
Alors que nous rentrions à notre domicile de vacances à Draguignan un véhicule nous a percuté par la droite au niveau de l'aile avant. Nous étions sur un rond-point indonésien à priorité à gauche lorsque le tiers nous a percuté à droite nous projetant contre le rond point en béton.
J'étais (véhicule A) à l'arrêt au feu rouge derrière une 4L de la gendarmerie. Lorsque le feu est passé au vert, la 4L a calé. J'attendais qu'elle redémarre lorsque j'ai été heurtée à l'arrière par le véhicule B. Conduisant un véhicule aménagé pour la conduite manuelle, j'ai sans doute accentué la pression sur le frein principale que je tenais dans la main droite ce qui a causé une douleur du poignet mais qui m'a évité de heurter l'autre véhicule. Bien entendu ma tête a fait un(e) ???? involontaire.
J'étais engagé dans une rue à double sens quand la voiture B est arrivé de ma gauche. Pensant qu'il allait s'arrêter pour me laisser la priorité, il m'a coupé la route alors j'ai freiné mais c'était trop tard, je suis venu le percuter au niveau de son aile droite.
L'accident a eu lieu place Roger Levanneur à Montmorency le 27-4-93 à 17h. Alors que le véhicule B sortait d'un emplacement de parking, le véhicule A s'est engagé pour prendre la place du véhicule B avant que ce dernier ait pu se dégager totalement. La portière avant droite du véhicule A a percuté le pare choc arrière du véhicule B, qui était arrêté à ce moment là. Ayant oublié d'indiquer le point de choc sur le véhicule B le jour de l'accident je l'ai rajouté après. Le retard dans l'envoi de cette déclaration est du à la demande de l'adversaire qui souhaitait dans un premier temps ne pas faire de déclaration et m'a demandé d'attendre.
Dans un virage sur une route mouillée le véhicule à glissé et j'ai percuté la barrière de sécurité.
Je roulais dans la rue Pierre Curie St Prix quand j'ai vu le véhicule A qui arrivait en sens inverse, portière arrière gauche ouverte. Je me suis serrée sur le bas côté, mais au moment où il arrivait à ma hauteur il n'a pu m'éviter et m'a cogné avec sa portière ouverte. Le véhicule A s'est immobilisé 20 mètres plus loin, le conducteur ayant entendu un choc.
Je regardais si des véhicules venaient de ma droite et ai heurté le véhicule de devant.
Après avoir tourné à gauche le véhicule B m'a accroché en me dépassant et en virant à droite.
J'arrivais sur l'avenue de Poissy lorsque, à l'intersection de l'ave. Thorez, le véhicule A, après un temps d'hésitation, a réaccéléré pour s'engager à gauche en sens inverse dans l'ave. de Poissy et je n'ai pu l'éviter, heurtant de mon avant gauche sa portière arrière gauche.
Je venais du bd E. Quinet, le feu était au vert et deux flèches au sol m'indiquaient que les voies sur lesquelles je me trouvais me permettaient de tourner à gauche. Pensant avoir la priorité, je me suis engagée dans la direction de la place de gd Leclerc lorsque j'ai heurté la R11 de Mr Fouchard.
Je me trouvais dans la rue du Dct Leray au feu qui était rouge. Je virais à droite lentement puisque à hauteur du boulevard Maurice Berteaux la circulation était dense et un passage clouté était à proximité. Le véhicule A m'a percuté.
J'étais arrêtée à une intersection, clignotant à gauche pour prendre l'avenue des coquelicots quand le véhicule A m'a heurté à l'arrière.
Arrêtée à un feu rouge avec le pied sur le frein, frein à main levé, j'ai reçu un choc brutal à l'arrière provenant d'une Renault 21 immatriculée 1218 YV 95. J'ai moi même alors été projeter contre la voiture me précédent : Peugeot 205 immatriculée 6633 ZL 95. Il pleuvait averse et la chaussée était glissante. Le 1er choc venait en fait d'une Ford sierra immatriculée 180 AG T95 qui a initialement touchée la R21.
Arrêté pour céder à la traversée d'un piéton sur un passage clouté, je me suis fait rentrer dedans par derrière par le véhicule B.
Après m'être arrêté au feu rouge je suis reparti au feu vert et c'est à ce moment que le véhicule B est venu me percuter fortement à l'arrière. J'ai ressenti des douleurs à la nuque et dans le dos.
Au feu tricolore, j'étais arrêtée derrière une voiture (golf 434 ANP 95). Le feu passant au vert, j'ai amorcé un demarrage mais le chauffeur du véhicule ci-dessus nommé n'a pas démarré. Je suis donc venue heurter l'arrière de la voiture. Mon véhicule n'avait pas pris de vitesse, c'est juste un choc léger mais ceci a suffi pour tordre son pare-choc.
Je roulais à droite avenue de Libération en direction de la rue René Coty où je devais me rendre. Arrivant à cette rue, qui prend à gauche, je me suis rangé à droite le plus possible pour m'assurer qu'aucun véhicule n'arrivait. Je n'ai vu aucun véhicule proche ni devant ni derrière, et j'ai commencé à tourner à gauche. Ai-je mal apprécié la vitesse du véhicule A? Toujours est-il que la conductrice a freiné dans les dernières secondes, mais n'a pas pu éviter le choc. J'avais indiqué mon changement de direction.
Sur le périphérique, le 23/1/91, j'ai été heurté par l'arrière par le véhicule de Mme Lacoste Maryse, elle-même heurtée par un 3ième véhicule. Présente, immédiatement, sur les lieux, la police a constaté l'impossibilité de mon véhicule à redémarrer et a ordonné son enlèvement par un camion de dépannage.
Le véhicule B (627 JT 75) était sur la 3ème voie et mon véhicule A (7099 ZY 95) sur la 1ére voie. Alors que le véhicule B était en train de me doubler, le conducteur a perdu le contrôle de son véhicule. Il a tapé sur la rambarde centrale de sécurité et à traversé les voies. Il est venu me couper la route sur la 1ére voie. Mon véhicule A a tapé d'abord le véhicule B sur le côté droit, avant de s'écraser sur la rambarde de sécurité.
Ce jour (le 23-3/93) au moment de m'engager sur une place de parking en sous-sol, j'ai éternué fortement, ce qui me fit relâcher involontairement l'angle de braquage du volant si bien que l'angle AVD de mon véhicule a heurté le pilier à l'angle droit de la place de parking (prière de voir croquis p.1!).Le pilier n'a ni traces du choc, ni dommages.
Circulant Avenue du Sud, le véhicule B a brusquement coupée la voie au véhicule A. Le conducteur du véhicule B à reconnu ses torts en expliquant qu'il suivait le véhicule qui le précédait et qu'il ne voulait pas le perdre de vue.
Après un arrêt du véhicule C j'ai du freiner fortement. Le véhicule A a freiné trop tard et m'a poussé par l'arrière sur le véhicule C (constat séparé). J'étais donc à l'arrêt au moment de l'impact.
Je venais de freiner derrière B lorsque la 205 (532 JAL 75) m'a percuter l'arrière. Bien qu'à l'arrêt lors du choc j'ai été poussé sur B.
En roulant pour repartir du parking de la résidence ??? à Franconville, j'ai heurté une clôture horizontale en ciment.
Me trouvant Av. Foch au carrefour de la rue Alfred ???, voulant tourner sur la D, le véhicule B, venant de gauche a forcé la priorité et m'a touché à l'avant droit. D'autre part, j'ai rajouté, après constat, la colonne observation et j'ai changé la croix n 13 par la croix n 12, ainsi que le témoin.
Heurté par le véhicule 646 XM 92 le véhicule A a été projeté contre ma voiture. Comme nous roulions à très faible vitesse mon véhicule n'a pas subi de dommages.
A Nanterre, arrêtée à un feu rouge, un automobiliste n'a pas vu le feu et m'a heurté de plein fouet à l'arrière gauche du véhicule. Pas de dommages autres que pour le véhicule A et B. Erreur au recto.
J'ai vu l'arrière du véhicule B s'approcher. J'ai appuyé à fond sur le frein, le véhicule B a continué à s'approcher. J'ai cru sur le moment que mes freins n'avaient pas répondu et nous avons rempli ce constat. J'ai immédiatement âpres essayé mes freins qui fonctionnaient très bien. J'ai maintenant la certitude, la rue étant légèrement en pente, que c'est le camion qui a reculé et est venu me percuter avec une de ses butées de quai située au niveau de son plancher donc de mon capot.(Pas de pare-choc!)
Je désirais sortir de la rue des Taupinières. Mon arrêt au stop n'était pas tout à fait rigoureux (chaussée mouillée). La voiture adversaire ne m'a pas évitée.
J'abordais l'intersection, la voiture "B" démarrait de la rue du Parc d'où je n'ai pu éviter la collision.
Le véhicule A était arrêté au cédé le passage car devant il y avait une file de voitures arrêtées pour cause d'un feu rouge. Le véhicule B est alors venu accidenté l'arrière du veh A.
Voulant éviter un chien qui traversait, j'ai heurté le mur de la maison 1 rue P. Doumer à Villiers-Adam. 95620.
Le lundi 1er février à 8h j'étais à l'arrêt à un feu rouge lorsque le véhicule A m'a percuté à l'arrière.
se était limitée. Je vous signale que le pneCarsim3/coupure.pl 0100644 0001756 0001774 00000000630 07400724730 0014405 0 ustar 00pierre cs 0000350 0000120 % Tentative de récriture avec des DCG. Semble difficile.
statics --> road.
statics --> stopsign.
statics --> trafficlight.
statics --> crossing.
statics --> arbre.
statics --> barriere.
road --> crossroads.
road --> left_turn.
road --> right_turn.
road --> straight_road.
crossroads --> carrefour. %object
crossroads --> vg(V), {tourner(V)}. %action
crossroads --> infg(V), {tourner(V)}.
Carsim3/fiche.pl 0100644 0001756 0001774 00000006046 07400724730 0014010 0 ustar 00pierre cs 0000350 0000120 % fiche.pl contains the predicates creating the fiche from the
% extracted information
%-----------------------------------------------------------------------------
% Écriture du formulaire
% À écrire au format XML dans l'avenir
write_statics(StaticObjects) :-
nl,
write('STATIC ['),
nl,
write_static_objects(StaticObjects),
write(']'),
nl.
write_static_objects([static(Type, Properties) | StaticObjects]) :-
write_object(Type, Properties),
write_static_objects(StaticObjects).
write_static_objects([]).
write_object('ROAD', [Kind]) :-
format(' ROAD [~n', []),
format(' KIND = ~a ;~n', Kind),
format(' ]~n', []).
write_object('TREE', [Id, X, Y]) :-
format(' TREE [~n', []),
format(' ID = ~a ;~n', Id),
format(' COORD = (~d,~d) ;~n', [X, Y]),
format(' ]~n', []).
write_object('STOPSIGN', [ X, Y]) :-
format(' STOPSIGN [~n', []),
format(' COORD = (~d,~d) ;~n', [X, Y]),
format(' ]~n', []).
write_object('CROSSING', [ X, Y]) :-
format(' CROSSING [~n', []),
format(' COORD = (~d,~d) ;~n', [X, Y]),
format(' ]~n', []).
write_object('LIGHT', [Id, Color, X, Y]) :-
format(' LIGHT [~n', []),
format(' ID = ~a ;~n', Id),
format(' COLOR = ~a ;~n', Color),
format(' COORD = (~d,~d) ;~n', [X, Y]),
format(' ]~n', []).
write_dynamics(DynamicObjects) :-
nl,
write('DYNAMIC ['),
nl,
write_dynamic_objects(DynamicObjects),
write(']'),
nl.
write_dynamic_objects(DynamicObjects) :-
member(vehicle(X, Y, Z, T, _), DynamicObjects),
subtract(DynamicObjects, [vehicle(X, Y, Z, T, _)], NewDynamicObjects),
format(' VEHICLE [~n', []),
format(' ID = ~a; ~n', X),
format(' KIND = ~a; ~n', Y),
format(' INITDIRECTION = ~a; ~n', Z),
format(' CHAIN [~n', []),
write_events(T),
format(' ] ~n', []),
format(' ] ~n', []),
write_dynamic_objects(NewDynamicObjects).
write_dynamic_objects(_).
write_events([]).
% il faudrait l'integrer lorsque les évènements sont multiples
/*write_events([X]) :-
format(' CRITICAL_EVENT [~n', []),
format(' KIND = ~a; ~n', X),
format(' ] ~n', []),
write_events([]).
*/
write_events([X | Rest]) :-
format(' EVENT [~n', []),
format(' KIND = ~a; ~n', X),
format(' ] ~n', []),
write_events(Rest).
write_accidents(Accidents) :-
nl,
write('// Collision Objects'),
nl,
write('ACCIDENT ['),
nl,
write_collisions(Accidents),
write(']'),
!.
write_collisions(Accidents) :-
member(collision2(A, B, C, D, E, _), Accidents),
subtract(Accidents, [collision2(A, B, C, D, E, _)], NewAccidents),
format(' COLLISION [~n', []),
format(' ACTOR = ~a,~a; ~n', [A, B]),
(
atom(C),
format(' VICTIM = ~a,~a; ~n', [C, D])
;
format(' VICTIM = ~p,~a; ~n', [C, D])
),
write_coords(E),
format(' ] ~n', []),
write_collisions(NewAccidents).
write_collisions(_).
write_coords([]).
write_coords([X, Y]):-
format(' COORD = (~a,~a) ;~n', [X, Y]).
Carsim3/info_extraction.pl 0100644 0001756 0001774 00000120340 07400724730 0016117 0 ustar 00pierre cs 0000350 0000120 %% Programme d'extraction d'informations pour les constats MAIF.
%% Programmé par Vincent Legendre et Sylvain Dupuy
%% Modifié par Pierre Nugues
%% Modifié par Simon Le Gloannec, Pierre Aubeuf et Cédric Métais
% on utilise l'analyseur de Pierre Nugues pour extraire la configuration de la route
%
% appel à des prédicats dynamique a éliminer: vehicle, acteur, collision
% Static objects: static(+TYPE, +Features)
% choc(+Subject, +Object, +VerbeGroup, +Index)
% vehicle(enonciateur, car, east, [driving_forward], N))
% vehicle(Id, Type, InitDir, EventList, N))
% collision(enonciateur, front, defaut_B, front, [], N2)),
% collision(+VehicleA, +PartA, VehicleB, PartB, +Coord, +N2)),
% entre_parentheses( +/-GroupeDeMots, Acteur),
% acteur( +/-ListeMots), le mot le plus significatif du groupe de mot est place en tete de liste
% init_direction( +/-Acteur, +/- DirectionInitiale),
% nontrie (+/-Liste) des elements nontries.
% Teste si un verbe est à la voie passive
is_passive([]) :- fail.
is_passive([X | R]):-
aux_conj_gerund_have(_, [X], []),
isreallypassif(R).
is_passive([X | R]):-
aux_conj_have(_, [X], []),
isreallypassif(R).
is_passive([X | _]):-
aux_conj_be(_, [X], []).
is_passive([X | _]):-
aux_conj_gerund_be(_, [X], []).
is_passive([_ | R]):-
is_passive(R).
isreallypassif([]) :- fail.
isreallypassif([X | _]):-
aux_conj_gerund_be(_, [X], []).
isreallypassif([X | _]):-
aux_conj_be(_, [X], []).
isreallypassif([_ | R]):-
isreallypassif(R).
% Trouve le sujet d'un verbe ************************************************
%find_subject(+Parsed, +VerbeGroup, -Subject, -Rest),
find_subject(A, B, C, D) :-
find_subject(A, B, C, D, _).
find_subject([vg(Vg) | R], Vg, Subject, R, Subject).
find_subject([ng(X) | R], Vg, Subject, Rest, _) :-
test_valid_actor(X),
find_subject(R, Vg, Subject, Rest, X).
find_subject([_ | R], Vg, Subject, Rest, Temp) :-
find_subject(R, Vg, Subject, Rest, Temp).
test_valid_actor(X) :-
actor1(Actor),
contains_word(X, Actor).
test_valid_actor([X | _]) :-
is_proper_noun(X).
test_valid_actor([_ | R]) :-
test_valid_actor(R).
test_valid_victim(X) :-
victim1(Victim),
contains_word(X, Victim).
test_valid_victim([X | _]) :-
is_proper_noun(X).
test_valid_victim([_ | R]) :-
test_valid_victim(R).
% Trouve le responsable d'un gérondif ************************************************
%find_responsible(+Parsed, +GGroup, -Subject, -Rest),
find_responsible(A, B, C, D) :-
find_responsible(A, B, C, D, _).
find_responsible([gg(Gg) | R], Gg, Subject, R, Subject).
find_responsible([ng(X) | R], Gg, Subject, Rest, _) :-
test_valid_actor(X),
find_responsible(R, Gg, Subject, Rest, X).
find_responsible([_ | R], Gg, Subject, Rest, Temp) :-
find_responsible(R, Gg, Subject, Rest, Temp).
% Trouve le sujet d'une action considérée comme un ng ************************************************
%find_responsible(+Parsed, +NGroup, -Subject, -Rest),
find_noun_subject(A, B, C, D) :-
find_noun_subject(A, B, C, D, _).
find_noun_subject([ng(Ng) | R], Ng, Subject, R, Subject).
find_noun_subject([ng(X) | R], Ng, Subject, Rest, _) :-
test_valid_actor(X),
find_noun_subject(R, Ng, Subject, Rest, X).
find_noun_subject([_ | R], Ng, Subject, Rest, Temp) :-
find_noun_subject(R, Ng, Subject, Rest, Temp).
% Trouve le "sujet" d'un verbe infinitif************************************************
%find_subject(+Parsed, +VerbeGroup, -Subject, -Rest),
find_subject_infinitive_verb(A, B, C, D) :-
find_subject_infinitive_verb(A, B, C, D, _).
find_subject_infinitive_verb([infg(Vg) | R], Vg, Subject, R, Subject).
find_subject_infinitive_verb([ng(X) | R], Vg, Subject, Rest, _) :-
test_valid_actor(X),
find_subject_infinitive_verb(R, Vg, Subject, Rest, X).
find_subject_infinitive_verb([_ | R], Vg, Subject, Rest, Temp) :-
find_subject_infinitive_verb(R, Vg, Subject, Rest, Temp).
% Trouve l'objet d'un verbe actif *******************************************
find_valid_object([ng(X) | R], _, X, R) :-
test_valid_victim(X).
find_valid_object([_ | Rest], Vg, Obj, R) :-
find_valid_object(Rest, Vg, Obj, R).
find_pronoun_object(R, Vg, [X], R):-
contains_word2(Vg, [m, nous, l, me, le, la, lui], X).
find_default_object([ng(X)|R],_,X,R).
find_default_object([_ | Rest],Vg,Obj,R) :-
find_default_object(Rest,Vg,Obj,R).
find_object(Parsed,Vg,Obj,R):-
find_valid_object(Parsed,Vg,Obj,R).
find_object(Parsed,Vg,Obj,R):-
find_pronoun_object(Parsed,Vg,Obj,R).
find_object(Parsed,Vg,Obj,R):-
find_default_object(Parsed,Vg,Obj,R).
% Trouve la cible lors d'un double choc*************************************
find_valid_target([pg([Prep | X])| R], _, [Prep | X], R) :-
Prep \= par,
test_valid_victim(X).
find_valid_target([_ | Rest], Vg, Tg, R) :-
find_valid_target(Rest, Vg, Tg, R).
find_default_target([pg([Prep | X])|R],_,[Prep | X],R) :-
Prep \= par.
find_default_target([_ | Rest],Vg,Tg,R) :-
find_default_target(Rest,Vg,Tg,R).
find_target(Parsed,Vg,Tg,R):-
find_valid_target(Parsed,Vg,Tg,R).
find_target(Parsed,Vg,Tg,R):-
find_default_object(Parsed,Vg,Tg,R).
% Trouve l'agent d'un verbe passif (introduit par 'par') ********************
find_agent([pg([par|X])|R],[par| X],R):-
test_valid_actor(X).
find_agent([_ | Rest],Obj,R):-
find_agent(Rest,Obj,R).
/* Ancienne version n'utilisant pas la DCG
% Ajout des collisions et des véhicules en fonction des chocs trouvés
find_collisions :-
choc(Subject, Object, _, N),
find_part(Subject, SubjectPart),
find_part(Object, ObjectPart),
check_static_victim(Object, Object2),
test_enonciateur(Subject, ResSubject),
test_enonciateur(Object2, ResObject),
add_collision(ResSubject, SubjectPart, ResObject, ObjectPart, [], N),!,
retract(choc(Subject, Object, _, N)),
find_collisions.
find_collisions.
*/
%-----------------------------------------------------------------------------
% Ajout des collisions et des véhicules en fonction des chocs trouvés
find_collisions(ReportText, StaticObjects, NewStaticObjects, NonSorted, InfoActors, NewInfoActors, Collisions) :-
write('Recherche des collisions...'), nl,
trouve_tout(ReportText, _, SortieChocs, _),
find_collisions_aux(SortieChocs, StaticObjects, NewStaticObjects, NonSorted, InfoActors, NewInfoActors, [], Collisions).
find_collisions_aux([choc(Subject, Object, _, N) | AutresChocs], StaticObjects, FinalStaticObjects, NonSorted, InfoActors, FinalInfoActors, Collisions, FinalCollisions) :-
find_part(Subject, SubjectPart, InfoActors),
find_part(Object, ObjectPart, InfoActors),
check_static_victim(Object, Object2, StaticObjects, NewStaticObjects),
add_collision(Subject, SubjectPart, Object2, ObjectPart, [], N, NewStaticObjects, NonSorted, InfoActors, NewInfoActors, Collisions, NewCollisions),
!,
find_collisions_aux(AutresChocs, NewStaticObjects, FinalStaticObjects, NonSorted, NewInfoActors, FinalInfoActors, NewCollisions, FinalCollisions).
find_collisions_aux([], StaticObjects, StaticObjects, _, InfoActors, InfoActors, Collisions, Collisions).
%-----------------------------------------------------------------------------
% insertion d'une collision impliquant deux acteurs connus
%add_collision(Subject, SubjectPart, Object, ObjectPart, [], N, StaticObjects, +NonSorted, InfoActors, NewInfoActors, Collisions, NewCollisions)
add_collision(Subject, SubjectPart, Object, ObjectPart, [], N, _, _, InfoActors, InfoActors, Collisions, NewCollisions) :-
member(acteur([[X1] | T1]), InfoActors),
member(acteur([[X2] | T2]), InfoActors),
X2 \= X1,
member(Object, [[X2] | T2]),
member(Subject, [[X1] | T1]),
\+ member(collision(X1, _, X2, _, _, _), Collisions),
append(Collisions, [collision(X1, SubjectPart, X2, ObjectPart, [], N)], NewCollisions),
write_ln('insertion d''une collision impliquant deux acteurs connus ').
% insertion d'une collision impliquant un acteur connu un acteur non reconnu
add_collision(Subject, SubjectPart, Object, ObjectPart, [], N, _, NonSorted, InfoActors, NewInfoActors, Collisions, NewCollisions) :-
member(Subject, NonSorted),
member(acteur([[X1] | T1]), InfoActors),
member(acteur([[X2]|T2]), InfoActors),
X2 \= X1,
member(Object,[[X2] | T2]),
member(Subject, NonSorted),
\+ member(collision(X1, _, X2, _, _, _), Collisions),
append(Collisions, [collision(X1, SubjectPart, X2, ObjectPart, [], N)], NewCollisions),
append(T1, [Subject], NewT1),
subtract(InfoActors, [acteur([[X1] | T1])], InfoActors2),
append(InfoActors2, [acteur([[X1] | NewT1])], NewInfoActors),
write_ln('insertion d''une collision un acteur connu un acteur non reconnu ').
% insertion d'une collision impliquant un acteur connu et un statique
add_collision(Subject, SubjectPart, Object, ObjectPart, [], N, StaticObjects, _, InfoActors, InfoActors, Collisions, NewCollisions) :-
member(acteur([[X] | T]), InfoActors),
member(Subject,[[X] | T]),
member(static( _, [ Object, _, _]), StaticObjects),
\+ member(collision(X, _, Object, _, _,_), Collisions),
append(Collisions, [collision(X, SubjectPart, Object, ObjectPart, [], N)], NewCollisions).
% insertion d'une collision impliquant deux acteurs identiques => on garde le sujet, on change l'objet
add_collision(Subject, SubjectPart, _, ObjectPart, [], N, _, _, InfoActors, InfoActors, Collisions, NewCollisions) :-
member(acteur([[X1] | T1]), InfoActors),
member(acteur([[X2] | _]), InfoActors),
X2 \= X1,
member(Subject,[[X1] | T1]),
\+ member(collision(X1, _, X2, _, _, _), Collisions),
append(Collisions, [collision(X1, SubjectPart, X2, ObjectPart, [], N)], NewCollisions),
write_ln('insertion d''une collision impliquant un acteur connu et un statique').
% insertion d'une collision impliquant d'un acteur non reconnu et un statique
add_collision(Subject, SubjectPart, Object, ObjectPart, [], N, _, NonSorted, InfoActors, NewInfoActors, Collisions, NewCollisions) :-
member(Subject, NonSorted),
% la plupart du temps, quand un objet statique est percuté,
% c'est l'enonciateur qui l'a fait
X1 = enonciateur,
member(acteur([[X1] | T1]), InfoActors),
!,
member(Subject, NonSorted),
\+ member(collision(X1, _, Object, _, _, _), InfoActors),
append(Collisions, [collision(X1, SubjectPart, Object, ObjectPart, [], N)], NewCollisions),
append(T1, [Subject], NewT1),
subtract(InfoActors, [acteur([[X1] | T1])], InfoActors2),
append(InfoActors2, [acteur([[X1] | NewT1])], NewInfoActors),
write_ln('insertion d''une collision impliquant un acteur non reconnu et un statique ').
add_collision(_, _, _, _, _, _, _, _, InfoActors, InfoActors, Collisions, Collisions).
% cherche une partie de véhicule dans une liste de mots
find_part(Liste, leftside, InfoActors) :-
member(acteur(X), InfoActors),
member(Liste, X),
member(Y, X),
contains_word(Y, [gauche]).
find_part(Liste, rightside, InfoActors) :-
member(acteur(X), InfoActors),
member(Liste, X),
member(Y, X),
contains_word(Y, [droit, droite]).
find_part(Liste, front, InfoActors):-
member(acteur(X), InfoActors),
member(Liste, X),
member(Y, X),
contains_word(Y, [avant, devant]).
find_part(Liste, rear, InfoActors) :-
member(acteur(X), InfoActors),
member(Liste, X),
member(Y, X),
contains_word(Y, [arrière, derrière]).
find_part(_ , unknown, _).
%-----------------------------------------------------------------------------
% Recherche s'il y a une victime statique et l'asserte éventuellement
check_static_victim(Object, Id, StaticObjects, StaticObjects) :-
hyp(Arbre, arbre),
member(Arbre, Object),
member(static('TREE', [Id, _, _]), StaticObjects).
check_static_victim(Object, Id, StaticObjects, StaticObjects) :-
hyp(RoadObstacle, road_obstacle),
member(RoadObstacle, Object),
member(static('TREE', [Id, _, _]), StaticObjects).
check_static_victim(Object, RoadObstacle, StaticObjects, NewStaticObjects) :-
hyp(RoadObstacle, road_obstacle),
member(RoadObstacle, Object),
append(StaticObjects, [static('TREE', [RoadObstacle, -5, -5])], NewStaticObjects).
check_static_victim(Object, Object, StaticObjects, StaticObjects).
%-----------------------------------------------------------------------------
% Creation d'une collision par défaut
defaut_collision :-
\+ collision(_, _, _, _, _, _), % si il n'y a pas de collisions
nl, write('Creation d une collision par défaut !'), nl,
acteur([[enonciateur] | _]),
acteur([[Y] | _]),
Y \= enonciateur,
find_part([enonciateur], SubjectPart),
find_part([Y], ObjectPart),
assert(collision(enonciateur,SubjectPart,Y,ObjectPart,[0,0],1)).
defaut_collision.
%-----------------------------------------------------------------------------
% Affine les collisions en déterminant les coordonnées de certaines collisions
% cas ou trois voitures se suivent dont une est arrêtée
% la derniere pousse la deuxieme sur la premiere
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(acteur([[Acteur1] | _]), InfoActors),
member(acteur([[Acteur2] | _]), InfoActors),
member(acteur([[Acteur3] | _]), InfoActors),
Acteur1 \== Acteur2,
Acteur1 \== Acteur3,
Acteur2 \== Acteur3,
member(collision(Acteur1, X1, Acteur2, Y2, C1, N1), Collisions),
member(collision(Acteur2, X2, Acteur3, Y3, C2, N2), Collisions),
subtract(Collisions, [collision(Acteur1, X1, Acteur2, Y2, C1, N1), collision(Acteur2, X2, Acteur3, Y3, C2, N2)], Collisions2),
append(Collisions2, [collision2(Acteur1, front, Acteur2, rear, ['-12', '1.5'], N1), collision2(Acteur2, front, Acteur3, rear, ['-6', '1.5'], N2)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas ou trois voitures se suivent dont une est arretee
% la derniere pousse la deuxieme sur la premiere
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(acteur([[Acteur1] | _]), InfoActors),
member(acteur([[Acteur2] | _]), InfoActors),
member(acteur([[Acteur3] | _]), InfoActors),
Acteur1 \== Acteur2,
Acteur2 \== Acteur3,
Acteur1 \== Acteur3,
member(collision(Acteur1, X1, Acteur2, Y2, C1, N1), Collisions),
subtract(Collisions, [collision(Acteur1, X1, Acteur2, Y2, C1, N1)], Collisions2),
append(Collisions2, [collision2(Acteur1, front, Acteur2, rear, ['-13', '1.5'], N1)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas ou deux voitures se suivent et la premiere est arretee
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(collision(Actor, X, Victim, Y, C, N), Collisions),
member(init_direction(Actor, east), InfoActors),
member(init_direction(Victim, east), InfoActors),
member(event(Victim, ListeEvent), InfoActors),
member(stop, ListeEvent),
subtract(Collisions, [collision(Actor, X, Victim, Y, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, front, Victim, rear, ['-7', '1.5'], N)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas ou deux voitures se suivent sans s'arrêter
% dont une tourne a droite
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(collision(Actor, X, Victim, Y, C, N), Collisions),
member(init_direction(Actor, east), InfoActors),
member(init_direction(Victim, east), InfoActors),
member(event(Victim, ListeEvent2), InfoActors),
member(turn_right, ListeEvent2),
subtract(Collisions, [collision(Actor, X, Victim, Y, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, X, Victim, Y, ['-3', '3'], N)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas ou deux voitures se suivent sans s arreter
% dont une tourne a gauche
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(collision(Actor, X, Victim, Y, C, N), Collisions),
member(init_direction(Actor, east), InfoActors),
member(init_direction(Victim, east), InfoActors),
member(event(Victim, ListeEvent2), InfoActors),
member(turn_left, ListeEvent2),
subtract(Collisions, [collision(Actor, X, Victim, Y, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, X, Victim, Y, ['-3', '0'], N)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas ou deux voitures se suivent sans s arreter
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(collision(Actor, unknown, Victim, unknown, C, N), Collisions),
member(vehicle(Actor, _, east, ListeEvent1,_), InfoActors),
member(vehicle(Victim, _, east, ListeEvent2,_), InfoActors),
member(driving_forward, ListeEvent1),
member(driving_forward, ListeEvent2),
subtract(Collisions, [collision(Actor, unknown, Victim, unknown, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, front, Victim, rear, ['0', '1.5'], N)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas ou deux voitures se suivent sans s arreter
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(collision(Actor, X, Victim, Y, C, N), Collisions),
member(vehicle(Actor, _, east, ListeEvent1, _), InfoActors),
member(vehicle(Victim, _, east, ListeEvent2, _), InfoActors),
member(driving_forward, ListeEvent1),
member(driving_forward, ListeEvent2),
subtract(Collisions, [collision(Actor, X, Victim, Y, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, X, Victim, Y, ['0', '1.5'], N)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas d'un refus de priorité a droite
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(collision(Actor, X, Victim, Y, C, N), Collisions),
member(init_direction(_, east), InfoActors),
member(init_direction(_, south), InfoActors),
subtract(Collisions, [collision(Actor, X, Victim, Y, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, X, Victim, Y, ['-1.5', '1.5'], N)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas d'un refus de priorité a droite
affine_collision(InfoActors, Collisions, FinalCollisions) :-
member(collision(Actor, X, Victim, Y, C, N), Collisions),
member(init_direction(_, east), InfoActors),
member(init_direction(_, north), InfoActors),
subtract(Collisions, [collision(Actor, X, Victim, Y, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, X, Victim, Y, ['1.5', '1.5'], N)], NewCollisions),
!,
affine_collision(InfoActors, NewCollisions, FinalCollisions).
% cas ou on ne change rien.
affine_collision(_, Collisions, NewCollisions) :-
member(collision(Actor, X, Victim, Y, C, N), Collisions),
subtract(Collisions, [collision(Actor, X, Victim, Y, C, N)], Collisions2),
append(Collisions2, [collision2(Actor, X, Victim, Y, C, N)], NewCollisions).
affine_collision(_, Collisions, Collisions).
%-----------------------------------------------------------------------------
%renvoie la liste de toutes les phrases decomposees
% -Bag
parse_all_text(ReportText, ParsedText) :-
bagof(Parsed, Tokenized^parse(ReportText, Tokenized, Parsed), ParsedText).
%renvoie la liste de toutes les phrases tokenises
% -Bag
tokenize_all_text(ReportText, TokenizedText) :-
bagof(Tokenized, Parsed^parse(ReportText, Tokenized, Parsed), TokenizedText).
% renvoie la liste de tous les noms représentant des acteurs
% grâce à la DCG
find_all_nouns(ReportText, SortieActeurs) :-
trouve_tout(ReportText, SortieActeurs, _, _).
%-----------------------------------------------------------------------------
% CRÉATION DE TOUS LES ACTEURS
% on trie tous les mots et on les met dans une liste
% un nom significatif : un vehicule ou un nom propre
% cas ou on réussi à trouver des noms significatifs
cree_acteurs(ReportText, InfoActors, _, NonSorted) :-
find_all_nouns(ReportText, NounGroups),
% on ne garde que les acteurs avec un nom significatif
setof([[X]], G^(member(G, NounGroups), is_defini(G, X)), R),
describe_actors(enonciateur, 1, InfoActor1),
describe_actors(R, 2, InfoActor2),
append(InfoActor1, InfoActor2, FirstInfoActors),
trie_acteurs(NounGroups, [enonciateur], FirstInfoActors, InfoActors, NonSorted),
nl, write('L''algorithme de coréférence n''a pas trié : '), write(NonSorted),
nl.
% il faut ensuite affiner la recherche en affectant aux acteurs les éléments non-triés
% => algorithme de coréférence
% cas ou on ne réussi à trouver aucun nom significatif mais
% on trouve un objet statique.
% l'acteur se cogne tout seul dans un objet statique.
cree_acteurs(ReportText, InfoActor1, StaticObjects, NonSorted) :-
member(static('TREE', _), StaticObjects),
find_all_nouns(ReportText, NounGroups),
% road_obstacle(Obstacles),
% contains_word2(ReportText, Obstacles, _),
% creation de l'acteur 'enonciateur'
describe_actors(enonciateur, 1, FirstInfoActor1),
trie_acteurs(NounGroups, [enonciateur], FirstInfoActor1, InfoActor1, NonSorted),
nl, write('L''algorithme de coréférence n''a pas trié :'), write(NonSorted),
nl.
% cas ou on ne réussi à trouver aucun nom significatif
% création d'un véhicule par défaut
cree_acteurs(ReportText, InfoActors, _, NonSorted) :-
find_all_nouns(ReportText, NounGroups),
% creation de l'acteur 'enonciateur'
describe_actors(enonciateur, 1, InfoActor1),
% creation de l'autre acteur par défaut
InfoActor2 = [acteur([[véhicule], [il], [lui], [him]]), event(véhicule, []), init_direction(véhicule, east), acteur_numero(véhicule, 1)],
!,
append(InfoActor1, InfoActor2, FirstInfoActors),
trie_acteurs(NounGroups, [enonciateur], FirstInfoActors, InfoActors, NonSorted),
nl, write('L''algorithme de coréférence n''a pas trié : '),
write(NonSorted), nl.
% creation de l'acteur 'enonciateur'
describe_actors(enonciateur, N, InfoActor) :-
InfoActor = [acteur([[enonciateur], [m], [me], [moi]]), event(enonciateur, []), init_direction(enonciateur, east), acteur_numero(enonciateur, N)].
% creation d'un autre acteur
describe_actors([[[Acteur]] | T], N, InfoActors) :-
N1 is N + 1,
describe_actors(T, N1, InfoOtherActors),
append([acteur([[Acteur], [him]]), init_direction( Acteur, east), event(Acteur, []), acteur_numero(Acteur, N)], InfoOtherActors, InfoActors).
describe_actors([], _, []) :- !.
% on lit la liste des mots representant des acteurs potentiels
% trie_acteurs (+Listerepresentants,+ListeActeurs,+InfoActeur, +NouvInfoActeur, -Nontrié)
% principe on lit la liste de representant, on change l'acteur
% courant si on rencontre un nom significatif
trie_acteurs([Mot | Reste], Acteurs, InfoActeur, InfoActeurFinal, NonTrie) :-
once((
is_me(Mot),
member(acteur([[enonciateur] | Q]), InfoActeur),
subtract(InfoActeur, [acteur([[enonciateur] | Q])], InfoActeur2),
append(InfoActeur2, [acteur([[enonciateur], Mot | Q])], NouvInfoActeur)
)),
trie_acteurs(Reste, Acteurs, NouvInfoActeur, InfoActeurFinal, NonTrie).
/*
% si on rencontre un mot significatif on le place comme acteur courant
% sauf s'il l'est deja
trie_acteurs([Mot|Reste], [ActeurCourant| AutresActeurs], NonTrie) :-
once((
acteur( [[ActeurCourant]| Q] ),
is_defini(Mot,ActeurCourant),
retract(acteur( [[ActeurCourant]| Q] )),
assert(acteur( [[ActeurCourant], Mot | Q] )),
)),
trie_acteurs( Reste, [ActeurCourant| AutresActeurs] , NonTrie).
*/
% si on rencontre un mot significatif on le place comme acteur courant
trie_acteurs([Mot | Reste], Acteurs, InfoActeur, InfoActeurFinal, NonTrie) :-
once((
member(acteur([[NouvelActeur] | Q]), InfoActeur),
is_defini(Mot, NouvelActeur),
subtract(InfoActeur, [acteur([[NouvelActeur] | Q])], InfoActeur2),
append(InfoActeur2, [acteur([[NouvelActeur], Mot | Q])], NouvInfoActeur)
)),
trie_acteurs( Reste, [NouvelActeur | Acteurs], NouvInfoActeur, InfoActeurFinal, NonTrie).
% si on rencontre un mot de conducteur on le met dans la liste
% de l'acteur courant (celui dont on a parle en dernier)
trie_acteurs([Mot | Reste], Acteurs, InfoActeur, InfoActeurFinal, NonTrie) :-
once((
member(acteur([[ActeurCourant] | Q]), InfoActeur),
is_driver(Mot, ActeurCourant),
ActeurCourant \== enonciateur,
subtract(InfoActeur, [acteur([[ActeurCourant] | Q])], InfoActeur2),
append(InfoActeur2, [acteur([[ActeurCourant], Mot | Q])], NouvInfoActeur)
)),
!,
trie_acteurs(Reste, [ActeurCourant| Acteurs], NouvInfoActeur, InfoActeurFinal, NonTrie).
% si on rencontre un mot a la troisieme personne on le met dans la liste
% de l'acteur courant (celui dont on a parle en dernier)
trie_acteurs([Mot | Reste], [Acteur | Acteurs], InfoActeur, InfoActeurFinal, NonTrie) :-
once((
is_him(Mot),
member(acteur([[Acteur] | Q]), InfoActeur),
Acteur \== enonciateur,
subtract(InfoActeur, [acteur([[Acteur] | Q])], InfoActeur2),
append(InfoActeur2, [acteur([[Acteur], Mot | Q])], NouvInfoActeur)
)),
trie_acteurs( Reste, [Acteur | Acteurs], NouvInfoActeur, InfoActeurFinal, NonTrie).
% si on rencontre un véhicule indefini on le met dans la liste
% de l'acteur courant (celui dont on a parle en dernier) si celui ci
% est est véhicule créé par défaut
trie_acteurs([Mot | Reste], [ActeurCourant | AutresActeurs], InfoActeur, InfoActeurFinal, NonTrie) :-
once((
is_vehicule(Mot),
member(acteur([[NouvelActeur] | Q]), InfoActeur),
indefini(NouvelActeur),
NouvelActeur \== enonciateur,
subtract(InfoActeur, [acteur([[NouvelActeur] | Q])], InfoActeur2),
append(InfoActeur2, [acteur([[NouvelActeur], Mot | Q])], NouvInfoActeur)
)),
trie_acteurs( Reste, [NouvelActeur, ActeurCourant| AutresActeurs], NouvInfoActeur, InfoActeurFinal, NonTrie).
% si on rencontre un nous on le met dans deux listes : celle de l'enonciateur
% et celle de l'acteur dont on a parle en dernier
trie_acteurs([Mot | Reste], [Acteur | Acteurs], InfoActeur, InfoActeurFinal, NonTrie) :-
once((
is_us(Mot),
member(acteur([[ActeurCourant] | Q1]), InfoActeur),
member(acteur([[enonciateur] | Q2]), InfoActeur),
ActeurCourant \== enonciateur,
subtract(InfoActeur, [acteur([[ActeurCourant] | Q1]), acteur([[enonciateur] | Q2])], InfoActeur2),
append(InfoActeur2, [acteur([[enonciateur], Mot | Q2]), acteur([[ActeurCourant], Mot | Q1])], NouvInfoActeur)
)),
trie_acteurs( Reste, [Acteur | Acteurs], NouvInfoActeur, InfoActeurFinal, NonTrie).
% on fait la meme chose dans le cas ou l'acteur courant est l'enonciateur
% on considere alors que le nouvel acteur courant est celui en deuxieme
% place dans la liste des acteurs.
trie_acteurs([Mot | Reste], [enonciateur, ActeurCourant | AutresActeurs], InfoActeur, InfoActeurFinal, NonTrie) :-
once((
is_us(Mot),
member(acteur([[ActeurCourant] | Q]), InfoActeur),
ActeurCourant \== enonciateur,
subtract(InfoActeur, [acteur([[ActeurCourant] | Q]), acteur([[enonciateur] | Q])], InfoActeur2),
append(InfoActeur2, [acteur([[enonciateur], Mot | Q]), acteur([[ActeurCourant], Mot | Q])], NouvInfoActeur)
)),
trie_acteurs(Reste, [ActeurCourant | AutresActeurs], NouvInfoActeur, InfoActeurFinal, NonTrie).
% il reste a trouver une methode pour classer les indefins : la voiture, un vehicule ...
% si le mot n'a pas trouve sa place on le met dans la liste des mots non tries
trie_acteurs([Mot | Reste], Acteurs, InfoActeur, InfoActeurFinal, [Mot | NonTrie]) :-
trie_acteurs(Reste, Acteurs, InfoActeur, InfoActeurFinal, NonTrie).
trie_acteurs([], _, InfoActeur, InfoActeur, []).
% cherche les vehicules precises entre parentheses
% pour déduire d'eventuelles coréférences
s(ReportText, Actors) :- parenthesized_actors(ReportText, Actors).
parenthesized_actors(ReportText, EntreParenthesesActors) :-
parse_all_text(ReportText, Text),
lit_entre_parentheses(Text, [], EntreParentheseActorsRev),
reverse(EntreParentheseActorsRev, EntreParenthesesActors).
lit_entre_parentheses([Phrase | Queue], EntreParenthesesActors, FinalActors):-
parenthese(Phrase, _, EntreParenthesesActors, NewEntreParentheses),
lit_entre_parentheses(Queue, NewEntreParentheses, FinalActors).
lit_entre_parentheses([], ParenthesesActors, ParenthesesActors).
parenthese([], _, Actors, Actors).
parenthese(['(' | T], Rest, EntreParentheseActors, NewActors) :-
lire_parenthese(T, Rest, EntreParentheseActors, NewActors).
parenthese([ng(X) | T], _, EntreParentheseActors, NewActors) :-
is_actor(X),
parenthese(T, X, EntreParentheseActors, NewActors).
parenthese([_ | T], Rest, EntreParentheseActors, NewActors):-
parenthese(T, Rest, EntreParentheseActors, NewActors).
lire_parenthese([')' | T], Rest, EntreParentheseActors, FinalActors):-
parenthese(T, Rest, EntreParentheseActors, FinalActors).
% trouve le groupe nominal adjacent au groupe entre parenthese
lire_parenthese([ng(X) | T], Acteur, EntreParentheseActors, FinalActors):-
lire_parenthese(T, Acteur, [entre_parentheses(X, Acteur) | EntreParentheseActors], FinalActors).
lire_parenthese(_, _, Actors, Actors).
% association des mots entre parentheses et des acteurs
association_parentheses_acteurs(InfoActors, EntreParenthesesActors, NewInfoActors) :-
% on choisit un mot entre parenthese et le mot le plus proche
member(entre_parentheses(Mot, MotAdjacent), EntreParenthesesActors),
member(acteur(Descriptif), InfoActors), % on choisit un acteur
% on regarde si le mot adjacent represente cet acteur
member(MotAdjacent, Descriptif),
append(Descriptif, [Mot], NouveauDescriptif),
subtract(InfoActors, [acteur(Descriptif)], InfoActors2),
append(InfoActors2, [acteur(NouveauDescriptif)], NewInfoActors).
association_parentheses_acteurs(InfoActors, _, InfoActors).
% RECOUPEMENT DES ACTEURS REPRÉSENTANT LA MÊME PERSONNE
% explication il se peut que lors de la creation des acteurs l'un d'entre eux soit dédoublé
% (par exemple avec le groupe de mot mon vehicule A -> enonciateur et vehicule A)
% on va rassembler ces acteurs
associe_acteurs(InfoActors, NewInfoActors) :-
member(acteur([[Acteur1] | Descriptif1]), InfoActors),
member(acteur([[Acteur2] | Descriptif2]), InfoActors),
Acteur1 \= Acteur2,
member(MotCommun, Descriptif1),
member(MotCommun, Descriptif2),
is_defini(MotCommun, _),
recolle(Acteur1, Acteur2, InfoActors, NewInfoActors),
nl, write(Acteur1), write(' et '), write(Acteur2), write(' sont les mêmes !'),
nl.
associe_acteurs(InfoActors, NewInfoActors) :-
member(acteur([[Acteur1] | Descriptif1]), InfoActors),
member(acteur([[Acteur2] | _]), InfoActors),
Acteur1 \= Acteur2,
member(Groupe, Descriptif1),
is_defini(Groupe, Acteur2),
recolle(Acteur1, Acteur2, InfoActors, NewInfoActors),
nl, write(Acteur1), write(' et '), write(Acteur2), write(' sont les mêmes !'),
nl.
associe_acteurs(InfoActors, InfoActors).
recolle(Acteur1, Acteur2, InfoActors, NewInfoActors) :-
member(acteur([[Acteur1] | Descriptif1]), InfoActors),
member(acteur([[Acteur2] | Descriptif2]), InfoActors),
Acteur1 \= enonciateur ,
append(Descriptif1, Descriptif2, DescriptifTotal),
subtract(InfoActors, [acteur([[Acteur1] | Descriptif1]), init_direction(Acteur1, _), acteur([[Acteur2] | Descriptif2])], InfoActors2),
append(InfoActors2, [acteur([[Acteur2] | DescriptifTotal])], NewInfoActors).
recolle(Acteur1, Acteur2, InfoActors, NewInfoActors) :-
member(acteur([[Acteur1] | Descriptif1]), InfoActors),
member(acteur([[Acteur2] | Descriptif2]), InfoActors),
Acteur2 \= enonciateur ,
append(Descriptif1, Descriptif2, DescriptifTotal),
subtract(InfoActors, [acteur([[Acteur1] | Descriptif1]), init_direction(Acteur2, _), acteur([[Acteur2] | Descriptif2])], InfoActors2),
append(InfoActors2, [acteur([[Acteur1]|DescriptifTotal])], NewInfoActors).
% si des mot de la liste non triée on un rapport avec l'un des véhicules
trie_reste(NonSorted, InfoActors, EntreParenthesesActors, NewInfoActors) :-
member(acteur(Acteur), InfoActors),
member(entre_parentheses(Mot, MotAdjacent), EntreParenthesesActors),
% on choisit un mot entre parenthese et le mot le plus proche
member(Mot, Acteur),
member(MotAdjacent, NonSorted),
subtract(InfoActors, [acteur(Acteur)], InfoActors2),
append(Acteur, [Mot], NouvelActeur),
append(InfoActors2, [acteur(NouvelActeur)], NewInfoActors),
nl.
trie_reste(_, InfoActors, _, InfoActors).
affine_acteurs(NonSorted, InfoActors, EntreParenthesesActors, NewInfoActors) :-
association_parentheses_acteurs(InfoActors, EntreParenthesesActors, ParenthesisInfoActors),
associe_acteurs(ParenthesisInfoActors, AssocInfoActors),
trie_reste(NonSorted, AssocInfoActors, EntreParenthesesActors, NewInfoActors).
% Si l'énonciateur n'apparait dans aucune collision
% on le retire
% il faut trouver un meilleur système
affine_enonciateur(Collisions, InfoActors, NewInfoActors) :-
\+ existe_enonciateur(Collisions),
subtract(InfoActors, [vehicle(enonciateur, _, _, _, _), acteur([[enonciateur]| _ ])], NewInfoActors),
write_ln('Pas d''enonciateur.').
affine_enonciateur(_, InfoActors, InfoActors).
existe_enonciateur(Collisions) :-
member(collision(enonciateur, _, _, _, _, _), Collisions).
existe_enonciateur(Collisions) :-
member(collision(_, _,enonciateur, _, _, _), Collisions).
% teste si un mot designe un acteur valable.
is_actor(X) :-
member(Y,X),
actor(Y).
% teste si un mot est un nom propre
is_proper_noun(X) :-
sub_atom(X, 0, 3, _, 'M._').
is_proper_noun(X) :-
sub_atom(X, 0, 4, _, 'Mme_').
is_proper_noun(X) :-
sub_atom(X, 0, 5, _, 'Mlle_').
% dit si X est un enonciateur valable
is_me(X) :-
prem_pers(Y),
member(Y,X).
% teste si un mot correspond à la première personne
is_me(X) :-
pronom_possessif_prem_pers(Y),
vehicule(Z),
member(Y,X),
member(Z,X).
% teste si un mot correspond à la troisième personne
is_him(X) :-
trois_pers(Y),
member(Y,X).
is_him(X) :-
pronom_possessif_trois_pers(Y),
vehicule(Z),
member(Y,X),
member(Z,X).
% teste si un mot correspond à un véhicule
is_vehicule(X) :-
vehicule(Y),
member(Y,X).
is_vehicle(T, N) :-
member(N,T),
vehicule(N).
% teste si un mot correspond à la première personne
% du pluriel
is_us(X) :-
prem_pers_plur(Y),
member(Y,X).
% teste si un groupe de mots contient le conducteur d'un vehicule donné
is_driver(DriverGroup,Vehicle) :-
member(Y,DriverGroup),
drive(Y,Vehicle).
% teste si un groupe de mots contient le conducteur d'un vehicule donné
is_defini(T,N) :-
member(N,T),
significatif(N).
significatif(X) :- defini(X).
significatif(X) :- is_proper_noun(X).
% AJOUT DES ÉVÉNEMENTS
trouve_events(ReportText, InfoActors, NewInfoActors) :-
nl, write('Recherche des événements... '), nl,
parse_all_text(ReportText, Parsed),
trouve_events_aux(Parsed, InfoActors, NewInfoActors).
trouve_events_aux([Parsed | Rest], InfoActors, FinalInfoActors) :-
cherche_events(Parsed, InfoActors, NewInfoActors),
trouve_events_aux(Rest, NewInfoActors, FinalInfoActors).
trouve_events_aux([_ | Reste], InfoActors, NewInfoActors) :-
trouve_events_aux(Reste, InfoActors, NewInfoActors).
trouve_events_aux([], InfoActors, InfoActors).
% événements
cherche_events(Parsed, InfoActors, FinalInfoActors) :-
% on teste la structure de la phrase
member(vg(VerbeGroup), Parsed),
find_subject(Parsed, VerbeGroup, Vehicule, Rest),
confirm_dir(Rest, GroupDirection, Rest2),
member(Verbe, VerbeGroup),
member(Dir, GroupDirection),
verb_mouv(Verbe, Dir, Event),
% on cherche des acteurs valables
member(acteur([[Acteur] | Descriptif]), InfoActors),
member(Vehicule, Descriptif),
% on modifie la liste d événements
ajoute_event(Acteur, Event, InfoActors, NewInfoActors),
!,
cherche_events(Rest2, NewInfoActors, FinalInfoActors).
cherche_events(Parsed, InfoActors, FinalInfoActors) :-
% on teste la structure de la phrase
member(vg(VerbeGroup), Parsed),
find_subject(Parsed, VerbeGroup, Vehicule, Rest),
member(Verbe, VerbeGroup),
verb_mouv(Verbe, _, Event),
% on cherche des acteurs valables
member(acteur([[Acteur] | Descriptif]), InfoActors),
member(Vehicule, Descriptif),
% on modifie la liste d évenements
ajoute_event(Acteur, Event, InfoActors, NewInfoActors),
!,
cherche_events(Rest, NewInfoActors, FinalInfoActors).
% L'ajout de cette regle provoque une regression pour le B44
cherche_events(Parsed, InfoActors, FinalInfoActors) :-
% on teste la structure de la phrase
member(gg(VerbeGroup), Parsed),
find_responsible(Parsed, VerbeGroup, Vehicule, Rest),
confirm_dir(Rest, GroupDirection, Rest2),
member(Verbe, VerbeGroup),
member(Dir, GroupDirection),
verb_mouv(Verbe, Dir, Event),
% on cherche des acteurs valables
member(acteur([[Acteur] | Descriptif]), InfoActors),
member(Vehicule, Descriptif),
% on modifie la liste d évenements
ajoute_event(Acteur, Event, InfoActors, NewInfoActors),
!,
cherche_events(Rest2, NewInfoActors, FinalInfoActors).
cherche_events(Parsed, InfoActors, FinalInfoActors) :-
% on teste la structure de la phrase
member(gg(VerbeGroup), Parsed),
find_responsible(Parsed, VerbeGroup, Vehicule, Rest),
member(Verbe, VerbeGroup),
verb_mouv(Verbe, _, Event),
% on cherche des acteurs valables
member(acteur([[Acteur] | Descriptif]), InfoActors),
member(Vehicule, Descriptif),
% on modifie la liste d évenements
ajoute_event(Acteur, Event, InfoActors, NewInfoActors),
!,
cherche_events(Rest, NewInfoActors, FinalInfoActors).
cherche_events(Parsed, InfoActors, FinalInfoActors) :-
member(pg(PG), Parsed),
a_arret(X),
member(X, PG),
member(acteur([[Acteur] | Descriptif]), InfoActors),
member(Vehicule, Descriptif),
member(ng(Vehicule), Parsed),
ajoute_event(Acteur, [stop], InfoActors, NewInfoActors),
!,
delete(Parsed, pg(PG), Rest),
cherche_events(Rest, NewInfoActors, FinalInfoActors).
cherche_events(Parsed, InfoActors, FinalInfoActors) :-
% on teste la structure de la phrase
member(infg(VerbeGroup), Parsed),
find_subject_infinitive_verb(Parsed, VerbeGroup, Vehicule, Rest),
confirm_dir(Rest, GroupDirection, Rest2),
member(Verbe, VerbeGroup),
member(Dir, GroupDirection),
verb_mouv(Verbe, Dir, Event),
% on cherche des acteurs valables
member(acteur([[Acteur] | Descriptif]), InfoActors),
member(Vehicule,Descriptif),
% on modifie la liste d évenements
ajoute_event(Acteur, Event, InfoActors, NewInfoActors),
!,
cherche_events(Rest2, NewInfoActors, FinalInfoActors).
cherche_events(_, InfoActors, InfoActors).
% ajout des événements
ajoute_event(Acteur, Event, InfoActors, NewInfoActors):-
member(event(Acteur, ListEvent), InfoActors),
last(X, ListEvent),
[X] \= Event,
subtract(InfoActors, [event(Acteur, ListEvent)], InfoActors2),
append(ListEvent, Event, NouvelleListe),
append(InfoActors2, [event(Acteur, NouvelleListe)], NewInfoActors).
ajoute_event(Acteur, Event, InfoActors, NewInfoActors):-
member(event(Acteur,[]), InfoActors),
subtract(InfoActors, [event(Acteur,[])], InfoActors2),
append(InfoActors2, [event(Acteur, Event)], NewInfoActors).
% affine les événements
affine_events. % reste à le faire ...
% il faudrait voir ou sont places les panneaux stop et arretes tous les véhicules qui proviennent de cet axe au départ
% CRÉATION DES VÉHICULES
cree_vehicules(InfoActors, NewInfoActors) :-
write_ln('Création des véhicules... '),
setof(
vehicle(X, Kind, Dir, ListEvent, N),
Y^Kind^Dir^ListEvent^N^(
member(acteur([[X] | Y]), InfoActors),
kind(X, Kind),
member(init_direction(X, Dir), InfoActors),
member(event(X, ListEvent), InfoActors),
member(acteur_numero(X, N), InfoActors)
),
L),
append(L, InfoActors, NewInfoActors).
% si il y a un stop les voitures sont a l'arret par defaut
default_events(StaticObjects, InfoActors, FinalInfoActors) :-
member(static('STOPSIGN', _), StaticObjects),
member(vehicle(X, K, D, [], N), InfoActors),
subtract(InfoActors, [vehicle(X, K, D, [], N)], InfoActors2),
append(InfoActors2, [vehicle( X, K, D, [driving_forward, stop], N)], NewInfoActors),
default_events(StaticObjects, NewInfoActors, FinalInfoActors).
% si il y a un feu rouge, les voitures sont à l'arrêt par défaut
default_events(StaticObjects, InfoActors, FinalInfoActors) :-
member(static('LIGHT',['trafficlight', 'red', _ ]), StaticObjects),
member(vehicle(X, K, D, [], N), InfoActors),
subtract(InfoActors, [vehicle(X, K, D, [], N)], InfoActors2),
append(InfoActors2, [vehicle( X, K, D, [driving_forward, stop], N)], NewInfoActors),
default_events(StaticObjects, NewInfoActors, FinalInfoActors).
% si aucun evenement n'a ete affecte a un vehicule il va tout droit
default_events(StaticObjects, InfoActors, FinalInfoActors) :-
member(vehicle(X, K, D, [], N), InfoActors),
subtract(InfoActors, [vehicle(X, K, D, [], N)], InfoActors2),
append(InfoActors2, [vehicle( X, K, D, [driving_forward], N)], NewInfoActors),
default_events(StaticObjects, NewInfoActors, FinalInfoActors).
default_events(_, InfoActors, InfoActors).
(acteur([[Acteur2] | Descriptif2]), InfoActors),
Acteur1 \= enonciateur ,
append(Descriptif1, Descriptif2, DescriptifTotal),
subtract(InfoActors, [acteur([[Acteur1] | Descriptif1]), init_direction(Acteur1, _), acteur([[Acteur2] | Descriptif2])], InfoActors2),
append(InfoActors2, Carsim3/init_directions.pl 0100644 0001756 0001774 00000021676 07400724730 0016126 0 ustar 00pierre cs 0000350 0000120 % RECHERCHE DE LA DIRECTION INITIALE
% on suppose un repère où la voiture de l'enonciateur vient toujours de l'est
% la gauche sera le sud
% en face sera l'ouest
% la droite sera le nord
% on va d'abord chercher les voitures qui se suivent
% et leur donner la meme direction initiale
% on cherche des mots comme devant ou derriere
% Le format des directions initiales est
% init_direction(Vehicule, Direction) par exemple init_direction(Actor, east)
cree_directions_initiales(ReportText, InfoActors, NewInfoActors) :-
write_ln('Recherche des directions initiales... '),
parse_all_text(ReportText, ParsedText),
cherche_direction_initiale(ParsedText, InfoActors, NewInfoActors),
!.
cherche_direction_initiale([], InfoActors, InfoActors).
cherche_direction_initiale([Sentence | ParsedText], InfoActors, FinalInfoActors) :-
find_direction_initiale(Sentence, InfoActors, NewInfoActors),
cherche_direction_initiale(ParsedText, NewInfoActors, FinalInfoActors).
cherche_direction_initiale([_ | ParsedText], InfoActors, FinalInfoActors) :-
cherche_direction_initiale(ParsedText, InfoActors, FinalInfoActors).
% recherche si un vehicule est place soit devant soit derrière un autre
find_direction_initiale(Parsed, InfoActors, NewInfoActors) :-
member(pg([Prep | X]), Parsed),
meme_axe(Prep),
member(ng(Vehicule), Parsed),
member(acteur([[Acteur1] | Descriptif1]), InfoActors),
member(acteur([[Acteur2] | Descriptif2]), InfoActors),
member(X, Descriptif2),
member(Vehicule, Descriptif1),
%on verifie que les mots ne designent pas le meme acteur
\+ (Acteur2 == Acteur1),
!,
% on modifie les directions initiales
nouvelle_direction(Acteur1, Acteur2, meme, InfoActors, NewInfoActors).
% recherche si un vehicule suit un autre
find_direction_initiale(Parsed, InfoActors, NewInfoActors) :-
% on teste la structure de la phrase
member(vg(VG), Parsed),
member(Verbe, VG),
verb_meme_axe(Verbe),
member(Personne, VG),
member(ng(Vehicule), Parsed),
% on cherche des acteurs valables
member(acteur([[Acteur1] | Descriptif1]), InfoActors),
member(acteur([[Acteur2] | Descriptif2]), InfoActors),
member([Personne], Descriptif1),
member(Vehicule, Descriptif2),
% on modifie les directions initiales
nouvelle_direction(Acteur1, Acteur2, meme, InfoActors, NewInfoActors),
!.
% Ici cette partie était buggée. Remplacement avec une sémantique
% approximative
%on efface le verbe et on en prend un autre
% delete(Parsed, vg(VG), Parsed2),
% find_direction_initiale(Parsed2, NewInfoActors, FinalInfoActors).
% recherche si un vehicule vient d'un autre autre cote
find_direction_initiale(Parsed, InfoActors, NewInfoActors) :-
% on teste la structure de la phrase
member(ng(Vehicule), Parsed),
member(vg(VG), Parsed),
member(pg([Prep | GroupDirection]), Parsed),
member(Verbe, VG),
verb_prov(Verbe, Prep),
% on cherche des acteurs valables
member(acteur([[enonciateur] | _]), InfoActors),
member(acteur([[Acteur2] | Descriptif2]), InfoActors),
member(Vehicule, Descriptif2),
\+ (Acteur2 == enonciateur),
% on modifie les directions initiales
dir_prov(GroupDirection, NouvelleDirection),
nouvelle_direction(enonciateur, Acteur2, NouvelleDirection, InfoActors, NewInfoActors),
!.
% Ici cette partie était buggée. Remplacement avec une sémantique
% approximative
%on efface le verbe et on en prend un autre
% delete(Parsed, vg(VG), Parsed2),
% find_direction_initiale(Parsed2, NewInfoActors, FinalInfoActors).
% recherche si un vehicule vient d'un autre autre cote
% avec un gerondif
find_direction_initiale(Parsed, InfoActors, NewInfoActors) :-
% on teste la structure de la phrase
member(ng(Vehicule), Parsed),
member(gg(GG), Parsed),
member(pg([Prep | GroupDirection]), Parsed),
member(Verbe, GG),
verb_prov(Verbe, Prep),
% on cherche des acteurs valables
member(acteur([[enonciateur] | _]), InfoActors),
member(acteur([[Acteur2] | Descriptif2]), InfoActors),
member(Vehicule, Descriptif2),
\+ (Acteur2 == enonciateur),
% on modifie les directions initiales
dir_prov(GroupDirection, NouvelleDirection),
nouvelle_direction(enonciateur, Acteur2, NouvelleDirection, InfoActors, NewInfoActors).
% Ici cette partie était buggée. Remplacement avec une sémantique
% approximative
%on efface le verbe et on en prend un autre
% delete(Parsed, gg(GG), Parsed2),
% find_direction_initiale(Parsed2, NewInfoActors, FinalInfoActors).
% cas d'un refus de priorité à droite
find_direction_initiale(Parsed, InfoActors, NewInfoActors) :-
% on teste la structure de la phrase
member(ng(Priorite), Parsed),
member(priorité, Priorite),
% on cherche des acteurs valables
member(acteur([[enonciateur] | _]), InfoActors),
member(acteur([[Acteur2] | _]), InfoActors),
\+ (Acteur2 == enonciateur),
nouvelle_direction(enonciateur, Acteur2, gauche, InfoActors, NewInfoActors).
% find_direction_initiale(Parsed, NewInfoActors, FinalInfoActors).
find_direction_initiale(_, InfoActors, InfoActors).
% le repere se fait a partir de l'enonciateur
% on pourrait creer un repere base sur autre chose, il suffit de changer les predicats
% positionne deux acteurs sur le meme axe
nouvelle_direction(enonciateur, Acteur, meme, InfoActors, NewInfoActors) :-
member(init_direction(enonciateur, X), InfoActors),
member(init_direction(Acteur, _), InfoActors),
subtract(InfoActors, [init_direction(Acteur, _)], InfoActors2),
append(InfoActors2, [init_direction(Acteur, X)], NewInfoActors).
nouvelle_direction(Acteur, enonciateur, meme, InfoActors, NewInfoActors) :-
member(init_direction(enonciateur, X), InfoActors),
member(init_direction(Acteur, _), InfoActors),
subtract(InfoActors, [init_direction(Acteur, _)], InfoActors2),
append(InfoActors2, [init_direction(Acteur, X)], NewInfoActors).
% positionne un vehicule a gauche de l'enonciateur
nouvelle_direction(enonciateur, Acteur, gauche, InfoActors, NewInfoActors) :-
member(init_direction(enonciateur, east), InfoActors),
member(init_direction(Acteur, east), InfoActors),
subtract(InfoActors, [init_direction(Acteur, east)], InfoActors2),
append(InfoActors2, [init_direction(Acteur, south)], NewInfoActors).
% on ne changera qu'une seule fois la direction initiale
% positionne un vehicule a droite de l'enonciateur
nouvelle_direction(enonciateur, Acteur, droite, InfoActors, NewInfoActors) :-
member(init_direction(enonciateur, east), InfoActors),
member(init_direction(Acteur, east), InfoActors),
subtract(InfoActors, [init_direction(Acteur, east)], InfoActors2),
append(InfoActors2, [init_direction(Acteur, north)], NewInfoActors).
% on ne changera qu'une seule fois la direction initiale
% positionne un vehicule en face de l'enonciateur
nouvelle_direction(enonciateur, Acteur, face, InfoActors, NewInfoActors) :-
member(init_direction(enonciateur, east), InfoActors),
member(init_direction(Acteur, east), InfoActors),
subtract(InfoActors, [init_direction(Acteur, east)], InfoActors2),
append(InfoActors2, [init_direction(Acteur, west)], NewInfoActors).
% on ne changera qu'une seule fois la direction initiale
% il reste a faire le test de "en face" pour les virages
% positionne l'enonciateur a gauche d un vehicule
nouvelle_direction(Acteur, enonciateur, gauche, InfoActors, NewInfoActors) :-
member(init_direction(Acteur, east), InfoActors),
member(init_direction(enonciateur, east), InfoActors),
subtract(InfoActors, [init_direction(enonciateur, east)], InfoActors2),
append(InfoActors2, [init_direction(enonciateur, south)], NewInfoActors).
%Confirme la direction
confirm_dir([pg(X) | R], X, R).
confirm_dir([rg(X) | R], X, R).
confirm_dir([_ | Rest], Obj, R):-
confirm_dir(Rest, Obj, R).
% il y a surement d'autres cas à traiter...
% reconcile_init_direction(+StaticObjects, +DirectionInfoActors, -NewDirectionInfoActors)
% reconcile some directions as cars should come from east and south
% in a turn_left
% left turn is east <--> south, so north --> south
reconcile_init_directions(StaticObjects, DirectionInfoActors, NewDirectionInfoActors) :-
member(static('ROAD', [turn_left]), StaticObjects),
member(init_direction(_, east), DirectionInfoActors),
member(init_direction(Vehicle2, north), DirectionInfoActors),
subtract(DirectionInfoActors, [init_direction(Vehicle2, north)], DirectionInfoActors2),
append(DirectionInfoActors2, [init_direction(Vehicle2, south)], NewDirectionInfoActors).
% left turn is east <--> south, so west --> south
reconcile_init_directions(StaticObjects, DirectionInfoActors, NewDirectionInfoActors) :-
member(static('ROAD', [turn_left]), StaticObjects),
member(init_direction(_, east), DirectionInfoActors),
member(init_direction(Vehicle2, west), DirectionInfoActors),
subtract(DirectionInfoActors, [init_direction(Vehicle2, west)], DirectionInfoActors2),
append(DirectionInfoActors2, [init_direction(Vehicle2, south)], NewDirectionInfoActors).
% right turn is east <--> south, so west --> south
reconcile_init_directions(_, DirectionInfoActors, DirectionInfoActors).
Carsim3/ontology.pl 0100644 0001756 0001774 00000020402 07400724731 0014575 0 ustar 00pierre cs 0000350 0000120 % The ontology.pl file contains the description of the world
% in the future use the same format as WordNet
% regroupement de tous les prédicats designants des acteurs
actor(X) :- is_proper_noun(X).
actor(X) :- vehicule(X).
actor(X) :- driver(X).
actor(X) :- pronom_personnel(X).
% teste si un mot est le conducteur d'un vehicule
drive(motard, moto).
drive(motocycliste, moto).
drive(conducteur, _).
drive(conductrice, _).
drive(cycliste, vélo).
drive(cycliste, bicyclette).
drive(automobiliste, automobile). % à compléter.
% teste si un mot est un conducteur
driver(motard).
driver(motocycliste).
driver(personne).
driver(conducteur).
driver(conductrice).
driver(cycliste).
driver(automobiliste). % à completer.
pronom_personnel(X) :- prem_pers(X).
pronom_personnel(X) :- trois_pers(X).
pronom_personnel(X) :- prem_pers_plur(X).
% mots a la premiere personne
prem_pers(je).
prem_pers(j).
prem_pers(moi).
prem_pers(me).
prem_pers(m).
prem_pers(X) :- prem_pers_plur(X).
prem_pers('Je').
prem_pers('J').
prem_pers('Moi').
prem_pers('Me').
prem_pers('M').
pronom_possessif_prem_pers(mon).
pronom_possessif_prem_pers(ma).
pronom_possessif_prem_pers(mes).
pronom_possessif_prem_pers('Mon').
pronom_possessif_prem_pers('Ma').
pronom_possessif_prem_pers('Mes').
% mots a la première personne du pluriel
prem_pers_plur(nous).
prem_pers_plur(nos).
prem_pers_plur(notre).
prem_pers_plur('Nous').
prem_pers_plur('Nos').
prem_pers_plur('Notre').
% mots a la troisieme personne
trois_pers('Celui_ci'). % rajout de dernière minute
trois_pers(tiers). % rajout de dernière minute
%trois_pers(l). % rajout de dernière minute
trois_pers(il).
trois_pers(lui).
trois_pers(elle).
trois_pers('Il').
trois_pers('Elle').
pronom_possessif_trois_pers(son).
pronom_possessif_trois_pers(sa).
pronom_possessif_trois_pers(ses).
pronom_possessif_trois_pers('Sa').
pronom_possessif_trois_pers('Son').
pronom_reflechi(nous).
pronom_reflechi(me).
pronom_reflechi(m).
pronom_reflechi(s).
pronom_reflechi(se).
pronom_reflechi(l).
% articles définis
art_def(le).
art_def(la).
art_def(les).
art_def(l).
art_def('La').
art_def('Le').
art_def('Les').
art_def('L').
% ne pas confondre avec vehicle !
vehicule(X) :- indefini(X).
vehicule(X) :- defini(X).
vehicule(X) :- partie_vehicule(X).
% designe les parties d'un vehicule
partie_vehicule(aile).
partie_vehicule(phare).
partie_vehicule(côté).
partie_vehicule(remorque).
partie_vehicule(rétroviseur).
partie_vehicule(pare_chocs).
% liste de vehicules pas suffisamment explicites
indefini(voiture).
indefini(véhicule).
indefini(voitures).
% liste de vehicules suffisamment explicites
defini('B').
defini(véhicule_c).
defini(véhicule_b).
defini(véhicule_a).
defini(véhicule_A).
defini(véhicule_B).
%defini(voiture).
defini(camionnette).
defini(auto).
defini(moto).
defini(vélo).
defini(bicyclette).
defini(camion).
defini(semi_remorque).
defini('Renault').
defini(renault).
defini('R11').
defini('R21').
defini('4L').
defini('205').
defini('Ford').
defini('Clio').
defini(205).
% verbes de provenance avec leur préposition
verb_prov(venir, de).
verb_prov(venir, sur).
verb_prov(trouver, sur).
verb_prov(sortir, de).
verb_prov(arriver, de).
verb_prov(venir, en).
verb_prov(arriver, en).
verb_prov(arriver, sur).
verb_prov(surgir, de).
verb_prov(surgir, sur).
% Verbe voir assimilé à un verbe de provenance.
verb_prov(voir, en).
verb_prov(voir, sur).
%verb_prov(descendre,_).
%verb_prov(rouler,dans).
%verb_prov(circuler,dans).
% verbe de destination avec leur préposition
verb_dest(aller, à).
verb_dest(rendre, à).
verb_dest(tourner, vers).
verb_dest(engager, dans).
% prepositions de destination
prep_dest([vers | _]).
prep_dest([en, direction, de | _]).
% prepositions de provenance
prep_prov([depuis | _]).
% changement de direction
verb_tourn(tourner, à).
verb_tourn(tourner, sur).
verb_tourn(tourner, vers).
% indique si un vehicule se trouve sur le meme axe
meme_axe('Devant').
meme_axe(devant).
meme_axe('Derrière').
meme_axe(derrière).
% verbe indiquant un positionnement sur le meme axe
verb_meme_axe(suivre).
verb_meme_axe(précéder).
% indique une direction de provenance
dir_prov(X,gauche) :- member(gauche,X).
dir_prov(X,face) :- member(face,X).
dir_prov(X,face) :- member(inverse,X).
dir_prov(X,droite) :- member(droite,X).
dir_prov(X,meme) :- member(même,X).
% indique de quel type est un vehicule
kind(_, car). % pour l'instant il n'y a que des voitures
% caraterisation des verbes de mouvement
verb_mouv(T, G , [turn_left]):-
verb_tourner(T),
a_gauche(G).
verb_mouv(T, D , [turn_right]):-
verb_tourner(T),
a_droite(D).
verb_mouv(A, rien, [driving_forward]) :-
verb_avancer(A).
verb_mouv(S, rien, [stop]) :-
verb_stop(S).
verb_mouv(E, A, [stop]) :-
verb_etat(E),
a_arret(A).
verb_mouv(D, rien, [overtake]) :-
verb_doubler(D).
verb_tourner(tourner).
%verb_tourner(amorcer).
verb_tourner(virer).
verb_avancer(redémarrer).
verb_avancer(couper).
verb_avancer(démarrer).
verb_avancer(continuer).
verb_avancer(partir).
verb_avancer(repartir).
verb_avancer(rouler).
verb_avancer(circuler).
verb_avancer(venir).
verb_avancer(arriver).
verb_avancer(rouler).
verb_avancer(engager).
verb_avancer(passer).
verb_avancer(franchir).
verb_stop(arrêter).
verb_stop(stopper).
verb_stop(caler).
verb_stop(immobiliser).
verb_stop(stationner).
verb_doubler(doubler).
verb_doubler(dépasser).
verb_etat(être).
a_arret(arrêt).
a_arret(stationner).
a_arret(immobiliser).
a_arret(stationnement).
a_gauche(à_gauche).
a_gauche(gauche).
a_droite(à_droite).
a_droite(droite).
is_static(X) :-
member(Y, X),
objet_statique(Y).
objet_statique(rambarde).
objet_statique(pilier).
objet_statique(rail).
objet_statique(clôture).
objet_statique(panneau).
objet_statique(trottoir).
objet_statique(mur).
objet_statique(barrière).
objet_statique(arbre).
objet_statique(benne).
objet_statique(stop).
prep_sur(contre).
prep_sur(sur).
prep_sur(vers).
% base de connaissances crée par Sylvain Dupuy
% feux tricolores
feu(['feu','feux']):- !.
vert(['vert','verts']):- !.
rouge(['rouge','rouges']):- !.
orange(['orange','oranges']):- !.
flashing(['clignotant','clignotants']):- !.
% Les personnes
actor1(['j', 'tiers', 205, 'nous', 'je', 'il', 'elle', 'automobiliste', 'véhicule', 'véhicule_a', 'véhicule_b', 'véhicule_c', 'cycliste', 'conducteur', 'voiture', 'moto', 'motocyclette', 'camion','B','P205','205','Ford','R21']) :- !.
victim1(['nous','arbre', 'rambarde', 'pilier', 'rail', 'clôture', 'panneau', 'benne','trottoir', 'mur', 'automobiliste','barrière', 'véhicule', 'véhicule_a', 'véhicule_b', 'véhicule_c', 'cycliste', 'conducteur', 'voiture', 'moto', 'motocyclette', 'camion',205,'P205','205','B','Ford','R21']) :- !.
enonciateur(['je', 'j', 'mon', 'ma', 'me', 'm', 'vehicule_a','nous']) :- !.
% Les verbes de choc
verbe_choc(['heurter', 'taper', 'percuter', 'toucher', 'abîmer', 'accrocher', 'frotter', 'cogner', 'emboutir', 'enfoncer']) :- !.
% Les verbes de double choc
verbe_double_choc(['pousser', 'projeter']) :- !.
%négation
%negation(['ne', 'n', 'pas']) :- !.
% Les objets statiques.
%Les carrefours
hyp(carrefour, carrefour).
hyp(intersection, carrefour).
hyp(feu, carrefour).
hyp(feux, carrefour).
hyp(stop, carrefour).
hyp(clignotant, carrefour).
hyp(clignoter, carrefour).
hyp(céder, carrefour).
hyp(priorité, carrefour).
hyp(sortie, carrefour).
%Les virages
hyp(virage, virage).
hyp(courbe, virage).
hyp(tournant, virage).
%Les arbres
hyp(arbre, arbre).
hyp(pin, arbre).
hyp(sapin, arbre).
hyp(chêne, arbre).
% Les stops
hyp(stop, stop).
hyp(cédez, stop). %discutable
% Les passages
hyp(clouté, passage_cloute).
% Les obstacles
hyp(rambarde, road_obstacle).
hyp(pilier, road_obstacle).
hyp(rail, road_obstacle).
hyp(clôture, road_obstacle).
hyp(panneau, road_obstacle).
hyp(trottoir, road_obstacle).
hyp(mur, road_obstacle).
hyp(barrière, road_obstacle).
%hyp(benne, road_obstacle). % Discutable. Il faut introduire une nouvelle catégorie d'objets mobiles en stationnement.
hyp(tourner, tourner).
hyp(virer, tourner).
hyp(sortir, sortir).
hyp(surgir, sortir).
Carsim3/parser.pl 0100644 0001756 0001774 00000155747 07400724731 0014244 0 ustar 00pierre cs 0000350 0000120 % Parser.pl contains the parsing predicates.
% Created and modified by Pierre Nugues
parse(FirstReport, FirstSentence, ComplexPG) :-
multiword_detector(FirstReport, FirstReport_MW),
read_sentences(FirstReport_MW, FirstSentence, _),
simple_parse(FirstSentence, Parse),
complex_ng(Parse, ComplexNG),
complex_ng(ComplexNG, ComplexNG2),
complex_ng(ComplexNG2, ComplexNG3),
complex_pg(ComplexNG3, ComplexPG1),
complex_pg(ComplexPG1, ComplexPG).
%read_sentences(FirstReport, FirstSentence, RestSentences) :-
read_sentences(FirstReport, FirstSentence, _) :-
sentences(Sentences, FirstReport, []),
!,
member(FirstSentence, Sentences).
% Complex noun groups are linked with variants of de, pour, et and ou.
complex_ng([], []).
complex_ng([ng(NG1), pg([DE | NG2]) | Rest1], [ng(NG3) | Rest2]) :-
(DE == de; DE == des; DE == du; DE == d;
DE == pour; DE == 'Pour';
DE == et; DE == ou),
append(NG1, [DE | NG2], NG3),
!,
% write(NG3), nl,
complex_ng(Rest1, Rest2).
% Complex noun groups are linked with inf groups.
complex_ng([ng(NG1), infg([DE | NG2]) | Rest1], [ng(NG3) | Rest2]) :-
(DE == de; DE == des; DE == du; DE == d),
append(NG1, [DE | NG2], NG3),
!,
% write(NG3), nl,
complex_ng(Rest1, Rest2).
%Appositive noun groups, excluding pronouns
complex_ng([ng(NG1), ng(NG2) | Rest1], [ng(NG3) | Rest2]) :-
NG1 = [PRO1 | _],
NG2 = [PRO2 | _],
\+ pronoun(PRO1, _, _),
\+ pronoun(PRO2, _, _),
\+ pronoun_rel(PRO1, _, _),
\+ pronoun_rel(PRO2, _, _),
append(NG1, NG2, NG3),
!,
% write(NG3), nl,
complex_ng(Rest1, Rest2).
complex_ng([X | Rest1], [X | Rest2]) :-
!,
complex_ng(Rest1, Rest2).
complex_pg([], []).
complex_pg([pg(NG1), pg([DE | NG2]) | Rest1], [pg(NG3) | Rest2]) :-
(DE == de; DE == des; DE == du; DE == d),
append(NG1, [DE | NG2], NG3),
!,
% write(NG3), nl,
complex_pg(Rest1, Rest2).
complex_pg([X | Rest1], [X | Rest2]) :-
!,
complex_pg(Rest1, Rest2).
simple_parse(Lin, Lout) :-
% multiword_detector(Lin, Lout1),
group_detector(Lin, Lout),
!.
multiword_detector(In, Out) :-
word_stream_1(Beginning, MultiWord, End, In, []),
append(Beginning, [MultiWord], Head),
append(Head, Rest, Out),
multiword_detector(End, Rest),
!.
multiword_detector(End, End) :- !.
word_stream_1(Beginning, MultiWord, End) -->
beginning(Beginning),
multiword(MultiWord),
end(End).
group_detector(In, Out) :-
word_stream_2(Beginning, Group, End, In, []),
group_detector(End, Rest),
append(Beginning, [Group], Head),
append(Head, Rest, Out). %, write(Beginning), write(' ' ).
group_detector(End, End).
word_stream_2(Beginning, Group, End) -->
beginning(Beginning),
group(Group),
end(End).
group(infg(Group)) --> inf_group(Group). % {write(Group), nl}.
group(pg(Group)) --> prep_group(Group).
group(vg(Group)) --> infinitive_group(Group). %{write(Group), nl}. % No difference with verb group
group(gg(Group)) --> gerund_group(Group). %, {write(Group), nl}.
group(vg(Group)) --> verb_group(Group).
group(ng(Group)) --> noun_group(Group).
group(rg(Group)) --> adv_group(Group).
group(rp([Group])) --> pronoun_rel(Group).
group(cs([Group])) --> conj_sub(Group).
inf_group([P1, P2 | NG]) --> prep(P1), prep(P2), infinitive_group(NG). %, {write([P1, P2 | NG]), nl}.
inf_group([P | NG]) --> prep(P), infinitive_group(NG). %, {write([P | NG]), nl}.
prep_group([P1, P2 | NG]) --> prep(P1), prep(P2), noun_group(NG). % Sometime prep coumpound ie "par contre" -- Changement
prep_group([P | NG]) --> prep(P), noun_group(NG).
gerund_group([en, CL | VG]) --> [en], clitic(CL), gerund_group(VG).
gerund_group(['En', CL | VG]) --> ['En'], clitic(CL), gerund_group(VG).
gerund_group([en | VG]) --> [en], gerund_group(VG).
gerund_group(['En' | VG]) --> ['En'], gerund_group(VG).
gerund_group(VG) --> gerund_chain(VC), [été], adjective(ADJ), [que],
{append(VC, [été, ADJ, que], VG)}. %, {write(VG), nl}.
gerund_group(VG) --> gerund_chain(VC), [été], past_participle(PP), [que],
{append(VC, [été, PP, que], VG)}.
gerund_group(VG) --> gerund_chain(VC), past_participle(PP), [que],
{append(VC, [PP, que], VG)}.
gerund_group(VG) --> gerund_chain(VC), [été], adjective(ADJ),
{append(VC, [été, ADJ], VG)}. %, {write(VG), nl}.
gerund_group(VG) --> gerund_chain(VC), [été], past_participle(PP),
{append(VC, [été, PP], VG)}.
gerund_group(VG) --> gerund_chain(VC), past_participle(PP), {append(VC, [PP], VG)}.
gerund_group([RBN1, CL, V, RBN2]) --> adv_neg(RBN1), clitic(CL), gerund(V), adv_neg(RBN2).
gerund_group([RBN1, V, RBN2]) --> adv_neg(RBN1), gerund(V), adv_neg(RBN2).
gerund_group([CL, V, ADJ]) --> clitic(CL), aux_conj_gerund_be(V), adj(ADJ). %, {write([CL, V, ADJ]), nl}.
gerund_group([CL, V]) --> clitic(CL), gerund(V).
gerund_group([V, ADJ]) --> aux_conj_gerund_be(V), adj(ADJ). %, {write([V, ADJ]), nl}.
gerund_group([V, I]) --> gerund(V), infinitive(I).
gerund_group(GC) --> gerund_chain(GC).
gerund_group([V]) --> gerund(V).
gerund_chain([RBN, CL, AC, RB1, RB2]) --> adv_neg(RBN), clitic(CL), aux_conj_gerund(AC), adv(RB1), adv(RB2).
gerund_chain([RBN, AC, RB1, RB2]) --> adv_neg(RBN), aux_conj_gerund(AC), adv(RB1), adv(RB2).
gerund_chain([RBN, CL, AC, RB]) --> adv_neg(RBN), clitic(CL), aux_conj_gerund(AC), adv(RB).
gerund_chain([RBN, AC, RB]) --> adv_neg(RBN), aux_conj_gerund(AC), adv(RB).
gerund_chain([RBN, AC]) --> adv_neg(RBN), aux_conj_gerund(AC). %ne ... que
gerund_chain([CL, AC, RB]) --> clitic(CL), aux_conj_gerund(AC), adv(RB).
gerund_chain([AC, RB]) --> aux_conj_gerund(AC), adv(RB).
gerund_chain([CL, AC]) --> clitic(CL), aux_conj_gerund(AC).
gerund_chain([AC]) --> aux_conj_gerund(AC).
infinitive_group(VG) --> infinitive_chain_2(VC), [été], past_participle(PP), [que],
{append(VC, [été, PP, que], VG)}.
infinitive_group(VG) --> infinitive_chain_2(VC), past_participle(PP), [que],
{append(VC, [PP, que], VG)}.
infinitive_group(VG) --> infinitive_chain_2(VC), [été], past_participle(PP),
{append(VC, [été, PP], VG)}.
infinitive_group(VG) --> infinitive_chain_2(VC), past_participle(PP),
{append(VC, [PP], VG)}.
infinitive_group(IG) --> infinitive_chain(IC), clitic(C), infinitive(I), past_participle(PP), {append(IC, [C, I, PP], IG)}.
infinitive_group(IG) --> infinitive_chain(IC), clitic(C), infinitive(I),
{append(IC, [C, I], IG)}.
infinitive_group(IG) --> infinitive_chain(IC), aux_infinitive(I), past_participle(PP),
{append(IC, [I, PP], IG)}.
infinitive_group(IG) --> infinitive_chain(IC), infinitive(I1), infinitive(I2),
{append(IC, [I1, I2], IG)}.
infinitive_group(IG) --> infinitive_chain(IC), infinitive(I),
{append(IC, [I], IG)}.
infinitive_group([CL, I1, I2]) --> clitic(CL), infinitive(I1), infinitive(I2).
infinitive_group([CL, I]) --> clitic(CL), infinitive(I).
infinitive_group([CL, I]) --> clitic(CL), aux_infinitive(I).
infinitive_group([I1, I2]) --> infinitive(I1), infinitive(I2).
infinitive_group([I]) --> infinitive(I).
infinitive_group([I]) --> aux_infinitive(I).
%infinitive_chain(VG) --> gerund_group(VG).
infinitive_chain(VG) --> verb_group(VG).
infinitive_chain([I]) --> infinitive(I).
infinitive_chain([en, train, de]) --> [en, train, de].
infinitive_chain([ne, pas]) --> [ne, pas].
%infinitive_chain([P, I]) --> prep(P), infinitive(I).
%infinitive_chain([P]) --> prep(P).
infinitive_chain_2([RBN, CL, AC, RB1, RB2]) -->
adv_neg(RBN), clitic(CL), aux_infinitive(AC), adv(RB1), adv(RB2).
infinitive_chain_2([RBN, AC, RB1, RB2]) -->
adv_neg(RBN), aux_infinitive(AC), adv(RB1), adv(RB2).
infinitive_chain_2([RBN, CL, AC, RB]) -->
adv_neg(RBN), clitic(CL), aux_infinitive(AC), adv(RB).
infinitive_chain_2([RBN, AC, RB]) --> adv_neg(RBN), aux_infinitive(AC), adv(RB).
infinitive_chain_2([RBN, AC]) --> adv_neg(RBN), aux_infinitive(AC). %ne ... que
infinitive_chain_2([CL, AC, RB]) --> clitic(CL), aux_infinitive(AC), adv(RB).
infinitive_chain_2([AC, RB]) --> aux_infinitive(AC), adv(RB).
infinitive_chain_2([CL, AC]) --> clitic(CL), aux_infinitive(AC).
infinitive_chain_2([AC]) --> aux_infinitive(AC).
verb_chain_be([RBN, CL, AC, RB1, RB2]) --> adv_neg(RBN), clitic(CL), aux_conj_be(AC), adv(RB1), adv(RB2).
verb_chain_be([RBN, AC, RB1, RB2]) --> adv_neg(RBN), aux_conj_be(AC), adv(RB1), adv(RB2).
verb_chain_be([RBN, CL, AC, RB]) --> adv_neg(RBN), clitic(CL), aux_conj_be(AC), adv(RB).
verb_chain_be([RBN, AC, RB]) --> adv_neg(RBN), aux_conj_be(AC), adv(RB).
verb_chain_be([RBN, AC]) --> adv_neg(RBN), aux_conj_be(AC). %ne ... que
verb_chain_be([CL, AC, RB]) --> clitic(CL), aux_conj_be(AC), adv(RB).
verb_chain_be([AC, RB]) --> aux_conj_be(AC), adv(RB).
verb_chain_be([CL, AC]) --> clitic(CL), aux_conj_be(AC).
verb_chain_be([AC]) --> aux_conj_be(AC).
verb_chain([RBN, CL, AC, RB1, RB2]) --> adv_neg(RBN), clitic(CL), aux_conj(AC), adv(RB1), adv(RB2).
verb_chain([RBN, AC, RB1, RB2]) --> adv_neg(RBN), aux_conj(AC), adv(RB1), adv(RB2).
verb_chain([RBN, CL, AC, RB]) --> adv_neg(RBN), clitic(CL), aux_conj(AC), adv(RB).
verb_chain([RBN, AC, RB]) --> adv_neg(RBN), aux_conj(AC), adv(RB).
verb_chain([RBN, AC]) --> adv_neg(RBN), aux_conj(AC). %ne ... que
verb_chain([CL, AC, RB]) --> clitic(CL), aux_conj(AC), adv(RB).
verb_chain([AC, RB]) --> aux_conj(AC), adv(RB).
verb_chain([CL, AC]) --> clitic(CL), aux_conj(AC).
verb_chain([AC]) --> aux_conj(AC).
verb_group(VG) --> verb_chain(VC), [été], pp_group(PP), [que],
{append(VC, [été | PP], VG1), append(VG1, [que], VG)}.
verb_group(VG) --> verb_chain(VC), pp_group(PP), [que],
{append(VC, PP, VG1), append(VG1, [que], VG)}.
verb_group(VG) --> verb_chain(VC), [été], adj_group(ADJ),
{append(VC, [été | ADJ], VG)}. %, {write(VG), nl}.
verb_group(VG) --> verb_chain(VC), [été], pp_group(PP),
{append(VC, [été | PP], VG)}.
verb_group(VG) --> verb_chain(VC), [été], {append(VC, [été], VG)}.
verb_group(VG) --> verb_chain_be(VC), adj_group(ADJ),
{append(VC, ADJ, VG)}. %, {write(VG), nl}.
verb_group(VG) --> verb_chain(VC), pp_group(PP), {append(VC, PP, VG)}.
verb_group([RBN1, CL, V, RBN2]) -->
adv_neg(RBN1), clitic(CL), tensed_verb(V), adv_neg(RBN2).
verb_group([RBN1, V, RBN2]) -->
adv_neg(RBN1), tensed_verb(V), adv_neg(RBN2).
verb_group([RBN, V]) -->
adv_neg(RBN), tensed_verb(V).
verb_group([CL, V]) --> clitic(CL), tensed_verb(V).
verb_group([V]) --> tensed_verb(V).
% adj_group(-AdjGroup)
% detects a list of words making an adjective
% group and unifies AdjGroup with it
/*
adj_group([RB, A | AG]) -->
adv(RB), adj(A), adj_group(AG).
adj_group([A | AG]) -->
adj(A), adj_group(AG).
adj_group([A]) --> adj(A).
*/
adj_group([RB | AG]) -->
adv(RB), adj_group(AG).
adj_group([A | AG]) -->
adj(A), adj_group(AG).
adj_group([A]) --> adj(A).
% pp_group(-PPGroup)
% detects a list of words making a past particple
% group and unifies PPGroup with it
pp_group([RB | PP]) -->
adv(RB), pp_group(PP).
pp_group([PP]) --> past_participle(PP).
% adv_group(-ADVGroup)
% detects a list of words making an adverb
% group and unifies PPGroup with it
adv_group([RB | ADVG]) -->
adv(RB), adv_group(ADVG).
adv_group([ADV]) --> adv(ADV).
% noun_group(-NounGroup)
% detects a list of words making a noun group and
% unifies NounGroup with it
noun_group(NG) -->
det(D), noun_group_no_det(N), ['-', là],
{append([D], N, NG1), append(NG1, [là], NG)}.
noun_group(NG) -->
det(D), noun_group_no_det(N), [là],
{append([D], N, NG1), append(NG1, [là], NG)}.
noun_group(NG) -->
det(D), noun_group_no_det(N),
{append([D], N, NG)}.
noun_group(NG) --> noun_group_no_det(NG).
%noun_group([D, PN]) --> det(D), proper_noun(PN). %{write(D), write(PN), nl}.
%noun_group([PN]) --> proper_noun(PN).
noun_group([PRO]) --> pronoun(PRO).
%noun_group([PRO, clitic]) --> clitic(PRO).
noun_group_no_det(NG) -->
adj_group(AG1), noun(N), adj_group(AG2),
{append(AG1, [N], NG1), append(NG1, AG2, NG)}.
noun_group_no_det(NG) -->
adj_group(AG), noun(N),
{append(AG, [N], NG)}.
%noun_group_no_det([X, N | [PN]]) -->
% [Number], voie(N), proper_noun(PN), {number(Number)}.
noun_group_no_det([_, N | [PN]]) -->
[Number], voie(N), proper_noun(PN), {number(Number)}.
noun_group_no_det([N | [PN]]) -->
voie(N), proper_noun(PN).
noun_group_no_det(NG) -->
noun(N), adj_group(AG),
{append([N], AG, NG)}.
noun_group_no_det(NG) --> speed(NG).
%noun_group_no_det(NG) --> distance(NG).
noun_group_no_det([N]) --> noun(N).
noun_group_no_det([PN]) --> proper_noun(PN).
noun_group_no_det(AG) --> adj_group(AG).
beginning(X, Y, Z) :- append(X, Z, Y).
end(X, Y, Z) :- append(X, Z, Y).
det(beaucoup_de) --> [beaucoup_de].
det('Ce') --> ['Ce'].
det(ce) --> [ce].
det(cet) --> [cet].
det('Cet') --> ['Cet'].
det(cette) --> [cette].
det(l) --> [l], [''''].
det('L') --> ['L'], [''''].
det(le) --> [le].
det('Le') --> ['Le'].
det(les) --> [les].
det('Les') --> ['Les'].
det(la) --> [la].
det('La') --> ['La'].
det(ma) --> [ma].
det('Ma') --> ['Ma'].
det(mon) --> [mon].
det('Mon') --> ['Mon'].
det(mes) --> [mes].
det(nos) --> [nos].
det(notre) --> [notre].
det(l_une_des) --> [l_une_des].
det('Pas_de') --> ['Pas_de'].
%det(pas_de) --> [pas_de].
det(sa) --> [sa].
det('Sa') --> ['Sa'].
det(ses) --> [ses].
det(son) --> [son].
det(toute_la) --> [toute_la].
det(tout_le) --> [tout_le].
det(un) --> [un].
det('Un') --> ['Un'].
det(une) --> [une].
nombre(deux) --> [deux].
nombre(X) --> [X], {number(X)}.
adj('Fort') --> ['Fort'].
adj(amiable) --> [amiable].
adj(amovible) --> [amovible].
adj(arrière) --> [arrière].
adj(aucun) --> [aucun].
adj(aucune) --> [aucune].
adj(autre) --> [autre].
adj(autres) --> [autres].
adj(avant) --> [avant].
adj(bas) --> [bas].
adj(bis) --> [bis].
adj(blanche) --> [blanche].
adj(blanches) --> [blanches].
adj(blancs) --> [blancs].
adj(bordée) --> [bordée].
adj(brutal) --> [brutal].
adj(centrale) --> [centrale].
adj(certain) --> [certain].
adj(chaque) --> [chaque].
adj(confiante) --> [confiante].
adj(conscient) --> [conscient].
adj(continue) --> [continue].
adj(dense) --> [dense].
adj(dernier) --> [dernier].
adj(dernières) --> [dernières].
adj(deux) --> [deux].
adj(deuxième) --> [deuxième].
adj(différentes) --> [différentes].
adj(double) --> [double].
adj(droit) --> [droit].
adj(droite) --> [droite].
adj(extérieure) --> [extérieure].
adj(faible) --> [faible].
adj(fort) --> [fort].
adj(forte) --> [forte].
adj(frontal) --> [frontal].
adj(gauche) --> [gauche].
adj(giratoire) --> [giratoire].
adj(glissante) --> [glissante].
adj(grande) --> [grande].
adj(horizontale) --> [horizontale].
adj(impossible) --> [impossible].
adj(indonésien) --> [indonésien].
adj(intense) --> [intense].
adj(inverse) --> [inverse].
adj(invisible) --> [invisible].
adj(involontaire) --> [involontaire].
adj(inévitable) --> [inévitable].
%adj(juste) --> [juste].
adj(latéral) --> [latéral].
adj(libre) --> [libre].
adj(léger) --> [léger].
adj(manuelle) --> [manuelle].
adj(mort) --> [mort].
adj(médiane) --> [médiane].
adj(métallique) --> [métallique].
adj(même) --> [même].
adj(normale) --> [normale].
adj(obligatoire) --> [obligatoire].
adj(orange) --> [orange].
adj(petite) --> [petite].
adj(plein) --> [plein].
adj(plusieurs) --> [plusieurs].
adj(possible) --> [possible].
adj(précédent) --> [précédent].
adj(premier) --> [premier].
adj(première) --> [première].
adj(principale) --> [principale].
adj(prioritaire) --> [prioritaire].
adj(proche) --> [proche].
adj(provisoire) --> [provisoire].
adj(précise) --> [précise].
adj(quelques) --> [quelques].
adj(rigoureux) --> [rigoureux].
adj(rouge) --> [rouge].
adj(second) --> [second].
adj(seul) --> [seul]. %%changement
adj(sinueuse) --> [sinueuse].
adj(tricolore) --> [tricolore].
adj(tel) --> [tel].
adj(telle) --> [telle].
adj(unique) --> [unique].
adj(vert) --> [vert].
adj(visuels) --> [visuels].
adj(vive) --> [vive].
adj(âpres) --> [âpres].
adj(étroite) --> [étroite].
adj('1er') --> ['1er'].
adj('1ére') --> ['1ére'].
adj('3ième') --> ['3ième'].
adj('3ème') --> ['3ème'].
adj(no_immatriculation) --> [no_immatriculation].
adj(X) --> nombre(X).
%adj() --> [].
adj(A) --> past_participle(A).
%adj(A) --> gerund(A).
adv('Bien_entendu') --> ['Bien_entendu'].
adv('Malheureusement') --> ['Malheureusement'].
adv(à_gauche) --> [à_gauche].
adv(à_droite) --> [à_droite].
adv(ailleurs) --> [ailleurs].
adv(alors) --> [alors].
adv(aussi) --> [aussi].
adv(au_loin) --> [au_loin].
adv(beaucoup) --> [beaucoup].
adv(bien) --> [bien].
adv(brusquement) --> [brusquement].
adv(certainement) --> [certainement].
adv(complètement) --> [complètement].
adv(correctement) --> [correctement].
adv(donc) --> [donc].
adv(doucement) --> [doucement].
adv(du_tout) --> [du_tout].
adv(encore) --> [encore].
adv(en_face) --> [en_face].
adv(fortement) --> [fortement].
adv(gravement) --> [gravement].
adv(immédiatement) --> [immédiatement].
adv(initialement) --> [initialement].
adv(involontairement) --> [involontairement].
adv(juste) --> [juste].
adv(lentement) --> [lentement].
adv(loin) --> [loin].
adv(légèrement) --> [légèrement].
adv(maintenant) --> [maintenant].
adv(mal) --> [mal].
adv(momentanément) --> [momentanément].
adv(normalement) --> [normalement].
adv(notamment) --> [notamment].
adv(par_conséquent) --> [par_conséquent].
adv(peu) --> [peu].
adv(perpendiculairement) --> [perpendiculairement].
adv(plus) --> [plus].
adv(plus_de) --> [plus_de].
adv(près) --> [près].
adv(quasiment) --> [quasiment].
adv(rien) --> [rien].
adv(sans_doute) --> [sans_doute].
adv(tard) --> [tard].
adv(totalement) --> [totalement].
adv(toujours) --> [toujours].
adv(tout_droit) --> [tout_droit].
adv(tout_à_fait) --> [tout_à_fait].
adv(trop) --> [trop].
adv(très) --> [très].
adv(violemment) --> [violemment].
adv(visiblement) --> [visiblement].
adv(vite) --> [vite].
adv(à_peine) --> [à_peine].
adv(également) --> [également].
adv(X) --> adv_neg(X).
adv_neg('Ne') --> ['Ne'].
adv_neg(ne) --> [ne].
adv_neg(n) --> [n], [''''].
adv_neg(pas) --> [pas].
%adv_neg(que) --> [que]. % ne ... que
voie('Avenue') --> ['Avenue'].
voie('Av') --> ['Av'].
voie(ave) --> [ave].
voie('Bd') --> ['Bd'].
voie('Boulevard') --> ['Boulevard'].
voie('Nationale') --> ['Nationale'].
voie('Parc') --> ['Parc'].
voie('Pont') --> ['Pont'].
voie('Voie') --> ['Voie'].
voie(route) --> [route].
voie(ave) --> [ave].
voie(avenue) --> [avenue].
voie(bd) --> [bd].
voie(boulevard) --> [boulevard].
voie(nationale) --> [nationale].
voie(place) --> [place].
voie(périphérique) --> [périphérique].
voie(quai) --> [quai].
voie(rue) --> [rue].
voie(rues) --> [rues].
voie(lycée) --> [lycée].
voie(sortie) --> [sortie].
noun('A_et_B') --> ['A_et_B'].
noun('B') --> ['B'].
noun('D') --> ['D'].
noun('Charretiers') --> ['Charretiers'].
noun('Clio') --> ['Clio'].
noun('Erreur') --> ['Erreur'].
noun('Libération') --> ['Libération'].
noun('Lilas') --> ['Lilas'].
noun('Médecin') --> ['Médecin'].
noun('Véhicule') --> ['Véhicule'].
noun(abord) --> [abord].
noun(absence) --> [absence].
noun(abîme) --> [abîme].
noun(accident) --> [accident].
noun(adversaire) --> [adversaire].
noun(aile) --> [aile].
noun(allure) --> [allure].
noun(angle) --> [angle].
noun(approche) --> [approche].
noun(arbre) --> [arbre].
noun(arbres) --> [arbres].
noun(arrêt) --> [arrêt].
noun(assurances) --> [assurances].
noun(automobiliste) --> [automobiliste].
noun(autoroute) --> [autoroute].
noun(autoroute_A1) --> [autoroute_A1].
noun(averse) --> [averse].
noun(bande) --> [bande].
noun(bandes) --> [bandes].
noun(barrière) --> [barrière].
noun(benne) --> [benne].
noun(berges) --> [berges].
noun(bicyclette) --> [bicyclette].
noun(bord) --> [bord].
noun(bouchon) --> [bouchon].
noun(boule) --> [boule].
noun(braquage) --> [braquage].
noun(brouillard) --> [brouillard].
noun(béton) --> [béton].
noun(camion) --> [camion].
noun(camionnette) --> [camionnette].
noun(capot) --> [capot].
noun(carambolage) --> [carambolage].
noun(carrefour) --> [carrefour].
noun(cas) --> [cas].
noun(cause) --> [cause].
noun(centre) --> [centre].
noun(certitude) --> [certitude].
noun(changement) --> [changement].
noun(chauffeur) --> [chauffeur].
noun(chaussée) --> [chaussée].
noun(chemin) --> [chemin].
noun(chien) --> [chien].
noun(choc) --> [choc].
noun(chocs) --> [chocs].
noun(chute) --> [chute].
noun(ciment) --> [ciment].
noun(circulation) --> [circulation].
noun(clignotant) --> [clignotant].
noun(clôture) --> [clôture].
noun(collision) --> [collision].
noun(collège) --> [collège].
noun(colonne) --> [colonne].
noun(commune) --> [commune].
noun(compte) --> [compte].
noun(concentration) --> [concentration].
noun(conducteur) --> [conducteur].
noun(conducteurs) --> [conducteurs].
noun(conductrice) --> [conductrice].
noun(conduite) --> [conduite].
noun(constat) --> [constat].
noun(contrôle) --> [contrôle].
noun(coordonnées) --> [coordonnées].
noun(coquelicots) --> [coquelicots].
noun(coté) --> [coté].
noun(coup) --> [coup].
noun(course) --> [course].
noun(courses) --> [courses].
noun(croisement) --> [croisement].
noun(croix) --> [croix].
noun(croquis) --> [croquis].
noun(cycliste) --> [cycliste].
noun(côté) --> [côté].
noun(demande) --> [demande].
noun(demarrage) --> [demarrage].
noun(devant) --> [devant].
noun(direction) --> [direction].
noun(dires) --> [dires].
noun(distance) --> [distance].
noun(domicile) --> [domicile].
noun(dommages) --> [dommages].
noun(dos) --> [dos].
noun(douleur) --> [douleur].
noun(douleurs) --> [douleurs].
noun(doute) --> [doute].
noun(déclaration) --> [déclaration].
noun(dégât) --> [dégât].
noun(dégâts) --> [dégâts].
noun(dépannage) --> [dépannage].
noun(dépanneur) --> [dépanneur].
noun(effet) --> [effet].
noun(embouteillage) --> [embouteillage].
noun(emplacement) --> [emplacement].
noun(endroit) --> [endroit].
noun(endroits) --> [endroits].
noun(engin) --> [engin].
noun(enlèvement) --> [enlèvement].
noun(entrée) --> [entrée].
noun(envoi) --> [envoi].
noun(essence) --> [essence].
noun(face) --> [face].
noun(fait) --> [fait].
noun(façon) --> [façon].
noun(fermeture) --> [fermeture].
noun(feu) --> [feu].
noun(feux) --> [feux].
noun(file) --> [file].
noun(files) --> [files].
noun(flaque) --> [flaque].
noun(fleurs) --> [fleurs].
noun(flot) --> [flot].
noun(flux) --> [flux].
noun(flèches) --> [flèches].
noun(fonctionnement) --> [fonctionnement].
noun(fond) --> [fond].
noun(fossé) --> [fossé].
noun(fouet) --> [fouet].
noun(franchissement) --> [franchissement].
noun(frein) --> [frein].
noun(freins) --> [freins].
noun(fuite) --> [fuite].
noun(février) --> [février].
noun(garage) --> [garage].
noun(garagiste) --> [garagiste].
noun(garde) --> [garde].
noun(gendarmerie) --> [gendarmerie].
noun(gendarmes) --> [gendarmes].
noun(golf) --> [golf].
noun(graviers) --> [graviers].
noun(haie) --> [haie].
noun(hauteur) --> [hauteur].
noun(heure) --> [heure].
noun(huile) --> [huile].
noun(hésitation) --> [hésitation].
noun(immeuble) --> [immeuble].
noun(immobilisation) --> [immobilisation].
noun(impact) --> [impact].
noun(importance) --> [importance].
noun(impossibilité) --> [impossibilité].
noun(infraction) --> [infraction].
noun(inspection) --> [inspection].
noun(intersection) --> [intersection].
noun(jour) --> [jour].
noun(lapin) --> [lapin].
noun(lieu) --> [lieu].
noun(lieux) --> [lieux].
noun(ligne) --> [ligne].
noun(limitation) --> [limitation].
noun(longueur) --> [longueur].
noun(lundi) --> [lundi].
noun(main) --> [main].
noun(maison) --> [maison].
noun(malade) --> [malade].
noun(manière) --> [manière].
noun(manoeuvre) --> [manoeuvre].
noun(marche) --> [marche].
noun(marquage) --> [marquage].
noun(marée) --> [marée].
noun(matin) --> [matin].
noun(maximum) --> [maximum].
noun(milieu) --> [milieu].
noun(moment) --> [moment].
noun(motard) --> [motard].
noun(moto) --> [moto].
noun(motocyclette) --> [motocyclette].
noun(motocycliste) --> [motocycliste].
noun(mur) --> [mur].
noun(mètres) --> [mètres].
noun(niveau) --> [niveau].
noun(noms) --> [noms].
noun(nuit) --> [nuit].
noun(nuque) --> [nuque].
noun(observation) --> [observation].
noun(ordinaire) --> [ordinaire].
noun(panne) --> [panne].
noun(panneau) --> [panneau].
noun(panneaux) --> [panneaux].
noun(pare_chocs) --> [pare_choc].
noun(pare_chocs) --> [pare_chocs].
noun(parking) --> [parking].
noun(part) --> [part].
noun(partie) --> [partie].
noun(passage) --> [passage].
noun(peine) --> [peine].
noun(pente) --> [pente].
noun(personne) --> [personne].
noun(phare) --> [phare].
noun(phares) --> [phares].
noun(photos) --> [photos].
noun(pied) --> [pied].
noun(pilier) --> [pilier].
noun(piéton) --> [piéton].
noun(plancher) --> [plancher].
noun(pneu) --> [pneu].
noun(poignet) --> [poignet].
noun(point) --> [point].
noun(police) --> [police].
noun(pompe) --> [pompe].
noun(pompiers) --> [pompiers].
noun(pont) --> [pont].
noun(porte) --> [porte].
noun(portion) --> [portion].
noun(portière) --> [portière].
noun(possibilité) --> [possibilité].
noun(pression) --> [pression].
noun(priorité) --> [priorité].
noun(protection) --> [protection].
noun(proximité) --> [proximité].
noun(présence) --> [présence].
noun(pédale) --> [pédale].
noun(rail) --> [rail].
noun(raison) --> [raison].
noun(ralentissement) --> [ralentissement].
noun(rambarde) --> [rambarde].
noun(rapport) --> [rapport].
noun(recto) --> [recto].
noun(remorque) --> [remorque].
noun(respect) --> [respect].
noun(responsable) --> [responsable].
noun(retard) --> [retard].
noun(rond_point) --> [rond_point].
noun(roue) --> [roue].
noun(réserve) --> [réserve].
noun(résidence) --> [résidence].
noun(rétroviseur) --> [rétroviseur].
noun(station_service) --> [station_service].
noun(schéma) --> [schéma].
noun(secondes) --> [secondes].
noun(camion) --> [semi_remorque]. % modification ajout => je prefere diminuer le nombre de mots du dictionnaire
% noun(semi_remorque) --> [semi_remorque].
noun(sens) --> [sens].
noun('Ford') --> [sierra].%(ajout)
noun(signal) --> [signal].
noun(signalisation) --> [signalisation].
noun(siège) --> [siège].
noun(sous_sol) --> [sous_sol].
noun(sol) --> [sol].
noun(stationnement) --> [stationnement].
noun(stop) --> [stop].
noun(suite) --> [suite].
noun(sécurité) --> [sécurité].
noun(série) --> [série].
noun(table) --> [table].
noun(temps) --> [temps].
noun(tiers) --> [tiers].
noun(tonneaux) --> [tonneaux].
noun(torts) --> [torts].
noun(tour) --> [tour].
noun(tournant) --> [tournant].
noun(traces) --> [traces].
noun(trafic) --> [trafic].
noun(trajectoire) --> [trajectoire].
noun(travail) --> [travail].
noun(travaux) --> [travaux].
noun(traversée) --> [traversée].
noun(trottoir) --> [trottoir].
noun(type) --> [type].
noun(témoin) --> [témoin].
noun(tête) --> [tête].
noun(urgence) --> [urgence].
noun(usager) --> [usager].
noun(vacances) --> [vacances].
noun(verglas) --> [verglas].
noun(vigueur) --> [vigueur].
noun(ville) --> [ville].
noun(virage) --> [virage].
noun(visibilité) --> [visibilité].
noun(visite) --> [visite].
noun(vitesse) --> [vitesse].
noun(voie) --> [voie].
noun(voies) --> [voies].
noun(voiture) --> [voiture].
noun(voitures) --> [voitures].
noun(voix) --> [voix].
noun(volant) --> [volant].
noun(vue) --> [vue].
noun(véhicule) --> [véhicule].
noun(véhicules_A_et_B) --> [véhicules_A_et_B].
noun(véhicule_a) --> [véhicule_a].
noun(véhicule_b) --> [véhicule_b].
noun(véhicule_c) --> [véhicule_c].
noun(véhicules) --> [véhicules].
noun(écart) --> [écart].
noun(église) --> [église].
noun(étendue) --> [étendue].
noun(time_value) --> [time_value].
noun(date_value) --> [date_value].
noun(distance_value) --> [distance_value].
noun(X) --> voie(X).
%noun() --> [].
pronoun(ceci) --> [ceci].
pronoun(celui_ci) --> [celui_ci].
pronoun('Celui_ci') --> ['Celui_ci'].
pronoun(celle_ci) --> [celle_ci].
pronoun(celle) --> [celle].
pronoun('C') --> ['C'], [''''].
pronoun(c) --> [c], [''''].
pronoun(ce_qu) --> [ce_qu].
pronoun(ce_qui) --> [ce_qui].
pronoun(je) --> [je].
pronoun(j) --> [j], [''''].
pronoun('je') --> ['Je'].
pronoun('j') --> ['J'], [''''].
pronoun(elle) --> [elle].
pronoun('elle') --> ['Elle'].
pronoun(il) --> [il].
pronoun('il') --> ['Il'].
pronoun(ils) --> [ils].
pronoun(la_mienne) --> [la_mienne].
pronoun(laquelle) --> [laquelle].
pronoun(lequel) --> [lequel].
pronoun(lesquelles) --> [lesquelles].
pronoun(le_sien) --> [le_sien].
pronoun(lui) --> [lui].
pronoun(nous) --> [nous].
pronoun('nous') --> ['Nous'].
pronoun(vous) --> [vous].
pronoun(moi) --> [moi].
pronoun(rien) --> [rien].
pronoun('Rien') --> ['Rien'].
%pronoun(X) --> clitic(X).
clitic(le) --> [le].
clitic(lui) --> [lui].
clitic(l) --> [l], [''''].
%clitic(l) --> [l], ['].
clitic(en) --> [en].
clitic(me) --> [me].
clitic(m) --> [m], [''''].
clitic('Me') --> ['Me'].
clitic(nous) --> [nous]. %changement
clitic(se) --> [se].
clitic(s) --> [s], [''''].
clitic(y) --> [y].
pronoun_rel(qui) --> [qui].
pronoun_rel(où) --> [où].
conj_sub('Alors_que') --> ['Alors_que'].
conj_sub(que) --> [que].
conj_sub(mais) --> [mais].
conj_sub('Lorsque') --> ['Lorsque'].
conj_sub(lorsque) --> [lorsque].
conj_sub(quand) --> [quand].
conj_sub(s) --> [s], [''''].
conj_sub(si) --> [si].
conj_sub(si_bien_que) --> [si_bien_que].
conj_sub(à_ce_qu) --> [à_ce_qu].
prep('A') --> ['A'].
prep('Après') --> ['Après'].
prep('Au') --> ['Au'].
prep('Dans') --> ['Dans'].
prep('Sous') --> ['Sous'].
prep(sur) --> ['Sur'].
%prep('Sur') --> ['Sur'].
prep('Après') --> ['Après'].
prep(après) --> [après].
prep(au) --> [au].
prep(au_moment_de) --> [au_moment_de].
prep(au_moment_du) --> [au_moment_du].
prep(auprès) --> [auprès].
prep(aux) --> [aux].
prep(avec) --> [avec].
prep(avant) --> [avant].
prep(chez) --> [chez].
prep(contre) --> [contre].
prep(d) --> [d], [''''].
prep('D') --> ['D'], [''''].
prep('D_après') --> ['D_après'].
prep(dans) --> [dans].
prep('De') --> ['De'].
prep(de) --> [de].
prep(dedans) --> [dedans].
prep(depuis) --> [depuis].
prep('Devant') --> ['Devant'].
prep(derrière) --> [derrière].
prep(des) --> [des].
prep(dessus) --> [dessus].
prep(devant) --> [devant].
prep(du) --> [du].
prep(en) --> [en].
prep('En') --> ['En'].
prep(entre) --> [entre].
prep(face_au) --> [face_au].
prep(hors) --> [hors].
prep(hors_de) --> [hors_de].
prep(juste_après) --> [juste_après].
prep(juste_avant) --> [juste_avant].
prep('Lors_d') --> ['Lors_d'].
prep(lors_du) --> [lors_du].
prep(par) --> [par].
prep('Par') --> ['Par']. %changement
prep(pour) --> [pour].
prep('Pour') --> ['Pour'].
prep(près_de) --> [près_de].
prep(sans) --> [sans].
prep(sous) --> [sous].
prep(sur) --> [sur].
prep(vers) --> [vers].
prep(à) --> [à].
proper_noun('Alfred') --> ['Alfred'].
proper_noun('Argenteuil') --> ['Argenteuil'].
proper_noun('Bans') --> ['Bans'].
proper_noun('Cergy') --> ['Cergy'].
proper_noun('Bellefontaine') --> ['Bellefontaine'].
proper_noun('Beaumont_sur_Oise') --> ['Beaumont_sur_Oise'].
proper_noun('Blanc_Mesnil') --> ['Blanc_Mesnil'].
proper_noun('Bossoutrot') --> ['Bossoutrot'].
proper_noun('Camille_Claudel') --> ['Camille_Claudel'].
proper_noun('M._C_Delon') --> ['C_Delon'].
proper_noun('Condos') --> ['Condos'].
proper_noun('Draguignan') --> ['Draguignan'].
proper_noun('Ecouen') --> ['Ecouen'].
proper_noun('E_Quinet') --> ['E_Quinet'].
proper_noun('Ermitage') --> ['Ermitage'].
proper_noun('Est') --> ['Est'].
proper_noun('Foch') --> ['Foch'].
proper_noun('Gal_De_Gaulle') --> ['Gal_De_Gaulle'].
proper_noun('Mours') --> ['Mours'].
proper_noun('Ford') --> ['Ford'].
proper_noun('FG_Lorca') --> ['FG_Lorca'].
proper_noun('Franconville') --> ['Franconville'].
proper_noun('Genevilliers') --> ['Genevilliers'].
proper_noun('Gennevilliers') --> ['Gennevilliers'].
proper_noun('Herblay') --> ['Herblay'].
proper_noun('Italiens') --> ['Italiens'].
proper_noun('Jouy_le_Moutier') --> ['Jouy_le_Moutier'].
proper_noun('Montmorency') --> ['Montmorency'].
proper_noun('Nanterre') --> ['Nanterre'].
proper_noun('Maryse') --> ['Maryse'].
proper_noun('Pantin') --> ['Pantin'].
proper_noun('Pasteur') --> ['Pasteur'].
proper_noun('Poissy') --> ['Poissy'].
proper_noun('Président_Wilson') --> ['Président_Wilson'].
proper_noun('P_Doumer') --> ['P_Doumer'].
proper_noun('René_Coty') --> ['René_Coty'].
proper_noun('Renault') --> ['Renault'].
proper_noun(renault) --> [renault].
proper_noun('Saint_Ouen') --> ['Saint_Ouen'].
proper_noun('St_Brice') --> ['St_Brice'].
proper_noun('St_Martin_du_Tertre') --> ['St_Martin_du_Tertre'].
proper_noun('Sannois') --> ['Sannois'].
proper_noun('Saulnier') --> ['Saulnier'].
proper_noun('Senlis') --> ['Senlis'].
proper_noun('Sud') --> ['Sud'].
proper_noun('Taupinières') --> ['Taupinières'].
proper_noun('Taverny') --> ['Taverny'].
proper_noun('Thorez') --> ['Thorez'].
proper_noun('Peugeot') --> ['Peugeot'].
proper_noun('4L') --> ['4L'].
proper_noun('9TSE') --> ['9TSE'].
proper_noun('R11') --> ['R11'].
proper_noun('R21') --> ['R21'].
proper_noun('Villiers_Adam') --> ['Villiers_Adam'].
proper_noun('Roger_Levanneur') --> ['Roger_Levanneur'].
proper_noun('Pierre_Curie') --> ['Pierre_Curie'].
proper_noun('St_Prix') --> ['St_Prix'].
proper_noun('gd_Leclerc') --> ['gd_Leclerc'].
proper_noun('Dct_Leray') --> ['Dct_Leray'].
proper_noun('Maurice_Berteaux') --> ['Maurice_Berteaux'].
proper_noun('Renault_21') --> ['Renault_21'].
proper_noun('Peugeot_205') --> ['Peugeot_205'].
proper_noun('205') --> ['205'].
proper_noun('Couturier') --> ['Couturier'].
proper_noun('Constantinide') --> ['Constantinide'].
proper_noun('Morinval') --> ['Morinval'].
proper_noun('Renée_Briand') --> ['Renée_Briand'].
proper_noun('Sébastopol') --> ['Sébastopol'].
proper_noun('N17') --> ['N17'].
proper_noun(Name) -->
['Mr'], [X],
{name('M._', L1), name(X, L2), append(L1, L2, L3), name(Name, L3)}.
proper_noun(Name) -->
['Mme'], [X],
{name('Mme_', L1), name(X, L2), append(L1, L2, L3), name(Name, L3)}.
proper_noun(Name) -->
['Melle'], [X],
{name('Mlle_', L1), name(X, L2), append(L1, L2, L3), name(Name, L3)}.
infinitive(aller) --> [aller].
infinitive(apercevoir) --> [apercevoir].
infinitive(appeler) --> [appeler].
infinitive(approcher) --> [approcher].
infinitive(arrêter) --> [arrêter].
infinitive(assurer) --> [assurer].
infinitive(attendre) --> [attendre].
infinitive(braquer) --> [braquer].
infinitive(changer) --> [changer].
infinitive(continuer) --> [continuer].
infinitive(contrôler) --> [contrôler].
infinitive(couper) --> [couper].
infinitive(céder) --> [céder].
infinitive(diriger) --> [diriger].
infinitive(doubler) --> [doubler].
infinitive(dégager) --> [dégager].
infinitive(dégonfler) --> [dégonfler].
infinitive(délibérer) --> [délibérer].
infinitive(dépasser) --> [dépasser].
infinitive(déporter) --> [déporter].
infinitive(déraper) --> [déraper].
infinitive(emboutir) --> [emboutir].
infinitive(emprunter) --> [emprunter].
infinitive(engager) --> [engager].
infinitive(faire) --> [faire].
infinitive(faire_le_tour) --> [faire_le_tour].
infinitive(finir) --> [finir].
infinitive(freiner) --> [freiner].
infinitive(heurter) --> [heurter].
infinitive(indiquer) --> [indiquer].
infinitive(inspecter) --> [inspecter].
infinitive(juger) --> [juger].
infinitive(laisser) --> [laisser].
infinitive(marquer) --> [marquer].
infinitive(passer) --> [passer].
infinitive(percuter) --> [percuter].
infinitive(perdre) --> [perdre].
infinitive(prendre) --> [prendre].
infinitive(projeter) --> [projeter].
infinitive(prévoir) --> [prévoir].
infinitive(reculer) --> [reculer].
infinitive(redémarrer) --> [redémarrer].
infinitive(regarder) --> [regarder].
infinitive(rejoindre) --> [rejoindre].
infinitive(relâcher) --> [relâcher].
infinitive(rendre) --> [rendre].
infinitive(rentrer) --> [rentrer].
infinitive(repartir) --> [repartir].
infinitive(signaler) --> [signaler].
infinitive(sortir) --> [sortir].
infinitive(stopper) --> [stopper].
infinitive(tenir) --> [tenir].
infinitive(tordre) --> [tordre].
infinitive(toucher) --> [toucher].
infinitive(tourner) --> [tourner].
infinitive(tracter) --> [tracter].
infinitive(traverser) --> [traverser].
infinitive(voir) --> [voir].
infinitive(écraser) --> [écraser].
infinitive(établir) --> [établir].
infinitive(éviter) --> [éviter].
infinitive(X) --> aux_infinitive(X).
aux_infinitive(avoir) --> [avoir].
aux_infinitive(être) --> [être].
past_participle('Entraîner') --> ['Entraîné'].
past_participle('Voir') --> ['Vu'].
past_participle('Arrêter') --> ['Arrêté'].
past_participle('Arrêter') --> ['Arrêtée'].
past_participle('Heurter') --> ['Heurté'].
past_participle('Présenter') --> ['Présente'].
past_participle(aborder) --> [abordée].
past_participle(abîmer) --> [abîmé].
past_participle(accentuer) --> [accentué].
past_participle(accidenter) --> [accidenté].
past_participle(accrocher) --> [accroché].
past_participle(aller) --> [allé].
past_participle(amorcer) --> [amorcé].
past_participle(aménager) --> [aménagé].
past_participle(apprécier) --> [apprécié].
past_participle(appuyer) --> [appuyé].
past_participle(arriver) --> [arrivé].
past_participle(arriver) --> [arrivée].
past_participle(arrêter) --> [arrêté].
past_participle(arrêter) --> [arrêtée].
past_participle(arrêter) --> [arrêtées].
past_participle(arrêter) --> [arrêtés].
past_participle(barrer) --> [barrée].
past_participle(braquer) --> [braqué].
past_participle(briser) --> [brisé].
past_participle(buter) --> [buté].
past_participle(buter) --> [butées].
past_participle(caler) --> [calé].
past_participle(causer) --> [causé].
past_participle(changer) --> [changé].
past_participle(citer) --> [cité].
past_participle(clouter) --> [clouté].
past_participle(cogner) --> ['"',cogné,'"'].
past_participle(cogner) --> [cogné].
past_participle(commencer) --> [commencé].
past_participle(commettre) --> [commis].
past_participle(constater) --> [constaté].
past_participle(contenter) --> [contentée].
past_participle(continuer) --> [continué].
past_participle(couper) --> [coupé].
past_participle(couper) --> [coupée].
past_participle(croire) --> [cru].
past_participle(céder) --> [cédé].
past_participle(demander) --> [demandé].
past_participle(dire) --> [dit].
past_participle(doubler) --> [doublé].
past_participle(déclarer) --> [déclaré].
past_participle(démarrer) --> [démarré].
past_participle(dépasser) --> [dépassé].
past_participle(déporter) --> [déporté].
past_participle(déraper) --> [dérapé].
past_participle(devoir) --> [dû].
past_participle(effectuer) --> [effectué].
past_participle(empiéter) --> [empiété].
past_participle(empêcher) --> [empêché].
past_participle(enclencher) --> [enclenché].
past_participle(endommager) --> [endommagé].
past_participle(endommager) --> [endommagée].
past_participle(enfoncer) --> [enfoncé].
past_participle(enfoncer) --> [enfoncée].
past_participle(engager) --> [engagé].
past_participle(engager) --> [engagée].
past_participle(entendre) --> [entendu].
past_participle(entraîner) --> [entraîné].
past_participle(essayer) --> [essayé].
past_participle(faire) --> [fait].
past_participle(finir) --> [fini].
past_participle(finir) --> [finit]. % Wrong! but occurs in the corpus
past_participle(forcer) --> [forcé].
past_participle(franchir) --> [franchi].
past_participle(freiner) --> [freiné].
past_participle(frotter) --> [frotté].
past_participle(garer) --> [garé].
past_participle(glisser) --> [glissé].
past_participle(heurter) --> [heurté].
past_participle(heurter) --> [heurtée].
past_participle(heurter) --> [heurtés].
past_participle(immatriculer) --> [immatriculée].
past_participle(immobiliser) --> [immobilisé].
past_participle(indiquer) --> [indiqué].
past_participle(inexpliquer) --> [inexpliquée].
past_participle(interdire) --> [interdit].
past_participle(lever) --> [levé].
past_participle(limiter) --> [limitée].
past_participle(lâcher) --> [lâché].
past_participle(masquer) --> [masquée].
past_participle(matérialiser) --> [matérialisées].
past_participle(mettre) --> [mis].
past_participle(mouiller) --> [mouillée].
past_participle(nommer) --> [nommé].
past_participle(ordonner) --> [ordonné].
past_participle(oublier) --> [oublié].
past_participle(ouvrir) --> [ouvert].
past_participle(ouvrir) --> [ouverte].
past_participle(passer) --> [passé].
past_participle(percuter) --> [percuté].
past_participle(percuter) --> [percutées].
past_participle(percuter) --> [percutés].
past_participle(perdre) --> [perdu].
past_participle(perturber) --> [perturbée].
past_participle(pointiller) --> [pointillée].
past_participle(pousser) --> [poussé].
past_participle(prendre) --> [pris].
past_participle(produire) --> [produit].
past_participle(projeter) --> [projeté].
past_participle(provoquer) --> [provoqué].
past_participle(pouvoir) --> [pu].
past_participle(quitter) --> [quitté].
past_participle(rabattre) --> [rabattu].
past_participle(rajouter) --> [rajouté].
past_participle(ranger) --> [rangé].
past_participle(rapprocher) --> [rapprochées].
past_participle(rayer) --> [rayé].
past_participle(reconnaitre) --> [reconnu].
past_participle(reculer) --> [reculé].
past_participle(redémarrer) --> [redémarré].
past_participle(refuser) --> [refusée].
past_participle(rejoindre) --> [rejoint].
past_participle(remplir) --> [rempli].
past_participle(rendre) --> [rendu].
past_participle(rendre) --> [rendus].
past_participle(repartir) --> [reparti].
past_participle(représenter) --> [représentée].
past_participle(respecter) --> [respecté].
past_participle(ressentir) --> [ressenti].
past_participle(retrouver) --> [retrouvé].
past_participle(retrouver) --> [retrouvée].
past_participle(recevoir) --> [reçu].
past_participle(réaccélérer) --> [réaccéléré].
past_participle(répondre) --> [répondu].
past_participle(réserver) --> [réservée].
past_participle(réussir) --> [réussi].
past_participle(serrer) --> [serré].
past_participle(serrer) --> [serrée].
past_participle(signer) --> [signé].
past_participle(situer) --> [située].
past_participle(stationner) --> [stationné].
past_participle(stopper) --> [stoppé].
past_participle(subir) --> [subi].
past_participle(suffir) --> [suffi].
past_participle(surprendre) --> [surpris].
past_participle(surprendre) --> [surprise].
past_participle(séparer) --> [séparé].
past_participle(taper) --> [tapé].
past_participle(tomber) --> [tombé].
past_participle(toucher) --> [touché].
past_participle(toucher) --> [touchée].
past_participle(tourner) --> [tourné].
past_participle(traverser) --> [traversé].
past_participle(venir) --> [venu].
past_participle(venir) --> [venue].
past_participle(vouloir) --> [voulu].
past_participle(voir) --> [vu].
past_participle(échanger) --> [échangé].
past_participle(éjecter) --> [éjecté].
past_participle(établir) --> [établi].
past_participle(éternuer) --> [éternué].
past_participle(éviter) --> [évité].
past_participle(éviter) --> [évitée].
gerund('vouloir') --> ['Voulant'].
gerund('serrer') --> ['Serrant'].
gerund('surgir') --> ['Surgissant'].
gerund('venir') --> ['Venant'].
gerund('circuler') --> ['Circulant'].
gerund('sortir') --> ['Sortant'].
gerund('rouler') --> ['Roulant'].
gerund('revenir') --> ['Revenant'].
gerund('penser') --> ['Pensant'].
gerund('arriver') --> ['Arrivant'].
gerund('conduire') --> ['Conduisant'].
gerund('voir') --> ['Voyant'].
gerund(aborder) --> [abordant].
gerund(abîmer) --> [abîmant].
gerund(aller) --> [allant].
gerund(apprêter) --> [apprêtant].
gerund(arriver) --> [arrivant].
gerund(attendre) --> [attendant].
gerund(aveugler) --> [aveuglant].
gerund(circuler) --> [circulant].
gerund(clignoter) --> [clignotant].
gerund(doubler) --> [doublant].
gerund(dépasser) --> [dépassant].
gerund(déporter) --> [déportant].
gerund(désirer) --> [désirant].
gerund(emboîter) --> [emboîtant].
gerund(enfoncer) --> [enfonçant].
gerund(entraîner) --> [entraînant].
gerund(expliquer) --> [expliquant].
gerund(faire) --> [faisant].
gerund(franchir) --> [franchissant].
gerund(heurter) --> [heurtant].
gerund(laisser) --> [laissant].
gerund(obliger) --> [obligeant].
gerund(passer) --> [passant].
gerund(penser) --> [pensant].
gerund(prendre) --> [prenant].
gerund(projeter) --> [projetant].
gerund(provenir) --> [provenant].
gerund(provoquer) --> [provoquant].
gerund(précéder) --> [précédant].
gerund(rapprocher) --> [rapprochant].
gerund(reculer) --> [reculant].
gerund(regarder) --> [regardant].
gerund(rendre) --> [rendant].
gerund(respecter) --> [respectant].
gerund(rouler) --> [roulant].
gerund(sortir) --> [sortant].
gerund(toucher) --> [touchant].
gerund(tourner) --> [tournant].
gerund(trouver) --> [trouvant].
gerund(venir) --> [venant].
gerund(virer) --> [virant].
gerund(vouloir) --> [voulant].
aux_conj_gerund_be(être) --> ['Etant'].
aux_conj_gerund_be(être) --> [étant]. %%%%%%%
aux_conj_gerund_have('Ayant') --> ['Ayant'].
aux_conj_gerund_have(ayant) --> [ayant].
aux_conj_gerund(X) --> aux_conj_gerund_be(X).
aux_conj_gerund(X) --> aux_conj_gerund_have(X).
multiword(à_ce_qu) --> [à, ce, qu], [''''].
multiword('Alors_que') --> ['Alors', que].
multiword(alors_que) --> [alors, que].
multiword(avant_que) --> [avant, que].
multiword('Av') --> ['Av', '.'].
multiword('Bien_entendu') --> ['Bien', entendu].
multiword(ave) --> [ave, '.'].
multiword(autoroute_A1) --> [autoroute, 'A1'].
multiword(au_loin) --> [au, loin].
multiword(au_moment_de) --> [au, moment, de].
multiword(au_moment_du) --> [au, moment, du].
multiword(à_droite) --> [à, droite].
multiword(à_gauche) --> [à, gauche].
multiword('Beaumont_sur_Oise') --> ['Beaumont', sur, 'Oise'].
multiword('Blanc_Mesnil') --> ['Blanc', 'Mesnil'].
multiword('Camille_Claudel') --> ['Camille', 'Claudel'].
multiword(celle_ci) --> [celle, '-', ci].
multiword(celui_ci) --> [celui, '-', ci].
multiword(ce_qui) --> [ce, qui].
multiword(ce_qu) --> [ce, qu], [''''].
multiword('Celui_ci') --> ['Celui', '-', ci].
multiword('C_Delon') --> ['C', '.', 'Delon'].
multiword('D_après') --> ['D'], [''''], [après].
multiword(en_face) --> [en, face].
multiword('E_Quinet') --> ['E', '.', 'Quinet'].
multiword('FG_Lorca') --> ['F', '.', 'G', '.', 'Lorca'].
multiword(du_tout) --> [du, tout].
multiword(face_au) --> [face, au].
multiword(faire_le_tour) --> [faire, le, tour].
multiword(hors_de) --> [hors, de].
multiword('Jouy_le_Moutier') --> ['Jouy', le, 'Moutier'].
multiword(juste_après) --> [juste, après].
multiword(juste_avant) --> [juste, avant].
multiword(la_mienne) --> [la, mienne].
multiword(le_sien) --> [le, sien].
multiword(l_une_des) --> [l], [''''], [une], [des].
multiword('Lors_d') --> ['Lors', d], [''''].
multiword(lors_du) --> [lors], [du].
multiword('P_Doumer') --> ['P', '.', 'Doumer'].
multiword(par_conséquent) --> [par, conséquent].
multiword(pare_chocs) --> [pare, '-', choc].
multiword(pare_chocs) --> [pare, '-', chocs].
multiword(pare_chocs) --> [pare, choc].
multiword(beaucoup_de) --> [beaucoup, de].
%multiword(pas_de) --> [pas], [de].
multiword('Pas_de') --> ['Pas'], [de].
multiword(plus_de) --> [plus, de].
multiword(près_de) --> [près, de].
multiword(rond_point) --> [rond, '-', point].
multiword(rond_point) --> [rond, point].
multiword('Saint_Ouen') --> ['Saint', '-', 'Ouen'].
multiword('St_Brice') --> ['St', 'Brice'].
multiword('St_Martin_du_Tertre') --> ['St', 'Martin', du, 'Tertre'].
multiword(si_bien_que) --> [si, bien, que].
multiword(semi_remorque) --> [semi, '-', remorque].
multiword(station_service) --> [station, service].
multiword(sans_doute) --> [sans, doute].
multiword(sous_sol) --> [sous, '-', sol].
multiword(tout_droit) --> [tout, droit].
multiword(toute_la) --> [toute, la].
multiword(tout_le) --> [tout, le].
multiword(tout_à_fait) --> [tout, à, fait].
multiword(véhicules_A_et_B) --> [véhicules, 'A', et, 'B'].
multiword(véhicule_a) --> [veh, 'A'], {!}.
multiword(véhicule_a) --> [première, voiture], {!}. % ajout
multiword(véhicule_a) --> [véhicule, 'A'], {!}.
multiword(véhicule_a) --> [voiture, 'A'], {!}.
multiword(véhicule_b) --> ['Véhicule', 'B'], {!}.
multiword(véhicule_b) --> [véhicule, 'B'], {!}.
multiword(véhicule_b) --> [deuxième, voiture], {!}. % ajout
multiword(véhicule_b) --> [voiture, 'B'], {!}.
multiword(véhicule_b) --> [voiture, '"', 'B', '"'], {!}.
multiword(véhicule_c) --> ['3ième',véhicule], {!}.
multiword(véhicule_c) --> [véhicule, 'C'], {!}.
multiword('A_et_B') --> ['A', et, 'B'].
multiword(camion_de_dépannage) -->[camion, de, dépannage].% ajout
multiword(à_peine) --> [à, peine].
multiword(elle) --> [elle,-,même].%ajout
multiword('René_Coty') --> ['René', 'Coty'].
multiword('Gal_De_Gaulle') --> ['Gal', 'De', 'Gaulle'].
multiword('Président_Wilson') --> ['Président', 'Wilson'].
multiword('Villiers_Adam') --> ['Villiers', '-','Adam'].
multiword('Roger_Levanneur') --> ['Roger', 'Levanneur'].
multiword('Pierre_Curie') --> ['Pierre', 'Curie'].
multiword('St_Prix') --> ['St', 'Prix'].
multiword('gd_Leclerc') --> ['gd', 'Leclerc'].
multiword('Dct_Leray') --> ['Dct', 'Leray'].
multiword('Maurice_Berteaux') --> ['Maurice', 'Berteaux'].
% multiword('Renault_21') --> ['Renault', 21].
%multiword('Ford') --> ['Ford', sierra]. % ajout
multiword('R21') --> ['Renault', 21]. % ajout
multiword('205') --> ['Peugeot', 205].
multiword('Renée_Briand') --> ['Renée', 'Briand'].
multiword(X) --> date_value(X).
multiword(X) --> distance(X).
multiword(X) --> time_value(X).
multiword(X) --> number_plate(X).
%multiword(speed_value) --> speed(X).
number_plate(no_immatriculation) -->
[Number], [A], [Dept],
{number(Number), name(A, L), length(L, N), (N =:= 2; N =:= 3), number(Dept),
Dept < 100}.
date_value(date_value) -->
[Day, '/', Month, '/', Year],
{number(Day), number(Month), number(Year)}.
date_value(date_value) -->
[Day, '-', Month, '-', Year],
{number(Day), number(Month), number(Year)}.
date_value(date_value) -->
[Day, '-', Month, '/', Year],
{number(Day), number(Month), number(Year)}.
time_value(time_value) -->
[X],
{name(X, L), reverse(L, [h | LR]), number(LR)}.
time_value(time_value) -->
[Hour, h, Minutes],
{number(Hour), number(Minutes)}.
speed(LS) --> adv(RB1), speed_val(S), adv(RB2), {append([RB1 | S], RB2, LS)}.
speed([RB | S]) --> adv(RB), speed_val(S).
speed(LS) --> speed_val(S), adv(RB), {append(S, RB, LS)}.
speed(S) --> speed_val(S).
speed_val([Number, kmh]) -->
[Number], [km], ['/'], [h],
{number(Number)}.
speed_val([Number, kmh]) -->
[Number], ['Km'], ['/'], [h],
{number(Number)}.
distance(distance_value) -->
[Number], [mètres],
{number(Number)}.
/*multiword() --> [].
*/
aux_conj_have('Ai') --> ['Ai'].
aux_conj_have(a) --> [a].
aux_conj_have(ai) --> [ai].
aux_conj_have(ait) --> [ait].
aux_conj_have(aurait) --> [aurait].
aux_conj_have(avaient) --> [avaient].
aux_conj_have(avais) --> [avais].
aux_conj_have(avait) --> [avait].
aux_conj_have(avons) --> [avons].
aux_conj_have(ont) --> [ont].
aux_conj_have(eu) --> [eu].
aux_conj_have(eut) --> [eut].
aux_conj_be(est) --> [est].
aux_conj_be(étaient) --> [étaient].
aux_conj_be(étais) --> [étais].
aux_conj_be(était) --> [était].
aux_conj_be(étions) --> [étions].
aux_conj_be(été) --> [été].
aux_conj_be(fut) --> [fut]. % changement
aux_conj_be(soit) --> [soit].
aux_conj_be(sommes) --> [sommes].
aux_conj_be(sont) --> [sont].
aux_conj_be(suis) --> [suis].
aux_conj(X) --> aux_conj_have(X).
aux_conj(X) --> aux_conj_be(X).
aux_conj(X) --> aux_conj_gerund(X).
tensed_verb(aborder) --> [abordais].
tensed_verb(aller) --> [allais].
tensed_verb(aller) --> [allait].
tensed_verb(amorcer) --> [amorcions].
tensed_verb(apprêter) --> [apprêtais].
tensed_verb(apprêter) --> [apprêtait].
tensed_verb(arriver) --> [arrivais].
tensed_verb(arriver) --> [arrivait].
tensed_verb(atteindre) --> [atteint].
tensed_verb(attendre) --> [attendais].
tensed_verb(avèrer) --> [avère].
tensed_verb(basculer) --> [bascula].
tensed_verb(casser) --> [cassait].
tensed_verb(circuler) --> [circulais].
tensed_verb(circuler) --> [circulait].
tensed_verb(clignoter) --> [clignotais].
tensed_verb(commençer) --> [commençais].
tensed_verb(continuer) --> [continue].
tensed_verb(céder) --> [cédez].
tensed_verb(descendre) --> [descendais].
tensed_verb(devoir) --> [devais].
tensed_verb(démarrer) --> [démarrais].
tensed_verb(démarrer) --> [démarrait].
tensed_verb(dépasser) --> [dépassait].
tensed_verb(déraper) --> [dérape].
tensed_verb(désirer) --> [désirais].
tensed_verb(désirer) --> [désire].
tensed_verb(effectuer) --> [effectue].
tensed_verb(empiéter) --> [empiétait].
tensed_verb(engager) --> [engageais].
tensed_verb(estimer) --> [estimais].
tensed_verb(expliquer) --> [explique].
tensed_verb(finir) --> [finit].
tensed_verb(faire) --> [fis].
tensed_verb(faire) --> [fit].
tensed_verb(fonctionner) --> [fonctionnaient].
tensed_verb(freiner) --> [freinais].
tensed_verb(freiner) --> [freinerait].
tensed_verb(glisser) --> [glissa].
tensed_verb(heurter) --> [heurtais].
tensed_verb(heurter) --> [heurte].
tensed_verb(ignorer) --> [ignore].
tensed_verb(indiquer) --> [indiquaient].
tensed_verb(inverser) --> [inversait].
tensed_verb(laisser) --> [laissait].
tensed_verb(laisser) --> [laisserait].
tensed_verb(maintenir) --> [maintiens].
tensed_verb(obliger) --> [obligeait].
tensed_verb(passer) --> [passait].
tensed_verb(percuter) --> [percuta].
tensed_verb(percuter) --> [percutais].
tensed_verb(percuter) --> [percute].
tensed_verb(permettre) --> [permettaient].
tensed_verb(pleuvoir) --> [pleuvait].
tensed_verb(pouvoir) --> [pourrait].
tensed_verb(pouvoir) --> [pouvais].
tensed_verb(pouvoir) --> [pouvait].
tensed_verb(prendre) --> [prend].
tensed_verb(précéder) --> [précédait].
tensed_verb(pouvoir) --> [pus].
tensed_verb(rabattre) --> [rabattais].
tensed_verb(ralentir) --> [ralentis].
tensed_verb(reculer) --> [reculais].
tensed_verb(reculer) --> [reculait].
tensed_verb(redémarrer) --> [redémarrais].
tensed_verb(redémarrer) --> [redémarre].
tensed_verb(refuser) --> [refuse].
tensed_verb(regarder) --> [regardais].
tensed_verb(regarder) --> [regardait].
tensed_verb(rendre) --> [rendais].
tensed_verb(rentrer) --> [rentrais].
tensed_verb(rentrer) --> [rentrions].
tensed_verb(rouler) --> [roulaient].
tensed_verb(rouler) --> [roulais].
tensed_verb(rouler) --> [roulait].
tensed_verb(rouler) --> [roulions].
tensed_verb(résider) --> [réside].
tensed_verb(signaler) --> [signale].
tensed_verb(slalomer) --> [slalomait].
tensed_verb(sortir) --> [sortais].
tensed_verb(sortir) --> [sortait].
tensed_verb(souhaiter) --> [souhaitait].
tensed_verb(stationner) --> [stationnaient].
tensed_verb(stationner) --> [stationnais].
tensed_verb(stationner) --> [stationnait].
tensed_verb(suivre) --> [suivait].
tensed_verb(surgir) --> [surgit].
tensed_verb(tenir) --> [tenais].
tensed_verb(tenir) --> [tiens].
tensed_verb(tourner) --> [tourna].
tensed_verb(tourner) --> [tournait].
tensed_verb(tourner) --> [tournions].
tensed_verb(traverser) --> [traversait].
tensed_verb(trouver) --> [trouvais].
tensed_verb(trouver) --> [trouvait].
tensed_verb(trouver) --> [trouve].
tensed_verb(venir) --> [venaient].
tensed_verb(venir) --> [venais].
tensed_verb(venir) --> [venait].
tensed_verb(virer) --> [virais].
tensed_verb(vouloir) --> [voulait].
tensed_verb(voir) --> [voyais].
tensed_verb(être) --> [étais]. % rajout ajout
tensed_verb(X) --> aux_conj(X).
/*
multiword(ntexte) -->
['Texte'], [X], {!}.
multiword(Name) -->
['M.'], [X],
{name('M_', L1), name(X, L2),
append(L1, L2, LName), name(Name, LName)}.
multiword(Value) -->
[X], ['DM'],
{name('DM_', L1),
number(X), name(X, L2),
append(L1, L2, LValue), name(Value, LValue)}.
*/
--> ['Beaumont', sur, 'OiCarsim3/sortie.pl 0100644 0001756 0001774 00000007436 07400724731 0014244 0 ustar 00pierre cs 0000350 0000120 % ce fichier permet de lancer le programme sur tous les fichiers texte
dynamic :- textname/1.
:-[extract_info].
% ef(+FichierConstat).
ef(X) :- ecrit_fichiers(X).
ecrit_fichiers(Text) :-
write(Text), nl,
assert(n_id(0)),
asserta(text_name(Text)),
i, % trouve tout !
concat_atom([Text, '.ad'],' ', Out),
nl, write( 'écriture du fichier ...'),
write(Text), nl,
tell(Out),
write_statics,
write_dynamics,
write_accidents,
% il reste a ecrire les collisions
told,!,
write('Terminé '), nl,
retract(text_name(Text)),
abolish_dynamic_preds.
ecrit_fichiers(Text) :-
nl, write('échec lors de la creation de '), write(Text),
nl.
menu :-
nl, write('MENU '), nl,
write(' choisir un texte : ie. '), nl,
write(' trouver les infos : i.'), nl,
write(' sortir un fichier : ef(Nomdutexte). '), nl,
nl.
stat :-
tous_les_textes(A),
compile_corpus(A).
compile_corpus([Text|Rest]) :-
ecrit_fichiers(Text),
compile_corpus(Rest).
compile_corpus([]).
stat_chocs :-
tous_les_textes(A),
tell('statistiques chocs.txt'),
chocs_corpus(A, 0, Nchocs),
write('J''ai trouvé '),write(Nchocs),write(' chocs dans les textes'),nl,
told,
write('J''ai trouvé '),write(Nchocs),write(' chocs dans les textes'),nl.
chocs_corpus([Text|Rest],N, Nchocs) :-
asserta(text_name(Text)),
write_ln(Text),
trouve_tout( _, SortieChocs, _ ),
%write_ln(ListeActeurs),
write_ln(SortieChocs),
augmente_stats(N,M,SortieChocs),
chocs_corpus(Rest,M, Nchocs).
chocs_corpus([],Nchocs,Nchocs).
stat_events :-
tous_les_textes(A),
tell('statistiques events.txt'),
events_corpus(A, 0, Nevents),
write('J''ai trouvé '),write(Nevents),write(' events dans les textes'),nl,
told,
write('J''ai trouvé '),write(Nevents),write(' events dans les textes'),nl.
events_corpus([Text|Rest],N, Nevents) :-
asserta(text_name(Text)),
write_ln(Text),
trouve_tout( _, _, Sortieevents),
%write_ln(ListeActeurs),
write_ln(Sortieevents),
augmente_stats(N,M,Sortieevents),
events_corpus(Rest,M, Nevents).
events_corpus([],Nevents,Nevents).
augmente_stats(N,N,[]). % augmentation des stats si la liste n'est pas vide
augmente_stats(N,M,_):- M is N + 1.
tous_les_textes([/*
'texte a1.txt','texte a2.txt',
'texte a3.txt','texte a4.txt',
'texte a5.txt',
%
'texte a7.txt','texte a8.txt',
'texte a9.txt','texte a10.txt',
'texte a11.txt','texte a12.txt',
'texte a13.txt','texte a14.txt',
'texte a15.txt',%
'texte a17.txt',
'texte b1.txt','texte b1-bis.txt',
'texte b2.txt',%'texte b2-bis.txt',
'texte b3.txt','texte b4.txt',
'texte b5.txt','texte b6.txt',
'texte b7.txt','texte b8.txt',
'texte b9.txt',
'texte b10.txt','texte b11.txt',
'texte b12.txt','texte b13.txt',
'texte b14.txt','texte b15.txt',
'texte b17.txt',
'texte b18.txt','texte b19.txt',
'texte b20.txt','texte b21.txt',
'texte b22.txt','texte b23.txt',
'texte b24.txt','texte b25.txt',
'texte b26.txt',
'texte b28.txt','texte b29.txt',
'texte b30.txt','texte b31.txt',
'texte b32.txt','texte b33.txt',
'texte b34.txt',
'texte b36.txt',
'texte b38.txt','texte b39.txt',
'texte b40.txt','texte b41.txt',
'texte b43.txt',
'texte b44.txt','texte b45.txt',
'texte b46.txt','texte b47.txt',
'texte b48.txt','texte b49.txt',
'texte b50.txt',
'texte b52.txt','texte b53.txt',
'texte b54.txt','texte b55.txt',
'texte b56.txt','texte b57.txt',
'texte b60.txt','texte b61.txt',
'texte b62.txt','texte b63.txt',
'texte b65.txt',*/
'texte b68.txt','texte b69.txt',
'texte b70.txt','texte b71.txt',
'texte b72.txt','texte b73.txt',
'texte a6.txt',
'texte a16.txt','texte b37.txt',
'texte b58.txt','texte b35.txt'
%'texte b16.txt',%'texte b27.txt','texte b66.txt',
]).
:- menu.
Carsim3/statics.pl 0100644 0001756 0001774 00000014540 07400724731 0014403 0 ustar 00pierre cs 0000350 0000120 % DÉTECTION DES OBJETS STATIQUES
% à récrire en utilisant des DCG
% find_statics(+ReportText) extracts static objects
% from the report
find_statics(ReportText, StaticObjects) :-
parse_all_text(ReportText, ParsedText),
tokenize_all_text(ReportText, TokenizedText),
find_road(TokenizedText, ParsedText, Roads),
find_stopsign(TokenizedText, ParsedText, StopSign),
find_trafficlight(TokenizedText, ParsedText, Lights),
find_crossing(TokenizedText, Crossing),
find_arbre(TokenizedText, Trees),
find_barriere(TokenizedText, Walls),
flatten([Roads, StopSign, Lights, Crossing, Trees, Walls], StaticObjects),
!.
% Extrait le type de route
find_road(TokenizedText, ParsedText, Roads) :-
find_carrefour(TokenizedText, ParsedText, Roads).
find_road(TokenizedText, ParsedText, Roads) :-
find_virage(TokenizedText, ParsedText, Roads).
% ligne droite par défaut pour les types de routes
find_road(_, _, [static('ROAD', [straightroad])]) :-
write('ligne droite'), nl.
% recherche par mot
find_carrefour(TokenizedText, _, [static('ROAD', [crossroad])]) :-
member(Sentence, TokenizedText),
hyp(Carrefour, carrefour),
member(Carrefour, Sentence),
write('carrefour'), nl.
%recherche par action
find_carrefour(TokenizedText, ParsedText, [static('ROAD', [crossroad])]) :-
member(Sentence, ParsedSentence, TokenizedText, ParsedText),
\+ member(virage, Sentence),
hyp(Tourner, tourner),
member(vg(V), ParsedSentence),
member(Tourner, V),
write('tourner, carrefour'), nl.
%recherche par action
find_carrefour(TokenizedText, ParsedText, [static('ROAD', [crossroad])]) :-
member(Sentence, ParsedSentence, TokenizedText, ParsedText),
\+ member(virage, Sentence),
hyp(Tourner, tourner),
member(infg(V), ParsedSentence),
member(Tourner, V),
write('tourner, carrefour'), nl.
%recherche par action
find_carrefour(TokenizedText, ParsedText, [static('ROAD', [crossroad])]) :-
member(Sentence, ParsedSentence, TokenizedText, ParsedText),
\+ member(virage, Sentence),
hyp(Sortir, sortir),
member(vg(V), ParsedSentence),
member(Sortir, V),
write('tourner, carrefour'), nl.
%recherche par action
find_carrefour(TokenizedText, ParsedText, [static('ROAD', [crossroad])]) :-
member(Sentence, ParsedSentence, TokenizedText, ParsedText),
\+ member(virage, Sentence),
hyp(Sortir, sortir),
member(infg(V), ParsedSentence),
member(Sortir, V),
write('tourner, carrefour'), nl.
find_virage(TokenizedText, ParsedText, [static('ROAD', [turn_left])]) :-
contains_virage(TokenizedText),
member(ParsedSentence, ParsedText),
member(pg([_, gauche]), ParsedSentence),
write('virage à gauche'), nl.
find_virage(TokenizedText, ParsedText, [static('ROAD', [turn_right])]) :-
contains_virage(TokenizedText),
member(ParsedSentence, ParsedText),
member(pg([_, droite]), ParsedSentence),
write('virage à droite'), nl.
% virage à gauche par défaut pour les virages
find_virage(TokenizedText, _, [static('ROAD', [turn_left])]) :-
contains_virage(TokenizedText),
write('virage à gauche par défaut'), nl.
contains_virage(TokenizedText) :- % test si on a un virage
member(Sentence, TokenizedText),
hyp(Virage, virage),
member(Virage, Sentence).
% Extrait les panneaux stop
find_stopsign(TokenizedText, _, [static('STOPSIGN', [-5, 5])]) :-
member(Sentence, TokenizedText),
hyp(Stop, stop),
member(Stop, Sentence),
write(stop), nl.
find_stopsign(_, _, []).
% Extrait les feux tricolores
find_trafficlight(TokenizedText, ParsedText, Lights) :-
member(Sentence, TokenizedText),
feu(Feu),
contains_word(Sentence, Feu),
find_redlight(TokenizedText, RedLight),
find_greenlight(TokenizedText, GreenLight),
find_orangelight(TokenizedText, ParsedText, AmberLight),
find_inactivelight(TokenizedText, ParsedText, InactiveLight),
append(RedLight, GreenLight, Light1),
append(AmberLight, InactiveLight, Light2),
append(Light1, Light2, Lights).
find_trafficlight(_, _, []).
% Extrait les feux rouges
find_redlight(TokenizedText, [static('LIGHT',[trafficlight, red, -5, 5])]) :-
is_red(TokenizedText),
\+ is_green(TokenizedText),
write('feu rouge'), nl.
find_redlight(_, []).
% Extrait les feux verts
find_greenlight(TokenizedText, [static('LIGHT',[trafficlight, green, -5, 5])]) :-
is_green(TokenizedText),
\+ is_orange(TokenizedText),
write('feu vert'), nl.
find_greenlight(_, []).
% Extrait les feux oranges
find_orangelight(TokenizedText, ParsedText, [static('LIGHT', [trafficlight, orange, -5, 5])]) :-
is_orange(TokenizedText),
\+ is_red(TokenizedText),
\+ is_inactive(TokenizedText, ParsedText),
write('feu orange'), nl.
find_orangelight(_, _, []).
% Extrait les feux tricolores ne fonctionnant pas : clignotants ou éteints
find_inactivelight(TokenizedText, ParsedText, [static('LIGHT', [trafficlight, inactive, -5, 5])]) :-
is_inactive(TokenizedText, ParsedText),
write('feu hors-fonctionnement'),nl.
find_inactivelight(_, _, []).
% recherche des couleurs
is_red(TokenizedText) :-
member(Sentence, TokenizedText),
rouge(Rouge),
contains_word(Sentence, Rouge).
is_green(TokenizedText) :-
member(Sentence, TokenizedText),
vert(Vert),
contains_word(Sentence, Vert).
is_orange(TokenizedText) :-
member(Sentence, TokenizedText),
orange(Orange),
contains_word(Sentence, Orange).
is_inactive(TokenizedText, _) :-
member(Sentence, TokenizedText),
flashing(Clignotant),
contains_word(Sentence, Clignotant).
is_inactive(_, ParsedText) :-
member(ParsedSentence, ParsedText),
member(pg([hors, fonctionnement]), ParsedSentence).
% Extrait les passages cloutés
find_crossing(TokenizedText, [static('CROSSING', [-5, 0])]) :-
member(Sentence, TokenizedText),
hyp(Crossing, passage_cloute),
member(Crossing, Sentence),
write('passage clouté'),nl.
find_crossing(_, []).
% Extrait les arbres
find_arbre(TokenizedText, [static('TREE', [tree, -4, 4])]) :-
member(Sentence, TokenizedText),
hyp(Arbre, arbre),
member(Arbre, Sentence),
write(arbre), nl.
find_arbre(_, []).
find_barriere(TokenizedText, [static('TREE', [Wall, 4, 4])]) :-
member(Sentence, TokenizedText),
hyp(Wall, road_obstacle),
member(Wall, Sentence),
write(barrière), nl.
find_barriere(_, []).
% member/4 accesses the sentences and parsed sentence in the same order
member(FS, FPS, [FS | _], [FPS | _]).
member(FS, FPS, [_ | S], [_ | PS]) :-
member(FS, FPS, S, PS).
gauche par défaut pour les virages
find_virage(TokenizedText, _, [static('ROAD', [turn_left])]) :-
contains_virage(TokenizedText),
write('virage à gauche pCarsim3/tokenize.pl 0100644 0001756 0001774 00000006475 07400724731 0014571 0 ustar 00pierre cs 0000350 0000120 % Tokenize.pl contains predicates to read the corpus, to parse the XML code,
% to tokenize the words, and to detect sentences.
% Created and modified by Pierre Nugues
% Read the reports
read_corpus(CorpusName, CorpusTokens) :-
read_file(CorpusName, CorpusChar),
tokens(CorpusTokens, CorpusChar, []).
% Parses the XML-like syntactic description of the corpus
parse_xml_corpus(Corpus) -->
['<', 'CORPUS', '>'],
reports(Corpus),
['<', '/', 'CORPUS', '>'].
reports([Report]) -->
report(Report).
reports(Corpus) -->
report(Report),
reports(RestReports),
{append([Report], RestReports, Corpus)}.
report([ReportNumber | Body]) -->
['<', 'REPORT', 'ID', '=', '"'],
report_number(ReportNumber),
['"', '>'],
report_body(Body),
['<', '/', 'REPORT', '>'].
report_number([ReportID]) -->
[ReportID].
report_number([FirstID | RestID]) -->
[FirstID],
{FirstID \== '"'},
report_number(RestID).
report_body([Token | RestBody]) -->
[Token],
{Token \== '<'},
report_body(RestBody).
report_body([]) --> [].
tokens(Tokens) --> blank, {!}, tokens(Tokens).
tokens([FirstT | Tokens]) --> token(FirstT), {!}, tokens(Tokens).
tokens([]) --> [].
% A blank is a white space or a control character
blank --> [B], {B =< 32, !}.
% A token is a sequence of alphanumeric characters
% or another symbol
token(Word) --> alphanumerics(List), {name(Word, List), !}.
token(Symbol) --> other(CSymbol), {name(Symbol, [CSymbol]), !}.
% A sequence of alphanumerics is an alphanumeric character
% followed by the rest of alphanumerics or a
% single alphanumeric character.
alphanumerics([L | LS]) --> alphanumeric(L), alphanumerics(LS).
alphanumerics([L]) --> alphanumeric(L).
% Here comes the definition of alphanumeric characters: digits,
% upper-case letters without accent, lower-case letters without
% accent, and accented characters. Here we only consider
% letters common in French and German
% digits
alphanumeric(D) --> [D], { 48 =< D, D =< 57, !}.
% upper-case letters without accent
alphanumeric(L) --> [L], {65 =< L, L =< 90, !}.
% lower-case letters without accent
alphanumeric(L) --> [L], {97 =< L, L =< 122, !}.
% accented characters
alphanumeric(L) --> [L], {name(A, [L]), accented(A), !}.
accented(L) :-
member(L, [à, â, ä, æ, ç, é, è, ê, ë, î, ï, ô, ö, 'œ', ß, ù, û, ü, ÿ,
'À', 'Â', 'Ä', 'Æ', 'Ç', 'É', 'È', 'Ê', 'Ë', 'Î', 'Î', 'Ï', 'Ô', 'Ö',
'Œ', 'Ù', 'Û', 'Ü', 'Ÿ']).
% All other symbols come here
other(39) --> [L], {(L =:= 180; L =:= 146), !}. % Specific processing of
% slanted apostrophs replaced by
% straight ones
other(Symbol) --> [Symbol], {!}.
sentences([S | RS]) -->
words_of_a_sentence(S),
sentences(RS).
sentences([S]) --> % The last sentence (punctuated)
words_of_a_sentence(S).
sentences([S]) --> % Last sentence (no final punctuation)
words_without_punctuation(S).
words_of_a_sentence([P]) -->
end_punctuation(P).
words_of_a_sentence([W | RS]) -->
word(W),
words_of_a_sentence(RS).
words_without_punctuation([W | RS]) -->
word(W),
words_without_punctuation(RS).
words_without_punctuation([W]) --> [W].
word(W) --> [W].
end_punctuation(P) --> [P], {end_punctuation(P), !}.
/*end_punctuation(P) :-
member(P, ['.', ';', ':', '?', '!']).
*/
end_punctuation(P) :-
member(P, ['.', ';', '?', '!']).
Carsim3/utilities.pl 0100644 0001756 0001774 00000002604 07400724732 0014743 0 ustar 00pierre cs 0000350 0000120 read_file(File, List) :-
see(File),
read_list(List),
seen,
see(user),
!.
read_list([X | List]) :-
get0(X),
X =\= -1,
!,
read_list(List).
read_list([]).
% The classical quicksort(+InputList, -SortedList)
quicksort([], []) :- !.
quicksort([X | LI], LO) :-
split(X, LI, LSmall, LBig),
quicksort(LSmall, LSmallSorted),
quicksort(LBig, LBigSorted),
append(LSmallSorted, [X | LBigSorted], LO).
split(X, [Y | L], [ Y | LSmall], LBig) :-
before(Y, X),
!,
split(X, L, LSmall, LBig).
split(X, [Y | L], LSmall, [Y | LBig]) :-
!,
split(X, L, LSmall, LBig).
split(_, [], [], []) :- !.
before(X, Y) :- X @< Y.
count_duplicates(OrderedList, CountedList) :-
count_duplicates(OrderedList, 1, [], CountedListRev),
reverse(CountedListRev, CountedList).
count_duplicates([X, X | Ordered], N, Counting, Counted) :-
N1 is N + 1,
count_duplicates([X | Ordered], N1, Counting, Counted).
count_duplicates([X | Ordered], N, Counting, Counted) :-
count_duplicates(Ordered, 1, [[N, X] | Counting], Counted).
count_duplicates([], _, L, L).
%-----------------------------------------------------------------------------
% Teste si un mot de la liste de mots donnée en 2e arg
% est present dans la liste du 1er arg
contains_word(L1, L2) :-
member(X, L1),
member(X, L2).
contains_word2(L1, L2, X) :-
member(X, L1),
member(X, L2).