parent
d8fba50336
commit
03758c7d3b
5 changed files with 73 additions and 267 deletions
@ -1,68 +0,0 @@ |
|||||||
package com.teaching.backend.utils; |
|
||||||
|
|
||||||
import com.aliyun.oss.ClientException; |
|
||||||
import com.aliyun.oss.OSS; |
|
||||||
import com.aliyun.oss.OSSClientBuilder; |
|
||||||
import com.aliyun.oss.OSSException; |
|
||||||
import com.aliyun.oss.common.auth.CredentialsProviderFactory; |
|
||||||
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider; |
|
||||||
import com.aliyun.oss.model.PutObjectRequest; |
|
||||||
import com.aliyun.oss.model.PutObjectResult; |
|
||||||
|
|
||||||
import java.awt.*; |
|
||||||
import java.io.FileInputStream; |
|
||||||
import java.io.InputStream; |
|
||||||
|
|
||||||
public class AliOssTest { |
|
||||||
public static void main(String[] args) throws Exception { |
|
||||||
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。因为是华中地区 所以需要加上-lr
|
|
||||||
String endpoint = "oss-cn-wuhan-lr.aliyuncs.com"; |
|
||||||
|
|
||||||
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
|
|
||||||
// EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
|
|
||||||
String accessKeyId ="LTAI5tFkdu3y5WddxbjgaG2F"; |
|
||||||
String accessKeySecret ="1xUchxUTlmUBoTV5JQIrKsVjSkmsLF"; |
|
||||||
|
|
||||||
// 填写Bucket名称,例如examplebucket。
|
|
||||||
String bucketName = "ceshi132132"; |
|
||||||
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
|
|
||||||
String objectName = "ceshi/33.docx"; |
|
||||||
// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
|
|
||||||
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
|
|
||||||
String filePath= "C:\\Users\\jian\\Desktop\\123345\\999\\33.docx"; |
|
||||||
|
|
||||||
// 创建OSSClient实例。
|
|
||||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); |
|
||||||
// OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
|
|
||||||
|
|
||||||
|
|
||||||
try { |
|
||||||
InputStream inputStream = new FileInputStream(filePath); |
|
||||||
// 创建PutObjectRequest对象。
|
|
||||||
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); |
|
||||||
// 设置该属性可以返回response。如果不设置,则返回的response为空。
|
|
||||||
putObjectRequest.setProcess("true"); |
|
||||||
// 创建PutObject请求。
|
|
||||||
PutObjectResult result = ossClient.putObject(putObjectRequest); |
|
||||||
// 如果上传成功,则返回200。
|
|
||||||
System.out.println(result.getResponse().getStatusCode()); |
|
||||||
} catch (OSSException oe) { |
|
||||||
System.out.println("Caught an OSSException, which means your request made it to OSS, " |
|
||||||
+ "but was rejected with an error response for some reason."); |
|
||||||
System.out.println("Error Message:" + oe.getErrorMessage()); |
|
||||||
System.out.println("Error Code:" + oe.getErrorCode()); |
|
||||||
System.out.println("Request ID:" + oe.getRequestId()); |
|
||||||
System.out.println("Host ID:" + oe.getHostId()); |
|
||||||
} catch (ClientException ce) { |
|
||||||
System.out.println("Caught an ClientException, which means the client encountered " |
|
||||||
+ "a serious internal problem while trying to communicate with OSS, " |
|
||||||
+ "such as not being able to access the network."); |
|
||||||
System.out.println("Error Message:" + ce.getMessage()); |
|
||||||
} finally { |
|
||||||
if (ossClient != null) { |
|
||||||
ossClient.shutdown(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
@ -1,113 +1,9 @@ |
|||||||
package com.teaching; |
package com.teaching; |
||||||
|
|
||||||
import com.teaching.backend.common.BaseResponse; |
|
||||||
import com.teaching.backend.common.ResultUtils; |
|
||||||
import com.teaching.backend.model.entity.User; |
|
||||||
import com.teaching.backend.service.UserService; |
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
import org.springframework.boot.test.context.SpringBootTest; |
import org.springframework.boot.test.context.SpringBootTest; |
||||||
import org.springframework.web.bind.annotation.GetMapping; |
|
||||||
|
|
||||||
import javax.annotation.Resource; |
|
||||||
import java.sql.SQLOutput; |
|
||||||
import java.util.*; |
|
||||||
|
|
||||||
@SpringBootTest |
@SpringBootTest |
||||||
class TeachingBackendApplicationTests { |
class TeachingBackendApplicationTests { |
||||||
|
|
||||||
@Resource |
|
||||||
UserService userService; |
|
||||||
@Test |
|
||||||
void contextLoads() { |
|
||||||
//获取用户集合
|
|
||||||
List<User> userList=userService.list() ; |
|
||||||
System.out.println("这是用户集合表"+userList); |
|
||||||
|
|
||||||
//将数据存进map集合中
|
|
||||||
Map<Integer,Map<Integer,Integer>> userBlogLikes=new HashMap<>(); |
|
||||||
|
|
||||||
|
|
||||||
//遍历userList集合
|
|
||||||
for (User user:userList){ |
|
||||||
int userId = user.getUserid(); |
|
||||||
int bokeId = user.getBokeid(); |
|
||||||
int type = user.getType(); |
|
||||||
|
|
||||||
userBlogLikes.computeIfAbsent(userId, k -> new HashMap<>()).put(bokeId, type); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
System.out.println("这是用户集合的map表:"+userBlogLikes); |
|
||||||
|
|
||||||
// 选择一个用户
|
|
||||||
int userId = 1; |
|
||||||
// 找到与该用户相似度最高的用户
|
|
||||||
int mostSimilarUser = findMostSimilarUser(userId, userBlogLikes); |
|
||||||
|
|
||||||
|
|
||||||
if (mostSimilarUser < 0) { |
|
||||||
System.out.println("No similar user found."); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
System.out.println("这是相似度最高的用户"+mostSimilarUser); |
|
||||||
|
|
||||||
// 根据相似用户的点赞记录推荐博客
|
|
||||||
Set<Integer> recommendedBlogs = recommendBlogs(userId, mostSimilarUser, userBlogLikes); |
|
||||||
|
|
||||||
System.out.println("Recommended blogs for user " + userId + ": " + recommendedBlogs); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static int findMostSimilarUser(int userId, Map<Integer, Map<Integer, Integer>> userBlogLikes) { |
|
||||||
|
|
||||||
int mostSimilarUser = -1; |
|
||||||
int maxSimilarity = 0; |
|
||||||
|
|
||||||
Map<Integer, Integer> targetUserLikes = userBlogLikes.get(userId); |
|
||||||
|
|
||||||
for (Map.Entry<Integer, Map<Integer, Integer>> entry : userBlogLikes.entrySet()) { |
|
||||||
if (entry.getKey() != userId) { |
|
||||||
int similarity = calculateSimilarity(targetUserLikes, entry.getValue()); |
|
||||||
if (similarity > maxSimilarity) { |
|
||||||
maxSimilarity = similarity; |
|
||||||
mostSimilarUser = entry.getKey(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
return mostSimilarUser; |
|
||||||
} |
|
||||||
|
|
||||||
public static int calculateSimilarity(Map<Integer, Integer> user1Likes, Map<Integer, Integer> user2Likes) { |
|
||||||
int similarity = 0; |
|
||||||
|
|
||||||
for (Map.Entry<Integer, Integer> entry : user1Likes.entrySet()) { |
|
||||||
int blogId = entry.getKey(); |
|
||||||
|
|
||||||
if (user2Likes.containsKey(blogId) && user2Likes.get(blogId) == 1) { |
|
||||||
similarity++; |
|
||||||
} |
|
||||||
} |
|
||||||
return similarity; |
|
||||||
} |
|
||||||
public static Set<Integer> recommendBlogs(int userId, int similarUserId, Map<Integer, Map<Integer, Integer>> userBlogLikes) { |
|
||||||
|
|
||||||
Set<Integer> recommendedBlogs = new HashSet<>(); |
|
||||||
|
|
||||||
Map<Integer, Integer> targetUserLikes = userBlogLikes.get(userId); |
|
||||||
Map<Integer, Integer> similarUserLikes = userBlogLikes.get(similarUserId); |
|
||||||
|
|
||||||
for (Map.Entry<Integer, Integer> entry : similarUserLikes.entrySet()) { |
|
||||||
int blogId = entry.getKey(); |
|
||||||
|
|
||||||
if (!targetUserLikes.containsKey(blogId) || targetUserLikes.get(blogId) == 0) { |
|
||||||
recommendedBlogs.add(blogId); |
|
||||||
} |
|
||||||
} |
|
||||||
return recommendedBlogs; |
|
||||||
} |
|
||||||
|
|
||||||
} |
} |
||||||
|
Loading…
Reference in new issue