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; |
||||
|
||||
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.web.bind.annotation.GetMapping; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.sql.SQLOutput; |
||||
import java.util.*; |
||||
|
||||
@SpringBootTest |
||||
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