我需要测量两个配置文件之间的相似度,其中我们将用文字描述它们。现在使用配置文件数据,我需要找到它们之间的相似性。你能帮我一个建议吗?有没有一种方法根据配置文件数据匹配两个配置文件
-1
A
回答
0
您可以对此问题进行文献审查,将问题分解为子问题,或根据您如何查看问题应用现有解决方案。例如,如果您将此问题视为文本聚类的应用程序,则可以应用现有句子相似性度量。
关键字匹配似乎是最简单的解决方案。此基准只需要您识别命名实体并计算匹配。你可以在这个过程中做一些术语加权。
解决方案的复杂性取决于文本的结构(更像LinkedIn档案或简历?)和错误肯定的可能性(名称和出生日期总是存在,它们足以建立相似性?)。你没有提供给我们看的例子。
0
在OpenNLP中并没有真正的实用工具。我建议你先采取一种简单的方法,并从那里开展工作。我建议的简单方法是对每个配置文件描述进行矢量化,然后使用标准相似性度量来比较它们。这是一个使用余弦相似度的例子。下一个你可能会遇到的问题是试图将它们全部相互比较......然后你将进入你需要进行聚类的领域。您还应该考虑噪音消除和停用词,并可能会产生更好的令牌。这个例子只是一个例子,你要做的最重要的决定是向你的向量添加什么。
import java.util.HashSet;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
/**
*
* Crudely compares two strings
*/
public class SimpleProfileComparer {
public static void main(String[] args) {
String[] profileA = "bob likes to ride bikes and hiking".split(" ");
String[] profileB = "jim likes bikes and also enjoys hiking".split(" ");;
SortedMap<String, Double> a = new TreeMap<>();
for (String string : profileA) {
a.put(string, 1d);
}
SortedMap<String, Double> b = new TreeMap<>();
for (String string : profileB) {
b.put(string, 1d);
}
Set<String>keys = new HashSet<>();
keys.addAll(a.keySet());
keys.addAll(b.keySet());
for (String string : keys) {
if(!a.containsKey(string)){
a.put(string, 0d);
}
if(!b.containsKey(string)){
b.put(string, 0d);
}
}
Double compare = compare(a, b);
System.out.println(compare);
}
public static Double compare(SortedMap<String, Double> a, SortedMap<String, Double> b) {
//both vectors must be of the same schema (normed prior to this call)
if (a.keySet().size() != b.keySet().size()) {
throw new IllegalArgumentException("vectors must be the same length");
}
double magA = 0;
double magB = 0;
double dotProd = 0;
for (String key : a.keySet()) {
Double intA = a.get(key);
Double intB = b.get(key);
/*
* sum of squares calcs
*/
magA += intA * intA;
magB += intB * intB;
/**
* dot prod calc
*/
dotProd += intA * intB;
}
magA = Math.sqrt(magA);
magB = Math.sqrt(magB);
Double similarity = dotProd/(magA * magB);
return similarity;
}
}
相关问题
- 1. 在多个CSV匹配的数据有效的方法,文件
- 2. Apple Watch - 没有找到匹配的Provisionin配置文件
- 3. 验证失败,“没有找到匹配的配置文件...”
- 4. Watchkit扩展 - 没有找到匹配的配置文件
- 5. 有效签名标识匹配此配置文件无法在
- 6. 有没有像在nexus2 nexus.xml一个nexus3一个配置文件?
- 7. 根据两个文件之间的匹配创建一个新文件
- 8. 多弹簧配置文件(每个配置文件一个)
- 9. 有效供应配置文件未找到,但有匹配
- 10. ASP.NET配置文件 - 向现有用户添加配置文件
- 11. 根据子串匹配删除文件
- 12. 任何指定配置文件数据位置的方法
- 13. 配置单元数据库文件没有分隔符
- 14. 外部配置文件始终没有加载数据
- 15. 处理表前缀没有任何数据库配置文件
- 16. Sitecore体验配置文件中没有数据
- 17. 阅读配置文件没有配置部分
- 18. 有没有办法通过配置文件配置Serilog子记录器?
- 19. 有没有办法在Protractor的配置中定义本地配置文件?
- 20. 供应配置文件没有找到
- 21. 我的配置文件没有更新
- 22. svcutil没有生成配置文件
- 23. 配置文件没有密码
- 24. pom.xml文件没有配置好的
- 25. 从一个配置文件
- 26. WSO2ESB有Bug根据这个配置
- 27. 没有有效的目标分配配置文件
- 28. 激活Maven配置文件,如果没有其他配置文件激活
- 29. 根据日期匹配两个数组
- 30. SSIS根据配置创建一个新文件夹