我正在用Java写一个关于抄袭检测的项目,在这种情况下,第一步我需要做以下任务:
输入文件(txt, .pdf, .doc)
将文件内容转换为文本
将停止词标记为n-gram
处理文本
上的文本相似度算法报告抄袭检测标志
我通过自己编码完成了这些步骤,但现在我觉得它缺乏很多性能,所以我开始使用可用的API来工作。有谁使用过ws4j库吗?有相关的文档或帮助吗?我不能重复使用它。这正是我想要的,看看演示
除了你可以在网站上看到的,我没有找到任何文档。我建议您从查看代码开始(使用SVN或git检查它)。请注意,您需要二进制发行版,因为源代码不完整。
这个简单的教程适用于大多数情况。您可能已经在源代码中找到了它:
double s = rc.calcRelatednessOfWords("jump", "stand");
如果你想比较特定的synsets,你必须先创建一个Concept
。最常见的"jump"的例子:
String word = "jump";
List<Synset> synsets = WordNetUtil.wordToSynsets(word, POS.v);
Synset mysynset = synsets.get(0);
Concept co = new Concept(mysynset.getSynset(), POS.v, mysynset.getName(), mysynset.getSrc());
库实际上不像在线演示那样工作。为了使用典型的语法集表示法,我使用了自己的实用程序方法。所以比较特定的同义词集看起来像这样:
Concept stand = new Concept(getSynset("stand#v#1"), POS.v);
Concept jump = new Concept(getSynset("jump#v#1"), POS.v);
double score = compare(comparer, co, stand);
// done!
// utility
private static double compare(RelatednessCalculator comparer, Concept one,
Concept other) throws Exception {
Relatedness res = comparer.calcRelatednessOfSynset(one, other);
if(StringUtils.isNotBlank(res.getError()))
{
throw new Exception ("WordNET similiarity for " + one + " and " + other + " failed with this error: "+ res.getError() + "n" + res.getTrace());
}
return res.getScore();
}
/**
*
* @param wordnetword a string of the format lemma#pos#num. E.g. jump#v#1 or house#n#2
* @return a synset identifier for WS4J
*/
private static Concept getSynset(String wordnetword) {
String[] parts = StringUtils.split(wordnetword, "#");
String lemma = parts[0];
POS mypos = POS.valueOf(parts[1]);
int index = Integer.parseInt(parts[2]) - 1;
List<Synset> synsets = WordNetUtil.wordToSynsets(lemma, mypos);
Synset synset = synsets.get(index);
String synstring = synset.getSynset();
return new Concept(synstring, mypos, lemma, synset.getSrc());
}