public LinkFileOracle(String testfile) throws IOException { this.linkdb = new InMemoryLinkDatabase(); linkdb.setDoInference(true); LinkDatabaseUtils.loadTestFile(testfile, linkdb); }
for (Link oldlink : linkset) if (oldlink.equals(link)) { retract(oldlink); // ie: if it involves the same two IDs found = true; break; copyall(link.getID1(), link.getID2()); copyall(link.getID2(), link.getID1()); Collection<String> klass = getClass(link.getID1()); for (String id : klass) addLink2(new Link(id, link.getID2(), link.getStatus(), LinkKind.DIFFERENT, link.getConfidence())); klass = getClass(link.getID2()); for (String id : klass) addLink2(new Link(id, link.getID1(), link.getStatus(), LinkKind.DIFFERENT, link.getConfidence())); addLink2(link); } else addLink(link);
public String toString() { return "[InMemoryLinkDatabase size: " + getAllLinks().size() + " infer: " + infer + " " + hashCode() + "]"; } }
private void copyall(String id1, String id2) { Collection<String> class1 = getClass(id1); for (String id : class1) { for (Link tocopy : getAllLinksFor(id2)) { String other = tocopy.getOtherId(id2); if (id.equals(other)) continue; addLink2(new Link(id, other, tocopy.getStatus(), tocopy.getKind(), tocopy.getConfidence())); } } }
/** * Loads a test file into an in-memory link database. */ public static LinkDatabase loadTestFile(String testfile) throws IOException { LinkDatabase linkdb = new InMemoryLinkDatabase(); loadTestFile(testfile, linkdb); return linkdb; }
@Test public void testInferenceDifferent() { ((InMemoryLinkDatabase) linkdb).setDoInference(true); Link link1 = new Link("1", "2", LinkStatus.ASSERTED, LinkKind.DIFFERENT, 1.0); linkdb.assertLink(link1); Link link2 = new Link("1", "3", LinkStatus.ASSERTED, LinkKind.DIFFERENT, 1.0); linkdb.assertLink(link2); Collection<Link> links = linkdb.getAllLinks(); assertEquals(2, links.size()); assertTrue(links.contains(link1)); assertTrue(links.contains(link2)); links = linkdb.getAllLinksFor("1"); assertEquals(2, links.size()); assertTrue(links.contains(link1)); assertTrue(links.contains(link2)); links = linkdb.getAllLinksFor("2"); assertEquals(1, links.size()); assertTrue(links.contains(link1)); links = linkdb.getAllLinksFor("3"); assertEquals(1, links.size()); assertTrue(links.contains(link2)); }
private void askQuestions(ExemplarsTracker tracker) { int count = 0; for (Pair pair : tracker.getExemplars()) { if (testdb.inferLink(pair.id1, pair.id2) != null) continue; // we already know the answer Record r1 = database.findRecordById(pair.id1); if (r1 == null) r1 = secondary.get(pair.id1); Record r2 = database.findRecordById(pair.id2); System.out.println(); PrintMatchListener.prettyCompare(r1, r2, (double) pair.counter, "Possible match", config.getProperties()); LinkKind kind = oracle.getLinkKind(pair.id1, pair.id2); Link link = new Link(pair.id1, pair.id2, LinkStatus.ASSERTED, kind, 1.0); testdb.assertLink(link); count++; if (count == questions) break; } asked += count; }
private Collection<String> getClass(String id) { Collection<String> klass = new ArrayList(); klass.add(id); for (Link link : getAllLinksFor(id)) if (link.getKind() == LinkKind.SAME) klass.add(link.getOtherId(id)); return klass; }
private void addLink2(Link link) { // checks for existence first, doesn't add if it already exists boolean found = false; Collection<Link> linkset = links.get(link.getID1()); if (linkset != null) for (Link oldlink : linkset) if (oldlink.equals(link)) return; addLink(link); }
private void askQuestions(ExemplarsTracker tracker) { int count = 0; Filter f = new Filter(tracker.getExemplars()); while (true) { Pair pair = f.getNext(); if (pair == null) break; Record r1 = database.findRecordById(pair.id1); if (r1 == null) r1 = secondary.get(pair.id1); Record r2 = database.findRecordById(pair.id2); System.out.println(); PrintMatchListener.prettyCompare(r1, r2, (double) pair.counter, "Possible match", config.getProperties()); LinkKind kind = oracle.getLinkKind(pair.id1, pair.id2); Link link = new Link(pair.id1, pair.id2, LinkStatus.ASSERTED, kind, 1.0); testdb.assertLink(link); count++; if (count == questions) break; } asked += count; }
/** * Loads a test file into an in-memory link database. * @since 1.2 */ public static LinkDatabase loadTestFile(Reader reader) throws IOException { LinkDatabase linkdb = new InMemoryLinkDatabase(); loadTestFile(reader, linkdb); return linkdb; }
private void copyall(String id1, String id2) { Collection<String> class1 = getClass(id1); for (String id : class1) { for (Link tocopy : getAllLinksFor(id2)) { String other = tocopy.getOtherId(id2); if (id.equals(other)) continue; addLink2(new Link(id, other, tocopy.getStatus(), tocopy.getKind(), tocopy.getConfidence())); } } }
@Test public void testInferenceDifferent2() { ((InMemoryLinkDatabase) linkdb).setDoInference(true); Link link2 = new Link("1", "3", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link2); Link link1 = new Link("1", "2", LinkStatus.ASSERTED, LinkKind.DIFFERENT, 1.0); linkdb.assertLink(link1); // since 1==3, and 1!=2, it follows that 3!=2, too Link link3 = new Link("2", "3", LinkStatus.ASSERTED, LinkKind.DIFFERENT, 1.0); Collection<Link> links = linkdb.getAllLinks(); assertEquals(3, links.size()); assertTrue(links.contains(link1)); assertTrue(links.contains(link2)); assertTrue(links.contains(link3)); links = linkdb.getAllLinksFor("1"); assertEquals(2, links.size()); assertTrue(links.contains(link1)); assertTrue(links.contains(link2)); links = linkdb.getAllLinksFor("2"); assertEquals(2, links.size()); assertTrue(links.contains(link1)); assertTrue(links.contains(link3)); links = linkdb.getAllLinksFor("3"); assertEquals(2, links.size()); assertTrue(links.contains(link2)); assertTrue(links.contains(link3)); }
private Collection<String> getClass(String id) { Collection<String> klass = new ArrayList(); klass.add(id); for (Link link : getAllLinksFor(id)) if (link.getKind() == LinkKind.SAME) klass.add(link.getOtherId(id)); return klass; }
private void addLink2(Link link) { // checks for existence first, doesn't add if it already exists boolean found = false; Collection<Link> linkset = links.get(link.getID1()); if (linkset != null) for (Link oldlink : linkset) if (oldlink.equals(link)) return; addLink(link); }
for (Link oldlink : linkset) if (oldlink.equals(link)) { retract(oldlink); // ie: if it involves the same two IDs found = true; break; copyall(link.getID1(), link.getID2()); copyall(link.getID2(), link.getID1()); Collection<String> klass = getClass(link.getID1()); for (String id : klass) addLink2(new Link(id, link.getID2(), link.getStatus(), LinkKind.DIFFERENT, link.getConfidence())); klass = getClass(link.getID2()); for (String id : klass) addLink2(new Link(id, link.getID1(), link.getStatus(), LinkKind.DIFFERENT, link.getConfidence())); addLink2(link); } else addLink(link);
public LinkFileOracle(String testfile) throws IOException { this.linkdb = new InMemoryLinkDatabase(); linkdb.setDoInference(true); LinkDatabaseUtils.loadTestFile(testfile, linkdb); }
protected LinkDatabase makeDatabase() { return new InMemoryLinkDatabase(); }