Fourth seed Casper Ruud will meet Alexander Zverev in the French Open semi-finals after beating Danish sixth seed Holger Rune in four sets.