The approach I use (and that I think is most common) is to generally
have importers emit transactions with only one postings.
I enter the other leg of the transaction with a combination of manual
editing and automated prediction based on a machine learning
categorization algorithm.
Exploiting the fat that for most transactions there is only one other
leg and thus it is not necessary to repeat the amount, and using an
editor with completion support and with support for navigating the
structure of a benacount ledger makes the manual entry matter of a few
keystrokes.
The machine learning solution I use is similar to smart_importer but has
a much simpler design and uses scoring to filter out unlikely
predictions. The machine learning of course works only after you
accumulate a some history to use for the training.
I also used a rule-based categorization system with simple match rules.
Writing the rules for such a solution however is generally tedious to
write so that is effective only for often recurring transactions,
otherwise manual editing is faster.
I like to have the transactions completion in a separate step from the
transactions import. The only ad-hoc code I have in the importers is for
cleaning up payees and narrations.
Cheers,
Dan