As aab suggested, simple deterministic head-finding rules can work quite well (also see references to Magerman or Charniak head-finding rules for similar approaches).
You might also look at extracting dependency structure from the constituent trees. The Stanford toolset does this quite well:
See http://nlp.stanford.edu/software/stanford-dependencies.shtml