Defining the specificity of carbohydrate-protein interactions by quantifying functional group contributions