❶ 如何計算多個文本的相似度java程序,利用向量
String text1 = "我愛學習";
String text2 = "我愛讀書";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new CosineTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
運行結果如下:
我愛學習 和 我愛學習 的相似度分值:1.0
我愛學習 和 我愛讀書 的相似度分值:0.4
我愛學習 和 他是黑客 的相似度分值:0.0
我愛讀書 和 我愛讀書 的相似度分值:1.0
我愛讀書 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0
方式二:簡單共有詞,通過計算兩篇文檔有多少個相同的詞來評估他們的相似度
實現類:org.apdplat.word.analysis.SimpleTextSimilarity
用法如下:
String text1 = "我愛學習";
String text2 = "我愛讀書";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new SimpleTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
運行結果如下:
我愛學習 和 我愛學習 的相似度分值:1.0
我愛學習 和 我愛讀書 的相似度分值:0.5
我愛學習 和 他是黑客 的相似度分值:0.0
我愛讀書 和 我愛讀書 的相似度分值:1.0
我愛讀書 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0
❷ k-means聚類演算法的java代碼實現文本聚類
K-MEANS演算法:
k-means 演算法接受輸入量 k ;然後將n個數據對象劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個「中心對象」(引力中心)來進行計算的。
k-means 演算法的工作過程說明如下:首先從n個數據對象任意選擇 k 個對象作為初始聚類中心;而對於所剩下其它對象,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重復這一過程直到標准測度函數開始收斂為止。一般都採用均方差作為標准測度函數. k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。
具體如下:
輸入:k, data[n];
(1) 選擇k個初始中心點,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 對於data[0]….data[n], 分別與c[0]…c[n-1]比較,假定與c[i]差值最少,就標記為i;
(3) 對於所有標記為i點,重新計算c[i]=/標記為i的個數;
(4) 重復(2)(3),直到所有c[i]值的變化小於給定閾值。
演算法實現起來應該很容易,就不幫你編寫代碼了。
❸ 用java判斷兩個文件的相似度
兩個文件轉化為二進制流數組或者鏈表,定義一個int變數n初值為0,遍歷兩個文件數組,每個節點相同無操作,不同n++;
然後拿 n與 文件數組的大小做比較,,,
❹ 怎麼用lucene判斷兩篇文章的相似度 java
用演算法中的求最大相似子字元串的方法LCS或許可以,它可以找到兩個字元串中最大相似的子字元串。
Java code
/*
* @author talent_marquis<甜菜侯爵>
* Email: [email protected]
* Copyright (C) 2007 talent_marquis<甜菜侯爵>
* All rights reserved.
*/
package ustc.mse.algorithms.dynamicProgramming;
/*
* LCS, Longest-Common-Subsequence
*/
public class LCS
{
public enum DIRECTION{ TOP, TOP_LEFT, LEFT };
private char[] first;
private char[] second;
private int[][] lcsTable;
private DIRECTION[][] lcsAssistTable;
private int lcsLength;
private String lcs_str, lcsMatrix_str, lcsAssistMatrix_str;
private StringBuffer str_buffer;
public LCS( String str1, String str2 )
{
first = str1.toCharArray();
second = str2.toCharArray();
lcsTable = new int[ first.length + 1 ][ second.length + 1 ];
lcsAssistTable = new DIRECTION[ first.length + 1 ][ second.length + 1];
lcs_str = null;
❺ java 如何判斷手寫與機打文字的相似度
這個不是java的問題吧,看看深度學習。
基礎教學就有個是手寫文字的判斷。
可以把樣板文字改成楷體,要機器學習學習。
最後輸入手寫文字,看命中率吧。
❻ 問:程序文件相似度分析,用jAVA編寫,拜託各路大神了。1) 基本要求:給兩個程序文件base.j
package d;
public class Test {
public static void method(String str){
String ss=str.toUpperCase();
char arr[]=ss.toCharArray();
int sum=0;
StringBuffer sb=new StringBuffer();
sb.append("[");
for(char c:arr){
int num=c-'A'+1;
sb.append(num+"+");
sum=sum+num;
}
String s=sb.toString().substring(0, sb.toString().length()-1)+"]";
if(sum==100){
System.out.println(str+"="+s+"="+sum+"%");
System.out.println("["+str+"]"+"決定一切");
}else{
System.out.println(str+"="+s+"="+sum+"%");
}
}
public static void main (String args[]){
method("attitude");
}
}
❼ 怎樣用python或者是java計算文本相似度
第一步:把每個網頁文本分詞,成為詞包(bag of words)。
第三步:統計網頁(文檔)總數M。
第三步:統計第一個網頁詞數N,計算第一個網頁第一個詞在該網頁中出現的次數n,再找出該詞在所有文檔中出現的次數m。則該詞的tf-idf 為:n/N * 1/(m/M) (還有其它的歸一化公式,這里是最基本最直觀的公式)
第四步:重復第三步,計算出一個網頁所有詞的tf-idf 值。
第五步:重復第四步,計算出所有網頁每個詞的tf-idf 值。
3、處理用戶查詢
第一步:對用戶查詢進行分詞。
第二步:根據網頁庫(文檔)的數據,計算用戶查詢中每個詞的tf-idf 值。
4、相似度的計算
使用餘弦相似度來計算用戶查詢和每個網頁之間的夾角。夾角越小,越相似。
❽ java如何實現超過10w條文本數據的相似度計算
最簡單的、最節省性能的方法是建立字典。 字典的索引就是字本身,遍歷字元串,沒遇到一個字就加入到字典中,加入的時候判斷下,如果索引存在則加1,不存在則創建,然後在取字典最大值,大於6就報錯。 上面說的字典可以用java中的hashMap實現。
❾ java學到哪才可以檢測兩個文本的相似度
學到IO流可以比較文本了, 不過用IO比較文本比較麻煩, 而且效率低
如果要效率高的話, 就需要學
linux + thread + progress
這樣子可以通過java調用linux命令
linux中有一個comm -12命令來實現比較兩個文件的共同數據, 生成一個新文本。 拿到新文本的大小/舊文本的大小, 舊可以粗略計算出相似度, 而且效率極其高
如果文本有上百萬行數據的話, 用IO可能要十幾個小時才有結果, 但是linux命令只需要1分鍾左右就可以出結果