The absent-minded linguist
JavaScript (ES7), 172 bytes
x=&gt;[for(i of&quot;V(SO?)?0V(O?S)?0(SVO?|V)0(O?VS|V)0(SO?)?V0(O?S)?V&quot;.split(0))if((y=x.match(RegExp(i,&quot;g&quot;))).join``==x)i.match(/\w/g).slice(0,3).join``+&quot;:&quot;+y.join`.`+&quot;.&quot;].join`
`

Could probably be golfed further. Suggestions welcome!