您是否知道Java中的PHP similar_text函數的任何嚴格等效實現?java中的similar_text()
回答
至於Java,您最好的選擇可能是Apache Commons Lang庫中的StringUtils class,其中包含其他SO帖子提及的LevensteinDistance方法。
因此,您可以採用最長的字符串長度並減去LevensteinDistance以獲得與similar_text相同的數字。對於百分比結果,您可以根據長度劃分結果。 – lofte 2010-01-04 17:23:36
- 下載的源代碼PHP(http://php.net/downloads.php)
- 解壓縮。
- 將ext \ standard \ string.c中的similar_text()函數轉換爲Java。
- 然後吃一些冰淇淋茶:d
好吧,我已將C similar_text()轉換爲Java。我與C lol有愛/恨的關係。對於Java來說,將略帶冒險的指針代碼(顯然是爲了提高PHP效率)轉換成Java並不容易(對我來說,無論如何,呵呵)。 不幸的是,代碼不適合在這裏...現在只是點4)完成:) – Mike 2010-05-15 13:38:12
你有這樣的代碼? – user1122069 2015-10-16 02:53:57
我想你可以在這個帖子一看:PHP similar_text function in Javascript
這是一個javascript等效PHP similar_text。 你只需要在Java中調整它。對不起,如果這沒有幫助,因爲我認爲JavaScript語法和Java只有一點區別。
至少,你知道的實現算法
Javascript和Java是完全**不同的 – Marcelo 2012-10-21 15:04:22
這是我在Java實現:
package comwebndesignserver.server;
import android.util.Log;
/*
*
* DenPashkov 2012
* http://www.facebook.com/pashkovdenis
* * PhP Similar String Implementation
* 30.07.2012
*
*/
public class SimilarString {
private String string = "" ;
private String string2 = "";
public int procent = 0 ;
private int position1 =0 ;
private int position2 =0;
// Similar String
public SimilarString(String str1, String str2){
this.string = str1.toLowerCase();
this.string2 = str2.toLowerCase();
}
public SimilarString() {
}
// Set string
public SimilarString setString(String str1, String str2){
this.string = str1.toLowerCase();
this.string2 = str2.toLowerCase();
return this ;
}
//get Similar
public int similar(){
string= string.trim() ;
string2= string2.trim();
int len_str1 = string.length() ;
int len_str2 = string2.length() ;
int max= 0;
if (string.length()>1 && string2.length()>1){
// iterate
for (int p=0 ; p<=len_str1; p++){
for (int q=0 ; q<=len_str2; q++){
for(int l=0 ; (p + l < len_str1) && (q + l < len_str2) && (string.charAt(l) == string2.charAt(l)); l++){
if (l>max){
max=l ;
position1 = p ;
position2 = q;
}
}
}
}
//sim * 200.0/(t1_len + t2_len)
this.procent = max * 200/((string.length()) + (string2.length()) - (max) + (position2 - position1) ) - (max*string.length()) ;
if (procent>100) procent = 100;
if (procent<0) procent = 0;
}
return this.procent ;
}
}
這種工作方式相同PHP similar_text功能是php_similar_str,php_similar_char,PHP_FUNCTION(similar_text)在PHP的來源string.c文件
private float similarText(String first, String second) {
first = first.toLowerCase();
second = second.toLowerCase();
return (float)(this.similar(first, second)*200)/(first.length()+second.length());
}
private int similar(String first, String second) {
int p, q, l, sum;
int pos1=0;
int pos2=0;
int max=0;
char[] arr1 = first.toCharArray();
char[] arr2 = second.toCharArray();
int firstLength = arr1.length;
int secondLength = arr2.length;
for (p = 0; p < firstLength; p++) {
for (q = 0; q < secondLength; q++) {
for (l = 0; (p + l < firstLength) && (q + l < secondLength) && (arr1[p+l] == arr2[q+l]); l++);
if (l > max) {
max = l;
pos1 = p;
pos2 = q;
}
}
}
sum = max;
if (sum > 0) {
if (pos1 > 0 && pos2 > 0) {
sum += this.similar(first.substring(0, pos1>firstLength ? firstLength : pos1), second.substring(0, pos2>secondLength ? secondLength : pos2));
}
if ((pos1 + max < firstLength) && (pos2 + max < secondLength)) {
sum += this.similar(first.substring(pos1 + max, firstLength), second.substring(pos2 + max, secondLength));
}
}
return sum;
}
- 1. 加速PHP中的levenshtein/similar_text
- 2. php源代碼中的similar_text
- 3. 使用similar_text和strpos一起
- 4. PHP MySql - SELECT where similar_text()> x
- 5. PHP similar_text區分大小寫
- 6. 用PHP similar_text和UPDATE合併表
- 7. 如何將similar_text應用於array_uintersect?
- 8. php similar_text()給出不同的字符串位置結果
- 9. 如何通過similar_text()改進PHP字符串匹配?
- 10. PHP路由與similar_text不適合搜索引擎?
- 11. similar_text()將產品名稱與給定的字符串進行比較
- 12. PHP的similar_text()和in_array()不工作,因爲它看起來應該是他們應該
- 13. java中的java beans
- 14. Java中的Java SplashScreen Web Start
- 15. Java中的Java參數-ORBInitialPort
- 16. Java中的Java實現
- 17. Java的Java中多比較
- 18. java中的system.environment.machinename?
- 19. Java中的Graphics2D
- 20. JAVA中的GridBagLayout
- 21. Java中的ResetField
- 22. Java中的ThreadGroup
- 23. Java中的MVC
- 24. 的Java HttpSession中
- 25. Java中的Visibility.GONE
- 26. Java中的RNGCryptoServiceProvider
- 27. Java中的servlets
- 28. java中的LinkedHashMap
- 29. Java中的TimerTask
- 30. Java中的JFrame
熱身:http://stackoverflow.com/questions/907997/string-distance-library – miku 2010-01-04 16:09:18
不完全是。 PHP的similar_text與levenshtein距離不同。從PHP的similar_text手冊: 「這將計算兩個字符串之間的相似性,如Oliver [1993]中所述。[...]返回兩個字符串中匹配字符的數量。」 我無法找到Oliver相似度算法的任何Java實現 – Thomasleveil 2010-01-04 16:19:27