The best advice I have, given that you have tried a lot, is to be active in redirecting her behavior. If this has been going on for 3 years, you've allowed this to become a established pattern of behavior. She thinks that this is acceptable, so it's going to be very hard to change.
First, have more than one scratching post. Make sure they are sturdy and can't tip. Those 18" tall ones are only good for kittens. She needs a full-on tree (or multiples). Place the scratching posts in areas she likes to scratch (near the couch, places she has picked apart the carpet, etc.)
When you catch her in the act, don't punish her. That only succeeds in getting her the attention she is probably looking for. Instead, go to one of the trees and scratch on it yourself. It's odd how the cats try to mimic their people, but both my resident cats and foster kittens fall for it. When you catch her using appropriate places to scratch, give her a high value treat (by this I mean her favorite thing, whether it's food, playtime, chin scratches, etc.)
Other things that help, more as a lifestyle thing than something you can do right away:
1. Get ultrasuede furniture. The material isn't attractive to the cats, so they leave it alone.
2. Don't get cat trees that have the same texture as the carpet you don't want scratched. It will only confuse her.
3. Give her some things to occupy her mind. Play with her several times a day. Make sure she has stimulating toys she can use on her own (something I use for my cats are toys that make them solve puzzles to get food. It helps moderate their food intake because they only eat what they are willing to work for, and it keeps them busy).
Those are my thoughts. It's important to remember that keeping her behavior within the boundaries of what you desire is an ongoing process rather than a single event. She is going to mess up a bit - it's just part of living with a cat.
I hope some of this helps.