BabelNet中的java域限制
我试图将BabelNet查询的结果限制在特定(Babel)域。为此,我试图找到一种方法来比较synset的域和我需要的域(地理)。然而,我很难获得正确的输出,因为尽管两个字符串匹配,但它仍然给我错误的输出。我在这里肯定做错了什么,但我没有主意了
经过多次试验,以下代码为我提供了与所需输出最接近的结果:
public class GeoRestrict {
public static void main(String[] args) throws IOException {
String file = "/path/to/file/testdata.txt";
BabelNet bn = BabelNet.getInstance();
BufferedReader br = new BufferedReader(new FileReader(file));
String word = null;
while ((word = br.readLine()) != null) {
BabelNetQuery query = new BabelNetQuery.Builder(word)
.build();
List<BabelSynset> wordSynset = bn.getSynsets(query);
for (BabelSynset synset : wordSynset) {
BabelSynsetID id = synset.getID();
System.out.println("\n" + "Synset ID for " + word.toUpperCase() + " is: " + id);
HashMap<Domain, Double> domains = synset.getDomains();
Set<Domain> keys = domains.keySet();
String keyString = domains.keySet().toString();
List<String> categories = synset.getDomains().keySet().stream()
.map(domain -> ((BabelDomain) domain).getDomainString())
.collect(Collectors.toList());
for (String category : categories) {
if(keyString.equals(category)) {
System.out.println("The word " + word + " has the domain " + category);
} else {
System.out.println("Nada! " + category);
}
}
}
}
br.close();
}
}
输出如下所示:
Synset ID for TURIN is: bn:00077665n
Nada! Geography and places
关于如何解决这个问题有什么想法吗
# 1 楼答案
我发现了自己的错误。为了完整起见,我将其发布
BabelDomain需要声明和指定(在while循环之前),如下所示:
BabelDomain domain = BabelDomain.GEOGRAPHY_AND_PLACES;