自己实现的一个基于用户的协同过滤算法
来源:互联网 发布:ios 免费 日程软件 编辑:程序博客网 时间:2024/04/29 04:36
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;
import bean.News;
import bean.User;
public class Like {
public static void main(String[] args) {
List<User> list1=new ArrayList<User>();
List<News> list2=new ArrayList<News>();
User user1=new User();
News news1=new News();
try {
Class.forName("com.mysql.jdbc.Driver");
//URL指向要访问的数据库名mydata
String url = "jdbc:mysql://localhost:3306/news?useSSL=true";
//MySQL配置时的用户名
String user = "root";
//MySQL配置时的密码
String password = "19961020";
Connection conn = DriverManager.getConnection(url,user,password);
Statement stmt= conn.createStatement() ;
String sql1="select * from users";
String sql2="select * from news";
String sql3="select newsid from newsbelike where userid=?";
String sql4="select count(*) as num from newsbelike where userid=?";
ResultSet rs1= stmt.executeQuery(sql1) ;
while(rs1.next()){
user1.setUsername(rs1.getString("username"));
user1.setId(rs1.getInt("id"));
list1.add(user1);
}
rs1.close();
ResultSet rs2= stmt.executeQuery(sql2) ;
while(rs2.next()){
news1.setTitle(rs2.getString("title"));
news1.setNew_id(rs2.getInt("id"));
list2.add(news1);
}
rs2.close();
int[][] likeuser=new int[list1.size()][];
for(int i=1;i<list1.size()+1;i++){
PreparedStatement ps1= conn.prepareStatement(sql3);
ps1.setInt(1, i);
ResultSet rs3= ps1.executeQuery() ;
List<Integer> list3=new ArrayList<Integer>();
while(rs3.next()){
int id=rs3.getInt("newsid");
list3.add(id);
}
likeuser[i-1]=new int[list3.size()];
for(int j=0;j<list3.size();j++){
likeuser[i-1][j]=list3.get(j);
}
}
for(int[] is:likeuser){
System.out.println();
for(int i:is){
System.out.print(i);
System.out.print(" ");
}
}
System.out.println("------------华丽的分割线-------------");
int[][] usersame=new int[list1.size()][list1.size()];
for(int i=0;i<list1.size();i++){
for(int u=0;u<list1.size();u++){
for(int j=0;j<likeuser[i].length;j++){
for(int k=0;k<likeuser[u].length;k++){
if(likeuser[i][j]==likeuser[u][k]){
usersame[i][u]++;
}
}
}
}
}
for(int i=0;i<list1.size();i++){
System.out.println();
for(int u=0;u<list1.size();u++){
System.out.print(usersame[i][u]);
System.out.print(" ");
}}
System.out.println();
System.out.println("------------华丽的分割线-------------");
float[][] usersim=new float[list1.size()][list1.size()];
for(int i=1;i<list1.size()+1;i++){
for(int u=1;u<list1.size()+1;u++){
PreparedStatement ps2= conn.prepareStatement(sql4);
ps2.setInt(1, i);
ResultSet rs4= ps2.executeQuery() ;
int numi=0;
while(rs4.next()){
numi=rs4.getInt("num");
}
PreparedStatement ps3= conn.prepareStatement(sql4);
ps3.setInt(1, u);
ResultSet rs5= ps3.executeQuery() ;
int numu=0;
while(rs5.next()){
numu=rs5.getInt("num");
}
if(numi*numu==0){
usersim[i-1][u-1]=0;
}else if(u==i){
usersim[i-1][u-1]=0;
}
else if(usersame[i-1][u-1]==0){
usersim[i-1][u-1]=0;
}else{
usersim[i-1][u-1]=(((float)usersame[i-1][u-1])/((float)Math.sqrt(numu*numi)));}
}
}
for(int i=0;i<list1.size();i++){
System.out.println();
for(int u=0;u<list1.size();u++){
System.out.print(usersim[i][u]);
System.out.print(" ");
}}
float[] data=new float[usersim[0].length];
for(int i=0;i<usersim[0].length;i++){
data[i]=usersim[7-1][i];
}
float[] data1=new float[usersim[0].length];
List<Integer> simuserid=new ArrayList<Integer>();
System.arraycopy(data1, 0, data1, 0, data.length);
Arrays.sort(data1);
//System.out.println(data[data.length-1]);
List<Integer> newidlist=new ArrayList<Integer>();
for(int i=data1.length-1;i>(data1.length)-3;i--){
for(int j=0;j<data.length;j++){
if(data1[i]==data[j]){
simuserid.add(j);
}
}
}
for(int i=0;i<simuserid.size();i++)
{
System.out.println(simuserid.get(i));
}
for(int i=0;i<simuserid.size();i++){
//System.out.println(simuserid.get(i));
PreparedStatement ps5= conn.prepareStatement(sql3);
ps5.setInt(1, simuserid.get(i));
ResultSet rs5= ps5.executeQuery() ;
while(rs5.next()){
int id=rs5.getInt("newsid");
newidlist.add(id);
}
}
List<Integer> newidlist1=new ArrayList<Integer>();
PreparedStatement ps6= conn.prepareStatement(sql3);
ps6.setInt(1, 7);
ResultSet rs6= ps6.executeQuery() ;
while(rs6.next()){
int id=rs6.getInt("newsid");
newidlist1.add(id);
}
/*System.out.println(newidlist.get(0));*/
List<Integer> listTemp= new ArrayList<Integer>();
Iterator<Integer> it=newidlist.iterator();
while(it.hasNext()){
int a=it.next();
if(listTemp.contains(a)){
it.remove();
}
else{
listTemp.add(a);
}
}
newidlist.removeAll(newidlist1);
}catch(Exception e){
e.printStackTrace() ;
}
}}
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;
import bean.News;
import bean.User;
public class Like {
public static void main(String[] args) {
List<User> list1=new ArrayList<User>();
List<News> list2=new ArrayList<News>();
User user1=new User();
News news1=new News();
try {
Class.forName("com.mysql.jdbc.Driver");
//URL指向要访问的数据库名mydata
String url = "jdbc:mysql://localhost:3306/news?useSSL=true";
//MySQL配置时的用户名
String user = "root";
//MySQL配置时的密码
String password = "19961020";
Connection conn = DriverManager.getConnection(url,user,password);
Statement stmt= conn.createStatement() ;
String sql1="select * from users";
String sql2="select * from news";
String sql3="select newsid from newsbelike where userid=?";
String sql4="select count(*) as num from newsbelike where userid=?";
ResultSet rs1= stmt.executeQuery(sql1) ;
while(rs1.next()){
user1.setUsername(rs1.getString("username"));
user1.setId(rs1.getInt("id"));
list1.add(user1);
}
rs1.close();
ResultSet rs2= stmt.executeQuery(sql2) ;
while(rs2.next()){
news1.setTitle(rs2.getString("title"));
news1.setNew_id(rs2.getInt("id"));
list2.add(news1);
}
rs2.close();
int[][] likeuser=new int[list1.size()][];
for(int i=1;i<list1.size()+1;i++){
PreparedStatement ps1= conn.prepareStatement(sql3);
ps1.setInt(1, i);
ResultSet rs3= ps1.executeQuery() ;
List<Integer> list3=new ArrayList<Integer>();
while(rs3.next()){
int id=rs3.getInt("newsid");
list3.add(id);
}
likeuser[i-1]=new int[list3.size()];
for(int j=0;j<list3.size();j++){
likeuser[i-1][j]=list3.get(j);
}
}
for(int[] is:likeuser){
System.out.println();
for(int i:is){
System.out.print(i);
System.out.print(" ");
}
}
System.out.println("------------华丽的分割线-------------");
int[][] usersame=new int[list1.size()][list1.size()];
for(int i=0;i<list1.size();i++){
for(int u=0;u<list1.size();u++){
for(int j=0;j<likeuser[i].length;j++){
for(int k=0;k<likeuser[u].length;k++){
if(likeuser[i][j]==likeuser[u][k]){
usersame[i][u]++;
}
}
}
}
}
for(int i=0;i<list1.size();i++){
System.out.println();
for(int u=0;u<list1.size();u++){
System.out.print(usersame[i][u]);
System.out.print(" ");
}}
System.out.println();
System.out.println("------------华丽的分割线-------------");
float[][] usersim=new float[list1.size()][list1.size()];
for(int i=1;i<list1.size()+1;i++){
for(int u=1;u<list1.size()+1;u++){
PreparedStatement ps2= conn.prepareStatement(sql4);
ps2.setInt(1, i);
ResultSet rs4= ps2.executeQuery() ;
int numi=0;
while(rs4.next()){
numi=rs4.getInt("num");
}
PreparedStatement ps3= conn.prepareStatement(sql4);
ps3.setInt(1, u);
ResultSet rs5= ps3.executeQuery() ;
int numu=0;
while(rs5.next()){
numu=rs5.getInt("num");
}
if(numi*numu==0){
usersim[i-1][u-1]=0;
}else if(u==i){
usersim[i-1][u-1]=0;
}
else if(usersame[i-1][u-1]==0){
usersim[i-1][u-1]=0;
}else{
usersim[i-1][u-1]=(((float)usersame[i-1][u-1])/((float)Math.sqrt(numu*numi)));}
}
}
for(int i=0;i<list1.size();i++){
System.out.println();
for(int u=0;u<list1.size();u++){
System.out.print(usersim[i][u]);
System.out.print(" ");
}}
float[] data=new float[usersim[0].length];
for(int i=0;i<usersim[0].length;i++){
data[i]=usersim[7-1][i];
}
float[] data1=new float[usersim[0].length];
List<Integer> simuserid=new ArrayList<Integer>();
System.arraycopy(data1, 0, data1, 0, data.length);
Arrays.sort(data1);
//System.out.println(data[data.length-1]);
List<Integer> newidlist=new ArrayList<Integer>();
for(int i=data1.length-1;i>(data1.length)-3;i--){
for(int j=0;j<data.length;j++){
if(data1[i]==data[j]){
simuserid.add(j);
}
}
}
for(int i=0;i<simuserid.size();i++)
{
System.out.println(simuserid.get(i));
}
for(int i=0;i<simuserid.size();i++){
//System.out.println(simuserid.get(i));
PreparedStatement ps5= conn.prepareStatement(sql3);
ps5.setInt(1, simuserid.get(i));
ResultSet rs5= ps5.executeQuery() ;
while(rs5.next()){
int id=rs5.getInt("newsid");
newidlist.add(id);
}
}
List<Integer> newidlist1=new ArrayList<Integer>();
PreparedStatement ps6= conn.prepareStatement(sql3);
ps6.setInt(1, 7);
ResultSet rs6= ps6.executeQuery() ;
while(rs6.next()){
int id=rs6.getInt("newsid");
newidlist1.add(id);
}
/*System.out.println(newidlist.get(0));*/
List<Integer> listTemp= new ArrayList<Integer>();
Iterator<Integer> it=newidlist.iterator();
while(it.hasNext()){
int a=it.next();
if(listTemp.contains(a)){
it.remove();
}
else{
listTemp.add(a);
}
}
newidlist.removeAll(newidlist1);
}catch(Exception e){
e.printStackTrace() ;
}
}}
0 0
- 自己实现的一个基于用户的协同过滤算法
- 基于用户的协同过滤算法和基于物品的协同过滤算法之java实现
- 基于用户的协同过滤和基于物品的协同过滤推荐算法原理和实现
- 基于用户的协同过滤算法的Python实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户协同过滤的推荐系统算法,python 实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- Mahout实现基于用户的协同过滤算法
- 基于用户的协同过滤算法
- 基于用户的协同过滤算法
- 基于用户的协同过滤算法
- Lock wait timeout exceeded; try restarting transaction
- B树,B+树,InnoDB,MyISAM
- WebRTC
- 中东本地支付Onecard
- enum枚举使用
- 自己实现的一个基于用户的协同过滤算法
- Git常用命令速查表
- 基于MSP430之间的SPI通信
- 如何搭建并访问本地的ftp服务器
- 南邮GNU/Liunx复习总结
- JavaScript中作用域和作用域链解析
- 【IO流】File类及递归算法访问文件
- ES-PHP向ES批量添加文档报No alive nodes found in your cluster
- 详细描述 收购手帐用例的详细描述