前几天帮同学作了个很小的project,
引用
Example1. Assume the content of the file is:
abc,def
abc def! ghi jkl?
xyz abc ppp
xyz xyz def
It contains fouro bjects.The first object consists of twotokens abc and def.The last object consists of three tokens xyz, xyz,def.
The similarity between the first object and the second object is 2.If the similarity threshold is 2,the
output of the join should be
01
Note that the following output is wrong.
10
If the threshold is 1,the output should be
01
02
12
03
13
23
大体意思就是给定一个文件,里面有上面所说的那种类型的输入,然后你要把.,?!\t"; 这些字符去掉,然后比较每一行的相似度,程序会有一个参数,这个参数就是最小相似度,小于这个相似度的值都不会被打印。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.*;
public class Data {
/**
* @param args
*/
private int threshold=0;
private final String regex="[\\.,? \\t!]++";
private String file;
private String mode;
private List <String> l=new ArrayList<String>();
private Map<String,List<Integer>> m=new HashMap<String,List<Integer>>();
public int sim(String[] s1,String[] s2){
int frag=0;
for(int i=0;i<s1.length;i++){
for(int j=0;j<s2.length;j++){
if(s1[i].equals(s2[j])){
frag++;
break;
}
}
}
return frag;
}
public void nSSJoin(List<String> l,int threshold){
for(int j=0;j<l.size();j++){
for(int i=j+1;i<l.size();i++){
int s=sim(l.get(j).split(regex),l.get(i).split(regex));
if(s>=threshold){
System.out.println(j+" "+i);
}
}
}
}
public void SSJoin(List<String> l,int threshold){
index(l);
for(int j=0;j<l.size();j++){
for(int i=j+1;i<l.size();i++){
int s=Ssim(l.get(j).split(regex),l.get(i).split(regex),i,j);
if(s>=threshold){
System.out.println(j+" "+i);
}
}
}
}
private int Ssim(String[] strings, String[] strings2,int i,int j) {
// TODO Auto-generated method stub
int tmp=0;
for(int k=0;k<strings.length;k++){
if(m.get(strings[k]).contains(i)){
tmp++;
}
}
return tmp;
}
public void index(List<String> l){
String[] temp1;
for(int i=0;i<l.size();i++){
temp1=l.get(i).split(regex);
for(int j=0;j<temp1.length;j++){
if(m.containsKey(temp1[j])){
m.get(temp1[j]).add(i);
}else{
List <Integer> l1=new ArrayList<Integer>();
l1.add(i);
m.put(temp1[j],l1);
}
}
}
}
public static void main(String[] args) throws IOException {
String inputLine;
Data d= new Data();
// TODO Auto-generated method stub
d.mode=args[0];
d.file=args[1];
d.threshold=Integer.valueOf(args[2]);
BufferedReader br= new BufferedReader(new FileReader(d.file));
while((inputLine=br.readLine())!=null){
d.l.add(inputLine);
}
//d.SSJoin(d.l, d.threshold);
//Map<String, int[]> k=d.index(d.l);
if(d.mode.equals("nSSJoin")){
d.nSSJoin(d.l,d.threshold);
}else if(d.mode.equals("SSJoin")){
d.SSJoin(d.l, d.threshold);
}else{
System.err.println("Mode is error");
}
}
}
分享到:
相关推荐
Project教程,详细讲解了Project的基础功能使用和任务计划表的制作。对于初次接触Project的同学来说值得一看
软件项目管理Project
初次接触Project的同学们,可以看一下,不错的入门教程!
LPC1768 Micrium demo project,可供有需要的同学在此基础上扩展吆!
基于51单片机做的双电机驱动的小车,proteus仿真成功,按钮控制前后左右转,c语言代码也写好了,都是最基础的,适合刚接触单片机的同学进行改良,由于51单片机具有良好的拓展性,大家可在此文件上进行附加模块实现更...
很精彩,Project报告与学术论文的撰写非常类似,有大家共同认可的固定程式。打个不恰当的比喻,有一点象“八股文”,故名“学术八股”。这里给出一些建议,供同学们参考。
对于p1很清楚是*p1类型,但是对于p2基础不扎实的同学可能有点糊涂,怎么办呢,C++中提供了一个函数typeid(变量名).name(),可以直接使用cout输出类型名,该资源是通过测试的源代码,下载下来双击Project2.vcxproj打开...
lifen-project 学生注册、教师注册、学生和教师登录、后台管理用户、项目发布、任务上传、任务评分 用到的技术有layui、springboot、jpa
正在学习project2003的朋友,对project的使用不是很熟悉的同学,可以进行很好的指导作用。
MATLAB实现的无限通讯模拟。 ANU的的同学可以试试, 就是ENGN4536的project
小项目 供同学使用
初始搭建SpringBoot的一个官网例子,还是挺有用的,希望对初学者有用
希望通过这个简单的小项目让需要画函数图像的同学和老师拿到代码后可以立即获得自己想要的图片,而不用再查找公式,重新编写代码,只需要按照注释简单修改参数,就可以获得自己心仪的图形。 代码力求简单。 基本代码...
用asp和sql做的校友录。特别好,适用于做毕业设计。
problem 7 heuristic可以自己调整使用模糊算法来算两个点的距离(7502 expanded nodes,25秒内出结果.满分是9000以下,7000以下多一分额外分),或者直接用 bfs/ucs来算(376 expanded nodes,2.5秒出结果),之前改...
这是我从国外知名大学cs专业留学的同学那里收集来的作业资料(英文原版): 【留学生作业代写资料assignment英文原版】 CS 537 Spring 2020, Project 2a: Unix Shell
对于软件开发的同学们是很有用的,学会project 对于项目管理很有帮助
project的SSM项目project的SSM项目
pmp_project managagement professional study guide,我想应该能对学习pmp的同学有所帮助哦!
Java项目案例导航源代码,想看java源代码的同学可以下载了,谢谢大家。