package org.freeplane.features.filter; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.freeplane.features.filter.PseudoDamerauLevenshtein.Alignment; import org.junit.Before; import org.junit.Test; public class PseudoDamerauLevenshteinTest { private PseudoDamerauLevenshtein PDL; private ArrayList<PseudoDamerauLevenshtein.Alignment> alignments; @Before public void setUp() { PDL = new PseudoDamerauLevenshtein(); //PDL.init("hobbys", "hobbies", true, true); alignments = new ArrayList<PseudoDamerauLevenshtein.Alignment>(); } // TODO: make minprob for developAlignments() configurable! @Test public void testSimpleFilterAlignments() { String searchTerm = "hobbys"; String searchText = "hobbies"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, searchText, 1.0, 0, 5, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, searchText, 0.5, 0, 5, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(1, alignments.size()); Assert.assertEquals(ali1, alignments.get(0)); } @Test public void testSimpleFilterAlignments2() { String searchTerm = "hobbys"; String searchText = "hobbies"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, searchText, 1.0, 0, 7, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, searchText, 1.0, 0, 7, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(1, alignments.size()); Assert.assertTrue(alignments.get(0) == ali1 ^ alignments.get(0) == ali2); } @Test //filterAlignments([Ali@1ff7a1e[hobb,0,67,0,4], Ali@1aa57fb[hobbi,0,67,0,5], Ali@763f5d[hobbi,0,67,0,5], // Ali@13a317a[hobbie,0,67,0,6], Ali@14a8cd1[hobbies,0,67,0,7], Ali@1630ab9[hobbies,0,67,0,7]]) public void testSimpleFilterAlignments3() { String searchTerm = "hobbys"; String searchText = "hobbies"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, searchText, 0.67, 0, 4, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, searchText, 0.67, 0, 5, 0, 0); PseudoDamerauLevenshtein.Alignment ali3 = PDL.new Alignment(searchTerm, searchText, 0.67, 0, 5, 0, 0); PseudoDamerauLevenshtein.Alignment ali4 = PDL.new Alignment(searchTerm, searchText, 0.67, 0, 6, 0, 0); PseudoDamerauLevenshtein.Alignment ali5 = PDL.new Alignment(searchTerm, searchText, 0.67, 0, 7, 0, 0); PseudoDamerauLevenshtein.Alignment ali6 = PDL.new Alignment(searchTerm, searchText, 0.67, 0, 7, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments.add(ali3); alignments.add(ali4); alignments.add(ali5); alignments.add(ali6); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(1,alignments.size()); Assert.assertTrue(alignments.get(0) == ali5 ^ alignments.get(0) == ali6); } @Test public void testSimpleFilterAlignments4() { String searchTerm = "fit"; String searchText = "xfityfitz"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, searchText, 0.67, 1, 3, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, searchText, 0.67, 1, 5, 0, 0); PseudoDamerauLevenshtein.Alignment ali3 = PDL.new Alignment(searchTerm, searchText, 1.0, 0, 7, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments.add(ali3); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(1, alignments.size()); Assert.assertTrue(alignments.get(0) == ali3); } //filterAlignments-unique([Ali@208aef23[fitf,0,67,1,5], Ali@8035a329[fi,0,67,1,3], Ali@28d2570b[fitz,0,67,4,8], // Ali@3820e7f9[fit,1,00,1,4], Ali@40684fe1[fit,1,00,4,7], Ali@5ab613ed[fi,0,67,4,6]]) @Test public void testSimpleFilterAlignments5() { String searchTerm = "fit"; String searchText = "xfitfitz"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, searchText, 0.67, 1, 5, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, searchText, 0.67, 1, 3, 0, 0); PseudoDamerauLevenshtein.Alignment ali3 = PDL.new Alignment(searchTerm, searchText, 0.67, 4, 8, 0, 0); PseudoDamerauLevenshtein.Alignment ali4 = PDL.new Alignment(searchTerm, searchText, 1.0, 1, 4, 0, 0); PseudoDamerauLevenshtein.Alignment ali5 = PDL.new Alignment(searchTerm, searchText, 1.0, 4, 7, 0, 0); PseudoDamerauLevenshtein.Alignment ali6 = PDL.new Alignment(searchTerm, searchText, 0.67, 4, 6, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments.add(ali3); alignments.add(ali4); alignments.add(ali5); alignments.add(ali6); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(2, alignments.size()); Assert.assertTrue(alignments.contains(ali4)); Assert.assertTrue(alignments.contains(ali5)); } @Test public void testSimpleFilterAlignments6() { String searchTerm = "refugee"; String searchText = "refuge x y"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, "refug-e", 0.86, 0, 6, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, "refuge ", 0.86, 0, 7, 0, 0); // PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, searchText, 0.71, 0, 5, 0, 0); // PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, searchText, 0.86, 0, 6, 0, 0); // PseudoDamerauLevenshtein.Alignment ali3 = PDL.new Alignment(searchTerm, searchText, 0.86, 0, 6, 0, 0); // PseudoDamerauLevenshtein.Alignment ali4 = PDL.new Alignment(searchTerm, searchText, 0.86, 0, 7, 0, 0); // PseudoDamerauLevenshtein.Alignment ali5 = PDL.new Alignment(searchTerm, searchText, 0.71, 0, 8, 0, 0); // PseudoDamerauLevenshtein.Alignment ali6 = PDL.new Alignment(searchTerm, searchText, 0.71, 0, 8, 0, 0); alignments.add(ali1); alignments.add(ali2); // alignments.add(ali3); // alignments.add(ali4); // alignments.add(ali5); // alignments.add(ali6); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(1, alignments.size()); Assert.assertTrue(alignments.contains(ali1) ^ alignments.contains(ali2)); } @Test public void testSimpleFilterAlignments7() { String searchTerm = "thee"; String searchText = "The x y the"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment(searchTerm, "the ", 0.75, 0, 4, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment(searchTerm, "the-", 0.75, 8, 11, 0, 0); PseudoDamerauLevenshtein.Alignment ali3 = PDL.new Alignment(searchTerm, "th-e", 0.75, 8, 11, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments.add(ali3); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(2, alignments.size()); Assert.assertTrue(alignments.contains(ali1)); Assert.assertTrue(alignments.contains(ali2) ^ alignments.contains(ali3)); } @Test public void testSimpleFilterAlignments8() { String searchTerm = "jdsfaskd"; String searchText = "jsdaljasdf"; PDL.init(searchTerm, searchText, true, true); alignments.clear(); PseudoDamerauLevenshtein.Alignment ali1 = PDL.new Alignment("", "", 1.0, 2, 4, 0, 0); PseudoDamerauLevenshtein.Alignment ali2 = PDL.new Alignment("", "", 0.8, 3, 5, 0, 0); PseudoDamerauLevenshtein.Alignment ali3 = PDL.new Alignment("", "", 0.9, 4, 6, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments.add(ali3); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(2, alignments.size()); Assert.assertTrue(alignments.contains(ali1) && alignments.contains(ali3)); alignments.clear(); ali1 = PDL.new Alignment("", "", 0.8, 2, 4, 0, 0); ali2 = PDL.new Alignment("", "", 0.9, 3, 5, 0, 0); ali3 = PDL.new Alignment("", "", 0.9, 4, 6, 0, 0); alignments.add(ali1); alignments.add(ali2); alignments.add(ali3); alignments = PseudoDamerauLevenshtein.filterAlignments(alignments); Assert.assertEquals(1, alignments.size()); Assert.assertTrue(alignments.contains(ali2)); } @Test public void testOverlapsWith() { // 0. [1,4] [1,4] => true Assert.assertTrue(PDL.new Alignment("", "", 0.0, 1, 4, 0, 0) .overlapsWith(PDL.new Alignment("", "", 0.0, 1, 4, 0, 0))); // 1. [1,2] [2,4] => false Assert.assertFalse(PDL.new Alignment("", "", 0.0, 1, 2, 0, 0) .overlapsWith(PDL.new Alignment("", "", 0.0, 2, 4, 0, 0))); // 2. [1,3] [2,5] => true Assert.assertTrue(PDL.new Alignment("", "", 0.0, 1, 3, 0, 0) .overlapsWith(PDL.new Alignment("", "", 0.0, 2, 5, 0, 0))); // 3. [1,5] [0,6] => true Assert.assertTrue(PDL.new Alignment("", "", 0.0, 1, 5, 0, 0) .overlapsWith(PDL.new Alignment("", "", 0.0, 0, 6, 0, 0))); // 4. [2,4] [1,2] => false Assert.assertFalse(PDL.new Alignment("", "", 0.0, 2, 4, 0, 0) .overlapsWith(PDL.new Alignment("", "", 0.0, 1, 2, 0, 0))); // 5. [2,5] [1,3] => true Assert.assertTrue(PDL.new Alignment("", "", 0.0, 2, 5, 0, 0) .overlapsWith(PDL.new Alignment("", "", 0.0, 1, 3, 0, 0))); } @Test public void testLongAlignment1() { PDL.init("thee", "The x y the", true, false); // alfdsj the aflsjd thex jlsadf thee. List<PseudoDamerauLevenshtein.Alignment> alis = PDL.computeAlignments(0.65); System.out.format("-------testLongAlignment1() final alignments:\n\n"); for (Alignment ali: alis) { ali.print(); for (Alignment ali2: alis) { if (ali == ali2) continue; Assert.assertFalse(ali.overlapsWith(ali2)); } } System.out.format("-------END OF testLongAlignment1() final alignments:\n\n"); } @Test public void testSimpleAlignments() { // TODO: special test for alignments! System.out.format("\n\n-------testSimpleAlignments() ------------------------\n"); PseudoDamerauLevenshtein DL = new PseudoDamerauLevenshtein(); //DL.init("AB", "CD", false, true); //DL.init("ACD", "ADE", false, true); //DL.init("AB", "XAB", false, true); //DL.init("AB", "XAB", true, true); //DL.init("fit", "xfity", true, true); //DL.init("fit", "xxfityyy", true, true); //DL.init("ABCD", "BACD", false, true); //DL.init("fit", "xfityfitz", true, true); //DL.init("fit", "xfitfitz", true, true); //DL.init("fit", "xfitfitfitfitz", true, true); //DL.init("setup", "set up", true, true); //DL.init("set up", "setup", true, true); //DL.init("hobbies", "hobbys", true, true); //DL.init("hobbys", "hobbies", true, true); //DL.init("thee", "The x y the jdlsjds salds", true, false); DL.init("Bismark", "... Bismarck lived...Bismarck reigned...", true, true); //DL.init("refugee", "refuge x y", true, true); //StringMatchingStrategy.APPROXIMATE_MATCHING_MINPROB List<PseudoDamerauLevenshtein.Alignment> alis = DL.computeAlignments(0.65); System.out.format("----------result of testSimpleAlignments() ---------------------\n\n"); for (Alignment ali: alis) { ali.print(); } } }