private Link link(String id1, String id2, LinkKind kind) { Link link = new Link(id1, id2, LinkStatus.ASSERTED, kind, 1.0); linkdb.assertLink(link); return link; }
linkdb.assertLink(l);
/** * Loads a test file into an in-memory link database. * @since 1.2 */ public static void loadTestFile(Reader input, LinkDatabase linkdb) throws IOException { CSVReader reader = new CSVReader(input); String[] row = reader.next(); while (row != null) { if (row.length != 4) throw new DukeException("Wrong test file format, row had " + row.length + " values, should be 4"); LinkKind kind = row[0].equals("+") ? LinkKind.SAME : LinkKind.DIFFERENT; String id1 = row[1]; String id2 = row[2]; if (id1.compareTo(id2) < 0) { String tmp = id1; id1 = id2; id2 = tmp; } double conf = Double.valueOf(row[3]); linkdb.assertLink(new Link(id1, id2, LinkStatus.ASSERTED, kind, conf)); row = reader.next(); } reader.close(); }
@Test public void testAddOne() { Link link = new Link("1", "2", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link); Collection<Link> links = linkdb.getAllLinks(); assertEquals(links.size(), 1); assertTrue(links.contains(link)); links = linkdb.getAllLinksFor("1"); assertEquals(links.size(), 1); assertTrue(links.contains(link)); links = linkdb.getAllLinksFor("2"); assertEquals(links.size(), 1); assertTrue(links.contains(link)); }
@Test public void testAddIdempotent() { Link link = new Link("1", "2", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link); link = new Link("2", "1", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link); Collection<Link> links = linkdb.getAllLinks(); assertEquals(links.size(), 1); assertTrue(links.contains(link)); links = linkdb.getAllLinksFor("1"); assertEquals(links.size(), 1); assertTrue(links.contains(link)); links = linkdb.getAllLinksFor("2"); assertEquals(links.size(), 1); assertTrue(links.contains(link)); }
@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)); }
@Test public void testInference() { ((InMemoryLinkDatabase) linkdb).setDoInference(true); Link link1 = new Link("1", "2", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link1); Link link2 = new Link("1", "3", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link2); Link link3 = new Link("2", "3", LinkStatus.ASSERTED, LinkKind.SAME, 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)); }
@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)); }
@Test public void testInferenceDifferent2b() { ((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.SAME, 1.0); linkdb.assertLink(link2); // 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)); }
linkdb.assertLink(link1); Link link2 = new Link("3", "4", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link2); Link link3 = new Link("3", "5", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link3); Link link4 = new Link("4", "5", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); Link link5 = new Link("4", "2", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(link5);
public void link(String id1, String id2, double confidence) throws IOException { boolean correct = true; // does this provide new information, or do we know it already? Link inferredlink = null; if (linkdb != null) inferredlink = linkdb.inferLink(id1, id2); // record it if (console != null) { if (inferredlink == null) { correct = console.yesorno(); confidence = 1.0; // the user told us, which is as certain as it gets } else { correct = inferredlink.getKind() == LinkKind.SAME; confidence = inferredlink.getConfidence(); } } // note that we also write inferred links, because the test file // listener does not do inference writer.write(id1, id2, correct, confidence); out.flush(); // make sure we preserve the data if (linkdb != null && inferredlink == null) { Link link = new Link(id1, id2, LinkStatus.ASSERTED, correct ? LinkKind.SAME : LinkKind.DIFFERENT, 1.0); linkdb.assertLink(link); } }
public synchronized void matches(Record r1, Record r2, double confidence) { String id1 = getid(r1); String id2 = getid(r2); Link link = golddb.inferLink(id1, id2); if (link == null) { unknown++; // we don't know if this one is right or not if (debug && !showmatches) PrintMatchListener.show(r1, r2, confidence, "\nNOT IN TEST FILE", props, pretty); } else if (link.getKind() == LinkKind.SAME) // no counting now; we do that when we're done dukedb.assertLink(new Link(id1, id2, LinkStatus.INFERRED, LinkKind.SAME, confidence)); else if (link.getKind() == LinkKind.DIFFERENT) { wrongfound++; // we found it, but it's not right if (debug && !showmatches) PrintMatchListener.show(r1, r2, confidence, "\nINCORRECT", props, pretty); } else { unknown++; // we don't know if this one is right or not if (debug && !showmatches) PrintMatchListener.show(r1, r2, confidence, "\nUNKNOWN LINK TYPE", props, pretty); } }
@Test public void testOverride2() { Link l1 = new Link("1", "2", LinkStatus.ASSERTED, LinkKind.DIFFERENT, 1.0); linkdb.assertLink(l1); Record r1 = makeRecord("id", "1"); Record r2 = makeRecord("id", "2"); listener.startProcessing(); listener.batchReady(1); listener.matches(r1, r2, 1.0); listener.batchDone(); listener.endProcessing(); Collection<Link> all = linkdb.getAllLinks(); assertEquals(1, all.size()); TestUtils.verifySame(new Link("1", "2", LinkStatus.ASSERTED, LinkKind.DIFFERENT, 1.0), all.iterator().next()); }
@Test public void testOverride() { Link l1 = new Link("1", "2", LinkStatus.ASSERTED, LinkKind.SAME, 1.0); linkdb.assertLink(l1); Record r1 = makeRecord("id", "1"); Record r2 = makeRecord("id", "2"); listener.startProcessing(); listener.batchReady(1); listener.matches(r1, r2, 1.0); listener.batchDone(); listener.endProcessing(); Collection<Link> all = linkdb.getAllLinks(); assertEquals(1, all.size()); TestUtils.verifySame(new Link("1", "2", LinkStatus.ASSERTED, LinkKind.SAME, 1.0), all.iterator().next()); }
linkdb.assertLink(l);
/** * Loads a test file into an in-memory link database. * @since 1.2 */ public static void loadTestFile(Reader input, LinkDatabase linkdb) throws IOException { CSVReader reader = new CSVReader(input); String[] row = reader.next(); while (row != null) { if (row.length != 4) throw new DukeException("Wrong test file format, row had " + row.length + " values, should be 4"); LinkKind kind = row[0].equals("+") ? LinkKind.SAME : LinkKind.DIFFERENT; String id1 = row[1]; String id2 = row[2]; if (id1.compareTo(id2) < 0) { String tmp = id1; id1 = id2; id2 = tmp; } double conf = Double.valueOf(row[3]); linkdb.assertLink(new Link(id1, id2, LinkStatus.ASSERTED, kind, conf)); row = reader.next(); } reader.close(); }
public void link(String id1, String id2) throws IOException { boolean correct = true; // does this provide new information, or do we know it already? Link inferredlink = null; if (linkdb != null) inferredlink = linkdb.inferLink(id1, id2); // record it if (console != null) { if (inferredlink == null) correct = console.yesorno(); else correct = inferredlink.getKind() == LinkKind.SAME; } // note that we also write inferred links, because the test file // listener does not do inference writer.write(id1, id2, correct, 1.0); out.flush(); // make sure we preserve the data if (linkdb != null && inferredlink == null) { Link link = new Link(id1, id2, LinkStatus.ASSERTED, correct ? LinkKind.SAME : LinkKind.DIFFERENT, 1.0); linkdb.assertLink(link); } }
public synchronized void matches(Record r1, Record r2, double confidence) { String id1 = getid(r1); String id2 = getid(r2); Link link = golddb.inferLink(id1, id2); if (link == null) { unknown++; // we don't know if this one is right or not if (debug && !showmatches) PrintMatchListener.show(r1, r2, confidence, "\nNOT IN TEST FILE", props, pretty); } else if (link.getKind() == LinkKind.SAME) // no counting now; we do that when we're done dukedb.assertLink(new Link(id1, id2, LinkStatus.INFERRED, LinkKind.SAME, confidence)); else if (link.getKind() == LinkKind.DIFFERENT) { wrongfound++; // we found it, but it's not right if (debug && !showmatches) PrintMatchListener.show(r1, r2, confidence, "\nINCORRECT", props, pretty); } }