/* * NightsFormula.java * */importjava.io.*;importjava.util.*;publicclassNightsFormula{privatestaticfinaldouble_MINSimilarityRate=0.51;publicstaticvoidmain(String[]args){String[]wordList=getWordList(newString[]{"fam25_10.txt","fam40_25.txt","fam55_40.txt","fam70_55.txt"});String[]srcList=getWordList(newString[]{"inputSample.txt"});if(wordList==null||srcList==null){System.out.println("word list or src list is NULL");return;}StringBufferoutb=newStringBuffer();for(inti=0;i<srcList.length;i++){StringBuffersb=newStringBuffer();sb.append(srcList[i]).append("\t");for(intj=0;j<wordList.length;j++){doublesr=getSimilarityRate(srcList[i],wordList[j]);if(sr>=_MINSimilarityRate){sb.append(wordList[j]).append("\t");}}String[]cand=split(sb);Stringsc=cand[(int)(cand.length*Math.random())];outb.append(sc).append(" ");}System.out.println(outb.toString());}privatestaticdoublegetSimilarityRate(Stringstr1,Stringstr2){intld=getLevenshteinDistance(str1,str2);intlen=(str1.length()>str2.length()?str1.length():str2.length());doubleresult=((double)(len-ld)/len);returnresult;}privatestaticintgetLevenshteinDistance(Stringstr1,Stringstr2){int[][]lArr=newint[str1.length()+1][str2.length()+1];for(inti=0;i<lArr.length;i++)lArr[i][0]=i;for(inti=0;i<lArr[0].length;i++)lArr[0][i]=i;for(inti=0;i<str1.length();i++){for(intj=0;j<str2.length();j++){intcost=(str1.charAt(i)==str2.charAt(j))?0:1;lArr[i+1][j+1]=getMinimum(lArr[i][j+1]+1,lArr[i+1][j]+1,lArr[i][j]+cost);}}returnlArr[str1.length()][str2.length()];}privatestaticintgetMinimum(inta,intb,intc){intm=a<b?a:b;returnm<c?m:c;}privatestaticString[]getWordList(String[]filenames){FileReaderfr=null;BufferedReaderin=null;StringBuffersb=newStringBuffer();for(inti=0;i<filenames.length;i++){try{in=newBufferedReader(fr=newFileReader(filenames[i]));Stringline=null;while((line=in.readLine())!=null){sb.append(line).append("\t");}}catch(Throwablet){t.printStackTrace();returnnull;}finally{if(in!=null){try{in.close();}catch(Throwablet){;}finally{in=null;}}if(fr!=null){try{fr.close();}catch(Throwablet){;}finally{fr=null;}}}}returnsplit(sb);}privatestaticString[]split(StringBuffersb){StringTokenizerst=newStringTokenizer(sb.toString()," \t");intlen=st.countTokens();String[]wlist=newString[len];for(inti=0;i<len;i++){wlist[i]=st.nextToken();}returnwlist;}}
匿名
#8573()
[
Java
]
Rating0/0=0.00
ボケるのに「レーベンシュタイン距離( http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2 )」を使ってみました。
入力はテキストファイルからで。
Rating0/0=0.00-0+
[ reply ]