Here's mine, it doesn't do nifty accented characters, but on the  
other hand at least numbers and underscores aren't letters
usage: ruby scramble.rb < input.txt

% cat scramble.rb
STDIN.read.gsub(/(\b[A-Za-z])([A-Za-z']*)([A-Za-z])/){[$1,$3,$2.split 
(//).sort_by{rand}.join].values_at(0,2,1).join}.display