Understanding user needs from problem descriptions, extracting entities, objectives, constraints, assumptions, and explaining modeling choices