安卓计算句子余弦相似度
时间: 2023-11-28 10:04:20 浏览: 42
可以使用Java的自然语言处理库,如Stanford CoreNLP或LingPipe,来计算句子的余弦相似度。以下是一个使用Stanford CoreNLP计算余弦相似度的示例代码:
```java
import edu.stanford.nlp.ling.Sentence;
import edu.stanford.nlp.linalg.ArrayMath;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.util.CoreMap;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
public class CosineSimilarity {
public static double cosineSimilarity(String s1, String s2) {
// Create StanfordCoreNLP object with NER and parse annotators
Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, parse");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
// Tokenize and parse both sentences
List<CoreMap> sentence1 = pipeline.process(Sentence.toWordList(s1)).get(CoreAnnotations.SentencesAnnotation.class);
List<CoreMap> sentence2 = pipeline.process(Sentence.toWordList(s2)).get(CoreAnnotations.SentencesAnnotation.class);
// Convert parsed sentences to word vectors
double[][] vectors1 = sentence1.get(0).get(CoreAnnotations.SentencesAnnotation.class).get(0).get(SentenceVectorsAnnotation.class);
double[][] vectors2 = sentence2.get(0).get(CoreAnnotations.SentencesAnnotation.class).get(0).get(SentenceVectorsAnnotation.class);
// Compute cosine similarity using ArrayMath library
double cosine = ArrayMath.cosine(vectors1[0], vectors2[0]);
return cosine;
}
public static void main(String[] args) {
String s1 = "This is a sentence.";
String s2 = "This is another sentence.";
double similarity = cosineSimilarity(s1, s2);
System.out.println("Cosine similarity: " + similarity);
}
}
```
另外,也可以使用第三方库,如Apache Commons Math,来计算余弦相似度。以下是一个使用Apache Commons Math计算余弦相似度的示例代码:
```java
import org.apache.commons.math3.linear.ArrayRealVector;
import org.apache.commons.math3.linear.RealVector;
public class CosineSimilarity {
public static double cosineSimilarity(String s1, String s2) {
// Convert sentences to word vectors
String[] words1 = s1.split(" ");
String[] words2 = s2.split(" ");
RealVector vector1 = new ArrayRealVector(words1.length);
RealVector vector2 = new ArrayRealVector(words2.length);
for (int i = 0; i < words1.length; i++) {
vector1.setEntry(i, Double.parseDouble(words1[i]));
}
for (int i = 0; i < words2.length; i++) {
vector2.setEntry(i, Double.parseDouble(words2[i]));
}
// Compute cosine similarity using dot product and magnitude
double dotProduct = vector1.dotProduct(vector2);
double magnitude = vector1.getNorm() * vector2.getNorm();
double cosine = dotProduct / magnitude;
return cosine;
}
public static void main(String[] args) {
String s1 = "1 2 3";
String s2 = "4 5 6";
double similarity = cosineSimilarity(s1, s2);
System.out.println("Cosine similarity: " + similarity);
}
}
```