基于数据挖掘的旅游推荐APP(五):景点推荐模块
生活随笔
收集整理的這篇文章主要介紹了
基于数据挖掘的旅游推荐APP(五):景点推荐模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??????? 該模塊的主要思路是將現登錄用戶的個人信息(包括出行目的地、旅游類型、天數、花費等)與數據庫中已有的其他用戶信息進行相似度匹配,根據相似度值的大小進行排序,同時獲得用戶去過的景點,然后推薦給用戶。這里的相似度計算采用的是余弦相似度,關于它是什么以及如何計算,我是參考的這個博客(侵刪)。
??????? 里面是對一段文本先進行分詞,但是該模塊用到的數據都是像目的地、天數之類的,因此不需要進行分詞操作。最后的效果如下:
???????????????????????????????????????
核心代碼:
RecommnedFragment
public class RecommendFragment extends Fragment {private String mCurrentUserName=UserCenterFragment.mUserName; //當前所登陸的用戶,一定要保證已經登錄,否則可能有問題private UserLab mUserLab;private static List<SimilarityItem> mSimilarityItems=new ArrayList<>();private RecyclerView mRecyclerView;public static RecommendFragment newInstance(){return new RecommendFragment();}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View v=inflater.inflate(R.layout.fragment_recommend,container,false);mRecyclerView=(RecyclerView)v.findViewById(R.id.recommend_recycler_view);mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));getSimiliarity(mSimilarityItems); // 先準備數據,并進行排序Collections.sort(mSimilarityItems, new Comparator<SimilarityItem>() {@Overridepublic int compare(SimilarityItem similarityItem, SimilarityItem t1) {return (int) ((t1.getSimilarity()-similarityItem.getSimilarity())*100);//由于這里返回值必須是int型,而相似度都是小數,故先放大100倍}});int rank=1;for(SimilarityItem item:mSimilarityItems){item.setRank(rank);rank++;}setupAdapter();return v;}private class RecommendHolder extends RecyclerView.ViewHolder{private TextView mRecommendRank;private TextView mRecommendSimilarity;private TextView mRecommendScenery;public RecommendHolder(View itemView){super(itemView);mRecommendRank=(TextView)itemView.findViewById(R.id.recommend_rank);mRecommendSimilarity=(TextView)itemView.findViewById(R.id.recommend_similarity);mRecommendScenery=(TextView)itemView.findViewById(R.id.recommend_scenery);}public void bindItem(SimilarityItem item){mRecommendRank.setText(item.getRank()+"");mRecommendSimilarity.setText("相似度:"+item.getSimilarity());mRecommendScenery.setText(item.getScenery());}}private class RecommendAdapter extends RecyclerView.Adapter<RecommendHolder>{private List<SimilarityItem> mItems;public RecommendAdapter(List<SimilarityItem> items){mItems=items;}@Overridepublic RecommendHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view =LayoutInflater.from(getActivity()).inflate(R.layout.list_item_recommend,parent,false);return new RecommendHolder(view);}@Overridepublic void onBindViewHolder(RecommendHolder holder, int position) {holder.bindItem(mItems.get(position));}@Overridepublic int getItemCount() {return mItems.size();}}public void setupAdapter(){mRecyclerView.setAdapter(new RecommendAdapter(mSimilarityItems));}/*** 得到每條記錄的相似度及對應景點,存儲在Sinilarity類中最后存在容器里* @param similarityItems*/private void getSimiliarity(List<SimilarityItem> similarityItems){mUserLab=UserLab.get(getActivity());List<String> words=mUserLab.getUserWords(mCurrentUserName);List<Words> wordsArray=mUserLab.getTripWordsArray();CosineSimilarity cosineSimilarity = new CosineSimilarity();for (Words w:wordsArray){List<String> words1=w.getWordArray();SimilarityItem item=new SimilarityItem();item.setSimilarity(cosineSimilarity.cos(words, words1));item.setScenery(w.getScenery());similarityItems.add(item);}}/*** 得到推薦相似度最高的景點數組* @return*/public static String[] getRecommendSceneries(){String sceneries=mSimilarityItems.get(0).getScenery(); //獲取相似度最高的,也就是排序后的第一個,這里得到的是字符串sceneries.trim();String[] recommendSceneries=sceneries.split(",");return recommendSceneries;} }整個工 程的源碼在這找!《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的基于数据挖掘的旅游推荐APP(五):景点推荐模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于数据挖掘的旅游推荐APP(四):“我
- 下一篇: 高德地图和百度地图接口封装遇到的问题(一