gpt4 book ai didi

java - 大型同义词集数据集中的 WordNetSimalarity

转载 作者:行者123 更新时间:2023-12-01 04:41:15 25 4
gpt4 key购买 nike

我使用 wordnet 相似性 java api 来测量两个同义词集之间的相似性:

 public class WordNetSimalarity {
private static ILexicalDatabase db = new NictWordNet();
private static RelatednessCalculator[] rcs = {
new HirstStOnge(db), new LeacockChodorow(db), new Lesk(db), new WuPalmer(db),
new Resnik(db), new JiangConrath(db), new Lin(db), new Path(db)
};

public static double computeSimilarity( String word1, String word2 ) {
WS4JConfiguration.getInstance().setMFS(true);
double s=0;
for ( RelatednessCalculator rc : rcs ) {
s = rc.calcRelatednessOfWords(word1, word2);
// System.out.println( rc.getClass().getName()+"\t"+s );
}

return s;
}

主类

      public static void main(String[] args) {
long t0 = System.currentTimeMillis();

File source = new File ("TagsFiltered.txt");
File target = new File ("fich4.txt");
ArrayList<String> sList= new ArrayList<>();

try {
if (!target.exists()) target.createNewFile();
Scanner scanner = new Scanner(source);
PrintStream psStream= new PrintStream(target);
while (scanner.hasNext()) {
sList.add(scanner.nextLine());
}
for (int i = 0; i < sList.size(); i++) {
for (int j = i+1; j < sList.size(); j++) {
psStream.println(sList.get(i)+" "+sList.get(j)+" "+WordNetSimalarity.computeSimilarity(sList.get(i), sList.get(j)));
}
}

psStream.close();
} catch (Exception e) {e.printStackTrace();
}


long t1 = System.currentTimeMillis();
System.out.println( "Done in "+(t1-t0)+" msec." );
}

我的数据库包含 595 个同义词集,这意味着方法 computeSimilarity 将被调用 (595*594/2) 次为了计算两个单词之间的相似度,它花费了超过 5000 毫秒!所以要完成我的任务我至少需要一周!!

我的问题是如何缩短这个时间!

如何提高性能?

最佳答案

我不认为语言是你的问题。

您可以通过并行性来帮助自己。我认为这对于 MapReduce 和 Hadoop 来说是一个很好的选择。

关于java - 大型同义词集数据集中的 WordNetSimalarity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com