1. 程式人生 > >簡單實現根據Td-idf實現語句相似度

簡單實現根據Td-idf實現語句相似度

使用詞頻來計算兩個語句的相似度,假設語句已經使用分詞工具分好









	public class Similar {
	

		public static double getSimilarity(Vector<String> T1, Vector<String> T2) throws Exception {
		    int size = 0 , size2 = 0 ;
		    double sum=0;
		    if ( T1 != null && ( size = T1.size() ) > 0 && T2 != null && ( size2 = T2.size() ) > 0 ) {
		         
		    	Set<String> set=new HashSet<String>();
		     	Map<String, Integer> s1 = new HashMap<String, Integer>();
		    	Map<String, Integer> s2= new HashMap<String, Integer>();
		    	//獲取T1,T2所有的不重複單詞
		    	for (int i = 0; i < size; i++) {
					set.add(T1.get(i));
				}
		    	for(int j=0;j<size2;j++){
		    		set.add(T2.get(j));
		    		
		    	}
		    	//計算每個向量中的詞語出現的次數
		    	 for (String string : set) {
		    		int count=0;
		    	    int count1=0;
					for (String a1 : T1) {
						if (a1.equals(string)) {
							count++;
						}
					}
					for (String a2 : T2) {
						if (a2.equals(string)) {
							count1++;
						}
					}
					s1.put(string, count);
					s2.put(string, count1);
				}
			
		        //計算百分比
		    	 int c1 = 0 , c2 = 0;
		    	 double sum1 = 0;  //S1、S2
		    	 double b1=0,b2=0;
		    	 for (String string : set) {
		    		 	c1=s1.get(string);
		            	c2=s2.get(string);
		            	 sum1+=c1*c2;
		            	 b1+=c1*c1;
		            	 b2+=c2*c2;
		           		 
		    		 
					
				}
		            sum=sum1/Math.sqrt(b1*b2);
		    }else {
				System.out.println("引數有誤");
			}
			return sum;
		  
			
		}
		public static void main(String[] args) {
			Vector<String> T1 = new Vector<String>() ;//對輸入進行分詞
			Vector<String> T2 = new Vector<String>() ;//對輸入進行分詞
			
			T1.add("i");
			T1.add("kill");
			T1.add("you");
			T1.add("kill");
			T1.add("you");
			T1.add("fop");
			T1.add("tip");
			T1.add("cnce");

			
			T2.add("kill");
			T2.add("you"); 

			try {
				System.out.println(getSimilarity(T1, T2));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}

	}





相關推薦

簡單實現根據Td-idf實現語句相似

使用詞頻來計算兩個語句的相似度,假設語句已經使用分詞工具分好 public class Similar { public static double getSimilarity(Vector<String> T1, Vector<

【matlab】:matlab實現計算兩張圖片的相似

                              以二維空間為例,上圖的a和b是兩個向量,我們要計算它們的夾角θ。餘弦定理告訴我們,可以用下面的公式求得:                                              假定a向量是[x1, y1],b向量是[x

<tf-idf + 余弦相似> 計算文章的相似

eth documents oca word product num users -s box 背景知識: (1)tf-idf 按照詞TF-IDF值來衡量該詞在該文檔中的重要性的指導思想:如果某個詞比較少見,但是它在這篇文章中多次出現,那麽它很可能就反映了這篇文章的特性

TF-IDF比較文字相似

文字相似度 TF-IDF 演算法 如果某個詞在給定文件中很少出現,但是在給定文件中的某一篇文章中出現的次數很大, 該詞在很大程度上反映了該文章的特性,我們稱該詞為這篇文章的關鍵字 參考連結:http://www.ruanyifeng.com/blog/2013/

【Spark Mllib】TF-IDF&Word2Vec——文字相似

1 從資料中抽取合適的特徵 1.1 TF-IDF短語加權表示 TF-IDF公式的含義是:在一個文件中出現次數很多的詞相比出現次數少的詞應該在詞向量表示中得到更高的權值。而IDF歸一化起到了減弱在所有文件中總是出現的詞的作用。最後的結果就是,

C++入門經典-例3.12-使用if-else語句實現根據輸入的字符輸出字符串

++ names closed 應用 aps 字符串 fail hid logs 1:代碼如下: // 3.12.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <iostream> using n

用Python實現一個簡單的——人臉相似對比

近幾年來,興起了一股人工智慧熱潮,讓人們見到了AI的能力和強大,比如影象識別,語音識別,機器翻譯,無人駕駛等等。總體來說,AI的門檻還是比較高,不僅要學會使用框架實現,更重要的是,需要有一定的數學基礎,如線性代數,矩陣,微積分等。 幸慶的是,國內外許多大神都已經給我們造好“輪子”,我們可以直

### 製作簡單的圖書管理系統 實現新增圖書 顯示新增的圖書 根據圖書名查詢圖書 刪除圖書

//1.建立一個AfConsole類package BookManagementSystem;import java.io.BufferedReader;import java.io.InputStreamReader;public class AfConsole{Buffe

【Java基礎】switch語句實現根據數字輸出對應星期

程式碼: import java.util.Scanner; /* * switch語句格式: * switch(表示式) { * case 值1: * 語句體1; * break; * case 值2:

MySQL中根據if標籤實現多條件模糊查詢(動態SQL語句

 if標籤  if標籤可用在許多型別的sql語句中,我們以查詢為例。首先看一個很普通的查詢: Xml程式碼   <!-- 查詢學生list,like姓名 -->   <select id="getStudentListLikeName" pa

基於Lucene、TF-IDF、餘弦相似性實現長文字相似檢測

什麼是TF-IDF TF-IDF(Term Frequency-Inverse Document Frequency),漢譯為詞頻-逆文字頻率指數。 TF指一個詞出現的頻率,假設在一篇文章中某個詞出現的次數是n,文章的總詞數是N,那麼TF=n/N 逆文字頻率指數IDF一

使用 TF-IDF 加權的空間向量模型實現句子相似計算

使用 TF-IDF 加權的空間向量模型實現句子相似度計算 字元匹配層次計算句子相似度 計算兩個句子相似度的演算法有很多種,但是對於從未了解過這方面演算法的人來說,可能最容易想到的就是使用字串匹配相關的演算法,來檢查兩個句子所對應的字串的字元相似程度。比如單純的進行子串匹配,搜尋 A 串中能與 B 串匹配的

JPush簡單Java服務端案例實現

服務端 開發者 comm platform die spa message else 獲取數據 一、激光推送準備工作 1、註冊極光推送開發者賬號,創建應用: 2、完成推送設置,填寫應用名提交生成安裝包: 3、掃碼安裝簡單的測試apk,查看應用信息會有AppKey和Mas

javascript+php實現根據用戶時區顯示當地時間的方法

rip 判斷 方法 exp margin 一段 neo string == 本文實例講述了javascript+php實現根據用戶時區顯示當地時間的方法。分享給大家供大家參考。具體如下: 在跨時區應用中會用到下面代碼,這是以前寫的一段代碼。 服務器保存相關時間配置,保存

Oracle function實現根據輸入的日期以及天數,獲取此日期之後的天數的工作日

eat log func code nbsp ber number rep reat 前提:在法定節日表(t_fdjr )中維護法定節日包括周六周天 /** * 功能描述:根據輸入的日期以及天數,獲取此日期之後的天數的工作日 * 輸入參數: * i_date YYYY-M

Java實現根據輸入的日期以及天數,獲取此日期之後的天數的工作日

天數 數據庫 ger 獲取 reg static try rgs pan public static void main(String[] args) { List<String> list = new ArrayList<String

SpringBank 開發日誌 一種簡單的攔截器設計實現

exp bst 一個 pin factory span 之前 system request 當交易由Action進入Service之前,需要根據不同的Service實際負責業務的不同,真正執行Service的業務邏輯之前,做一些檢查工作。這樣的攔截器應該是基於配置的,與Se

ASP.NET簡單SQL分頁的實現

eval 當前頁 per ron lena con help adapter onclick 今天是出來實習的第32天,在學校學的像是囫圇吞棗一樣,什麽都是馬馬虎虎的,而分頁這樣的需要邏輯的像我這樣的懶人喜歡用插件,仔細捉摸了下也不好,所以就花一點時間研究了下分頁, 今天就

Android 簡單案例:繼承BaseAdapter實現Adapter

for ack import apt ret bsp position hang layout import android.view.LayoutInflater; import android.view.View; import android.view.ViewGr

ubuntu 12.04 簡單配置samba服務,實現主機與虛擬機互通(設置Windows虛擬盤)

完成 sam inux ... conf restart bridged 要求 system 環境: virtualbox ubuntu12.04 首先,如果你到這步了,說明你的window與linux的網絡已經配好了,他們之間是可以互相Ping通的,如果沒有,請看我以