Java 文本相识度算法
时间: 2023-10-12 11:10:06 浏览: 49
Java 中可以使用多种文本相似度算法,其中一些常见的算法包括:
1. Jaccard 相似度:Jaccard 相似度是通过比较两个文本的交集与并集来计算相似度的。在 Java 中,可以通过 HashSet 来实现这个算法。
2. 余弦相似度:余弦相似度是通过比较两个文本的向量夹角来计算相似度的。在 Java 中,可以使用 Apache Commons Math 库中的 RealVector 类来实现。
3. 编辑距离:编辑距离是通过计算两个文本之间的最小编辑距离来计算相似度的。在 Java 中,可以使用 LevenshteinDistance 类来实现。
示例代码:
使用 Jaccard 相似度算法:
```java
String str1 = "hello world";
String str2 = "world hello";
Set<String> set1 = new HashSet<>(Arrays.asList(str1.split(" ")));
Set<String> set2 = new HashSet<>(Arrays.asList(str2.split(" ")));
double jaccardSimilarity = (double) (set1.size() & set2.size()) / (double) (set1.size() | set2.size());
System.out.println("Jaccard similarity: " + jaccardSimilarity);
```
使用余弦相似度算法:
```java
String str1 = "hello world";
String str2 = "world hello";
Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();
for (String word : str1.split(" ")) {
map1.put(word, map1.getOrDefault(word, 0) + 1);
}
for (String word : str2.split(" ")) {
map2.put(word, map2.getOrDefault(word, 0) + 1);
}
RealVector vector1 = new ArrayRealVector(map1.values().stream().mapToDouble(Integer::doubleValue).toArray());
RealVector vector2 = new ArrayRealVector(map2.values().stream().mapToDouble(Integer::doubleValue).toArray());
double cosineSimilarity = vector1.dotProduct(vector2) / (vector1.getNorm() * vector2.getNorm());
System.out.println("Cosine similarity: " + cosineSimilarity);
```
使用编辑距离算法:
```java
String str1 = "hello world";
String str2 = "world hello";
int editDistance = StringUtils.getLevenshteinDistance(str1, str2);
double editDistanceSimilarity = 1.0 / (1.0 + editDistance);
System.out.println("Edit distance similarity: " + editDistanceSimilarity);
```