SPMF: A Social Trust and Preference Segmentation-based Matrix Factorization Recommendation Algorithm