diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 9174bed19..9fa67d7c1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -1,11 +1,13 @@ package eu.dnetlib.pace.common; import java.text.Normalizer; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import com.google.common.collect.Maps; +import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; @@ -18,6 +20,7 @@ import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.FieldListImpl; +import org.apache.spark.util.CollectionsUtils; /** * Set of common functions @@ -32,8 +35,8 @@ public abstract class AbstractPaceFunctions { protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; - private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎"; - private static final String aliases_to = "0123456789+-=()n0123456789+-=()"; + private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; + private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; protected final static FieldList EMPTY_FIELD = new FieldListImpl(); @@ -84,7 +87,7 @@ public abstract class AbstractPaceFunctions { return s.replaceAll("\\D", ""); } - protected String fixAliases(final String s) { + protected static String fixAliases(final String s) { final StringBuilder sb = new StringBuilder(); for (final char ch : Lists.charactersOf(s)) { final int i = StringUtils.indexOf(aliases_from, ch); @@ -164,4 +167,66 @@ public abstract class AbstractPaceFunctions { return h; } + public static Map loadMapFromClasspath(final String classpath) { + final Map m = new HashMap<>(); + try { + for (final String s: IOUtils.readLines(JaroWinklerNormalizedName.class.getResourceAsStream(classpath))) { + //string is like this: code;word1;word2;word3 + String[] line = s.split(";"); + String value = line[0]; + for (String key: line){ + m.put(fixAliases(key),value); + } + } + } catch (final Throwable e){ + return new HashMap<>(); + } + return m; + } + + //translate the string: replace the keywords with the code + public String translate(String s1, Map translationMap){ + final StringTokenizer st = new StringTokenizer(s1); + final StringBuilder sb = new StringBuilder(); + while (st.hasMoreTokens()){ + final String token = st.nextToken(); + sb.append(" " + translationMap.getOrDefault(token,token) + " "); + } + return sb.toString(); + } + + public String removeCodes(String s) { + final String regex = " \\d+ "; + return s.replaceAll(regex, "").trim(); + } + + //check if 2 strings have same keywords + public boolean sameKeywords(String s1, String s2){ + //all keywords in common + //return getKeywords(s1).containsAll(getKeywords(s2)) && getKeywords(s2).containsAll(getKeywords(s1)); + + //at least 1 keyword in common + if (getKeywords(s1).isEmpty() || getKeywords(s2).isEmpty()) + return true; + else + return CollectionUtils.intersection(getKeywords(s1),getKeywords(s2)).size()>0; + } + + //get the list of keywords in a string + public List getKeywords(String s) { + + final String regex = " \\d+ "; + + Pattern p = Pattern.compile(regex, Pattern.MULTILINE); + Matcher m = p.matcher(s); + List codes = new ArrayList<>(); + while (m.find()) { + codes.add(Integer.parseInt(m.group(0).replace(" ", ""))); + for (int i = 1; i <= m.groupCount(); i++) { + codes.add(Integer.parseInt(m.group(0).replace(" ", ""))); + } + } + return codes; + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java new file mode 100644 index 000000000..ec312cc97 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -0,0 +1,77 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +@DistanceClass("JaroWinklerNormalizedName") +public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { + + private static Set stopwordsEn = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + private static Set stopwordsIt = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); + private static Set stopwordsDe = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); + private static Set stopwordsFr = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); + private static Set stopwordsPt = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); + private static Set stopwordsEs = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); + + //key=word, value=global identifier => example: "università"->"university", used to substitute the word with the global identifier + private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); + + public JaroWinklerNormalizedName(Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + } + + public JaroWinklerNormalizedName(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected JaroWinklerNormalizedName(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(String a, String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + ca = removeStopwords(ca); + cb = removeStopwords(cb); + + //replace keywords with codes + ca = translate(ca, translationMap); + cb = translate(cb, translationMap); + + if (sameKeywords(ca,cb)) { + return normalize(ssalgo.score(removeCodes(ca), removeCodes(cb))); + } + return 0.0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + + public String removeStopwords(String s) { + String normString = normalize(s); + + normString = filterStopWords(normString, stopwordsIt); + normString = filterStopWords(normString, stopwordsEn); + normString = filterStopWords(normString, stopwordsDe); + normString = filterStopWords(normString, stopwordsFr); + normString = filterStopWords(normString, stopwordsPt); + normString = filterStopWords(normString, stopwordsEs); + + return normString; + } +} diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt new file mode 100644 index 000000000..24666a649 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt @@ -0,0 +1,621 @@ +a +ab +aber +ach +acht +achte +achten +achter +achtes +ag +alle +allein +allem +allen +aller +allerdings +alles +allgemeinen +als +also +am +an +ander +andere +anderem +anderen +anderer +anderes +anderm +andern +anderr +anders +au +auch +auf +aus +ausser +ausserdem +außer +außerdem +b +bald +bei +beide +beiden +beim +beispiel +bekannt +bereits +besonders +besser +besten +bin +bis +bisher +bist +c +d +d.h +da +dabei +dadurch +dafür +dagegen +daher +dahin +dahinter +damals +damit +danach +daneben +dank +dann +daran +darauf +daraus +darf +darfst +darin +darum +darunter +darüber +das +dasein +daselbst +dass +dasselbe +davon +davor +dazu +dazwischen +daß +dein +deine +deinem +deinen +deiner +deines +dem +dementsprechend +demgegenüber +demgemäss +demgemäß +demselben +demzufolge +den +denen +denn +denselben +der +deren +derer +derjenige +derjenigen +dermassen +dermaßen +derselbe +derselben +des +deshalb +desselben +dessen +deswegen +dich +die +diejenige +diejenigen +dies +diese +dieselbe +dieselben +diesem +diesen +dieser +dieses +dir +doch +dort +drei +drin +dritte +dritten +dritter +drittes +du +durch +durchaus +durfte +durften +dürfen +dürft +e +eben +ebenso +ehrlich +ei +ei, +eigen +eigene +eigenen +eigener +eigenes +ein +einander +eine +einem +einen +einer +eines +einig +einige +einigem +einigen +einiger +einiges +einmal +eins +elf +en +ende +endlich +entweder +er +ernst +erst +erste +ersten +erster +erstes +es +etwa +etwas +euch +euer +eure +eurem +euren +eurer +eures +f +folgende +früher +fünf +fünfte +fünften +fünfter +fünftes +für +g +gab +ganz +ganze +ganzen +ganzer +ganzes +gar +gedurft +gegen +gegenüber +gehabt +gehen +geht +gekannt +gekonnt +gemacht +gemocht +gemusst +genug +gerade +gern +gesagt +geschweige +gewesen +gewollt +geworden +gibt +ging +gleich +gott +gross +grosse +grossen +grosser +grosses +groß +große +großen +großer +großes +gut +gute +guter +gutes +h +hab +habe +haben +habt +hast +hat +hatte +hatten +hattest +hattet +heisst +her +heute +hier +hin +hinter +hoch +hätte +hätten +i +ich +ihm +ihn +ihnen +ihr +ihre +ihrem +ihren +ihrer +ihres +im +immer +in +indem +infolgedessen +ins +irgend +ist +j +ja +jahr +jahre +jahren +je +jede +jedem +jeden +jeder +jedermann +jedermanns +jedes +jedoch +jemand +jemandem +jemanden +jene +jenem +jenen +jener +jenes +jetzt +k +kam +kann +kannst +kaum +kein +keine +keinem +keinen +keiner +keines +kleine +kleinen +kleiner +kleines +kommen +kommt +konnte +konnten +kurz +können +könnt +könnte +l +lang +lange +leicht +leide +lieber +los +m +machen +macht +machte +mag +magst +mahn +mal +man +manche +manchem +manchen +mancher +manches +mann +mehr +mein +meine +meinem +meinen +meiner +meines +mensch +menschen +mich +mir +mit +mittel +mochte +mochten +morgen +muss +musst +musste +mussten +muß +mußt +möchte +mögen +möglich +mögt +müssen +müsst +müßt +n +na +nach +nachdem +nahm +natürlich +neben +nein +neue +neuen +neun +neunte +neunten +neunter +neuntes +nicht +nichts +nie +niemand +niemandem +niemanden +noch +nun +nur +o +ob +oben +oder +offen +oft +ohne +ordnung +p +q +r +recht +rechte +rechten +rechter +rechtes +richtig +rund +s +sa +sache +sagt +sagte +sah +satt +schlecht +schluss +schon +sechs +sechste +sechsten +sechster +sechstes +sehr +sei +seid +seien +sein +seine +seinem +seinen +seiner +seines +seit +seitdem +selbst +sich +sie +sieben +siebente +siebenten +siebenter +siebentes +sind +so +solang +solche +solchem +solchen +solcher +solches +soll +sollen +sollst +sollt +sollte +sollten +sondern +sonst +soweit +sowie +später +startseite +statt +steht +suche +t +tag +tage +tagen +tat +teil +tel +tritt +trotzdem +tun +u +uhr +um +und +und? +uns +unse +unsem +unsen +unser +unsere +unserer +unses +unter +v +vergangenen +viel +viele +vielem +vielen +vielleicht +vier +vierte +vierten +vierter +viertes +vom +von +vor +w +wahr? +wann +war +waren +warst +wart +warum +was +weg +wegen +weil +weit +weiter +weitere +weiteren +weiteres +welche +welchem +welchen +welcher +welches +wem +wen +wenig +wenige +weniger +weniges +wenigstens +wenn +wer +werde +werden +werdet +weshalb +wessen +wie +wieder +wieso +will +willst +wir +wird +wirklich +wirst +wissen +wo +woher +wohin +wohl +wollen +wollt +wollte +wollten +worden +wurde +wurden +während +währenddem +währenddessen +wäre +würde +würden +x +y +z +z.b +zehn +zehnte +zehnten +zehnter +zehntes +zeit +zu +zuerst +zugleich +zum +zunächst +zur +zurück +zusammen +zwanzig +zwar +zwei +zweite +zweiten +zweiter +zweites +zwischen +zwölf +über +überhaupt +übrigens \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt new file mode 100644 index 000000000..0cf607df2 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt @@ -0,0 +1,732 @@ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +_ +a +actualmente +acuerdo +adelante +ademas +además +adrede +afirmó +agregó +ahi +ahora +ahí +al +algo +alguna +algunas +alguno +algunos +algún +alli +allí +alrededor +ambos +ampleamos +antano +antaño +ante +anterior +antes +apenas +aproximadamente +aquel +aquella +aquellas +aquello +aquellos +aqui +aquél +aquélla +aquéllas +aquéllos +aquí +arriba +arribaabajo +aseguró +asi +así +atras +aun +aunque +ayer +añadió +aún +b +bajo +bastante +bien +breve +buen +buena +buenas +bueno +buenos +c +cada +casi +cerca +cierta +ciertas +cierto +ciertos +cinco +claro +comentó +como +con +conmigo +conocer +conseguimos +conseguir +considera +consideró +consigo +consigue +consiguen +consigues +contigo +contra +cosas +creo +cual +cuales +cualquier +cuando +cuanta +cuantas +cuanto +cuantos +cuatro +cuenta +cuál +cuáles +cuándo +cuánta +cuántas +cuánto +cuántos +cómo +d +da +dado +dan +dar +de +debajo +debe +deben +debido +decir +dejó +del +delante +demasiado +demás +dentro +deprisa +desde +despacio +despues +después +detras +detrás +dia +dias +dice +dicen +dicho +dieron +diferente +diferentes +dijeron +dijo +dio +donde +dos +durante +día +días +dónde +e +ejemplo +el +ella +ellas +ello +ellos +embargo +empleais +emplean +emplear +empleas +empleo +en +encima +encuentra +enfrente +enseguida +entonces +entre +era +erais +eramos +eran +eras +eres +es +esa +esas +ese +eso +esos +esta +estaba +estabais +estaban +estabas +estad +estada +estadas +estado +estados +estais +estamos +estan +estando +estar +estaremos +estará +estarán +estarás +estaré +estaréis +estaría +estaríais +estaríamos +estarían +estarías +estas +este +estemos +esto +estos +estoy +estuve +estuviera +estuvierais +estuvieran +estuvieras +estuvieron +estuviese +estuvieseis +estuviesen +estuvieses +estuvimos +estuviste +estuvisteis +estuviéramos +estuviésemos +estuvo +está +estábamos +estáis +están +estás +esté +estéis +estén +estés +ex +excepto +existe +existen +explicó +expresó +f +fin +final +fue +fuera +fuerais +fueran +fueras +fueron +fuese +fueseis +fuesen +fueses +fui +fuimos +fuiste +fuisteis +fuéramos +fuésemos +g +general +gran +grandes +gueno +h +ha +haber +habia +habida +habidas +habido +habidos +habiendo +habla +hablan +habremos +habrá +habrán +habrás +habré +habréis +habría +habríais +habríamos +habrían +habrías +habéis +había +habíais +habíamos +habían +habías +hace +haceis +hacemos +hacen +hacer +hacerlo +haces +hacia +haciendo +hago +han +has +hasta +hay +haya +hayamos +hayan +hayas +hayáis +he +hecho +hemos +hicieron +hizo +horas +hoy +hube +hubiera +hubierais +hubieran +hubieras +hubieron +hubiese +hubieseis +hubiesen +hubieses +hubimos +hubiste +hubisteis +hubiéramos +hubiésemos +hubo +i +igual +incluso +indicó +informo +informó +intenta +intentais +intentamos +intentan +intentar +intentas +intento +ir +j +junto +k +l +la +lado +largo +las +le +lejos +les +llegó +lleva +llevar +lo +los +luego +lugar +m +mal +manera +manifestó +mas +mayor +me +mediante +medio +mejor +mencionó +menos +menudo +mi +mia +mias +mientras +mio +mios +mis +misma +mismas +mismo +mismos +modo +momento +mucha +muchas +mucho +muchos +muy +más +mí +mía +mías +mío +míos +n +nada +nadie +ni +ninguna +ningunas +ninguno +ningunos +ningún +no +nos +nosotras +nosotros +nuestra +nuestras +nuestro +nuestros +nueva +nuevas +nuevo +nuevos +nunca +o +ocho +os +otra +otras +otro +otros +p +pais +para +parece +parte +partir +pasada +pasado +paìs +peor +pero +pesar +poca +pocas +poco +pocos +podeis +podemos +poder +podria +podriais +podriamos +podrian +podrias +podrá +podrán +podría +podrían +poner +por +por qué +porque +posible +primer +primera +primero +primeros +principalmente +pronto +propia +propias +propio +propios +proximo +próximo +próximos +pudo +pueda +puede +pueden +puedo +pues +q +qeu +que +quedó +queremos +quien +quienes +quiere +quiza +quizas +quizá +quizás +quién +quiénes +qué +r +raras +realizado +realizar +realizó +repente +respecto +s +sabe +sabeis +sabemos +saben +saber +sabes +sal +salvo +se +sea +seamos +sean +seas +segun +segunda +segundo +según +seis +ser +sera +seremos +será +serán +serás +seré +seréis +sería +seríais +seríamos +serían +serías +seáis +señaló +si +sido +siempre +siendo +siete +sigue +siguiente +sin +sino +sobre +sois +sola +solamente +solas +solo +solos +somos +son +soy +soyos +su +supuesto +sus +suya +suyas +suyo +suyos +sé +sí +sólo +t +tal +tambien +también +tampoco +tan +tanto +tarde +te +temprano +tendremos +tendrá +tendrán +tendrás +tendré +tendréis +tendría +tendríais +tendríamos +tendrían +tendrías +tened +teneis +tenemos +tener +tenga +tengamos +tengan +tengas +tengo +tengáis +tenida +tenidas +tenido +tenidos +teniendo +tenéis +tenía +teníais +teníamos +tenían +tenías +tercera +ti +tiempo +tiene +tienen +tienes +toda +todas +todavia +todavía +todo +todos +total +trabaja +trabajais +trabajamos +trabajan +trabajar +trabajas +trabajo +tras +trata +través +tres +tu +tus +tuve +tuviera +tuvierais +tuvieran +tuvieras +tuvieron +tuviese +tuvieseis +tuviesen +tuvieses +tuvimos +tuviste +tuvisteis +tuviéramos +tuviésemos +tuvo +tuya +tuyas +tuyo +tuyos +tú +u +ultimo +un +una +unas +uno +unos +usa +usais +usamos +usan +usar +usas +uso +usted +ustedes +v +va +vais +valor +vamos +van +varias +varios +vaya +veces +ver +verdad +verdadera +verdadero +vez +vosotras +vosotros +voy +vuestra +vuestras +vuestro +vuestros +w +x +y +ya +yo +z +él +éramos +ésa +ésas +ése +ésos +ésta +éstas +éste +éstos +última +últimas +último +últimos \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt new file mode 100644 index 000000000..0e2789f49 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt @@ -0,0 +1,689 @@ +a +abord +absolument +afin +ah +ai +aie +aient +aies +ailleurs +ainsi +ait +allaient +allo +allons +allô +alors +anterieur +anterieure +anterieures +apres +après +as +assez +attendu +au +aucun +aucune +aucuns +aujourd +aujourd'hui +aupres +auquel +aura +aurai +auraient +aurais +aurait +auras +aurez +auriez +aurions +aurons +auront +aussi +autre +autrefois +autrement +autres +autrui +aux +auxquelles +auxquels +avaient +avais +avait +avant +avec +avez +aviez +avions +avoir +avons +ayant +ayez +ayons +b +bah +bas +basee +bat +beau +beaucoup +bien +bigre +bon +boum +bravo +brrr +c +car +ce +ceci +cela +celle +celle-ci +celle-là +celles +celles-ci +celles-là +celui +celui-ci +celui-là +celà +cent +cependant +certain +certaine +certaines +certains +certes +ces +cet +cette +ceux +ceux-ci +ceux-là +chacun +chacune +chaque +cher +chers +chez +chiche +chut +chère +chères +ci +cinq +cinquantaine +cinquante +cinquantième +cinquième +clac +clic +combien +comme +comment +comparable +comparables +compris +concernant +contre +couic +crac +d +da +dans +de +debout +dedans +dehors +deja +delà +depuis +dernier +derniere +derriere +derrière +des +desormais +desquelles +desquels +dessous +dessus +deux +deuxième +deuxièmement +devant +devers +devra +devrait +different +differentes +differents +différent +différente +différentes +différents +dire +directe +directement +dit +dite +dits +divers +diverse +diverses +dix +dix-huit +dix-neuf +dix-sept +dixième +doit +doivent +donc +dont +dos +douze +douzième +dring +droite +du +duquel +durant +dès +début +désormais +e +effet +egale +egalement +egales +eh +elle +elle-même +elles +elles-mêmes +en +encore +enfin +entre +envers +environ +es +essai +est +et +etant +etc +etre +eu +eue +eues +euh +eurent +eus +eusse +eussent +eusses +eussiez +eussions +eut +eux +eux-mêmes +exactement +excepté +extenso +exterieur +eûmes +eût +eûtes +f +fais +faisaient +faisant +fait +faites +façon +feront +fi +flac +floc +fois +font +force +furent +fus +fusse +fussent +fusses +fussiez +fussions +fut +fûmes +fût +fûtes +g +gens +h +ha +haut +hein +hem +hep +hi +ho +holà +hop +hormis +hors +hou +houp +hue +hui +huit +huitième +hum +hurrah +hé +hélas +i +ici +il +ils +importe +j +je +jusqu +jusque +juste +k +l +la +laisser +laquelle +las +le +lequel +les +lesquelles +lesquels +leur +leurs +longtemps +lors +lorsque +lui +lui-meme +lui-même +là +lès +m +ma +maint +maintenant +mais +malgre +malgré +maximale +me +meme +memes +merci +mes +mien +mienne +miennes +miens +mille +mince +mine +minimale +moi +moi-meme +moi-même +moindres +moins +mon +mot +moyennant +multiple +multiples +même +mêmes +n +na +naturel +naturelle +naturelles +ne +neanmoins +necessaire +necessairement +neuf +neuvième +ni +nombreuses +nombreux +nommés +non +nos +notamment +notre +nous +nous-mêmes +nouveau +nouveaux +nul +néanmoins +nôtre +nôtres +o +oh +ohé +ollé +olé +on +ont +onze +onzième +ore +ou +ouf +ouias +oust +ouste +outre +ouvert +ouverte +ouverts +o| +où +p +paf +pan +par +parce +parfois +parle +parlent +parler +parmi +parole +parseme +partant +particulier +particulière +particulièrement +pas +passé +pendant +pense +permet +personne +personnes +peu +peut +peuvent +peux +pff +pfft +pfut +pif +pire +pièce +plein +plouf +plupart +plus +plusieurs +plutôt +possessif +possessifs +possible +possibles +pouah +pour +pourquoi +pourrais +pourrait +pouvait +prealable +precisement +premier +première +premièrement +pres +probable +probante +procedant +proche +près +psitt +pu +puis +puisque +pur +pure +q +qu +quand +quant +quant-à-soi +quanta +quarante +quatorze +quatre +quatre-vingt +quatrième +quatrièmement +que +quel +quelconque +quelle +quelles +quelqu'un +quelque +quelques +quels +qui +quiconque +quinze +quoi +quoique +r +rare +rarement +rares +relative +relativement +remarquable +rend +rendre +restant +reste +restent +restrictif +retour +revoici +revoilà +rien +s +sa +sacrebleu +sait +sans +sapristi +sauf +se +sein +seize +selon +semblable +semblaient +semble +semblent +sent +sept +septième +sera +serai +seraient +serais +serait +seras +serez +seriez +serions +serons +seront +ses +seul +seule +seulement +si +sien +sienne +siennes +siens +sinon +six +sixième +soi +soi-même +soient +sois +soit +soixante +sommes +son +sont +sous +souvent +soyez +soyons +specifique +specifiques +speculatif +stop +strictement +subtiles +suffisant +suffisante +suffit +suis +suit +suivant +suivante +suivantes +suivants +suivre +sujet +superpose +sur +surtout +t +ta +tac +tandis +tant +tardive +te +tel +telle +tellement +telles +tels +tenant +tend +tenir +tente +tes +tic +tien +tienne +tiennes +tiens +toc +toi +toi-même +ton +touchant +toujours +tous +tout +toute +toutefois +toutes +treize +trente +tres +trois +troisième +troisièmement +trop +très +tsoin +tsouin +tu +té +u +un +une +unes +uniformement +unique +uniques +uns +v +va +vais +valeur +vas +vers +via +vif +vifs +vingt +vivat +vive +vives +vlan +voici +voie +voient +voilà +vont +vos +votre +vous +vous-mêmes +vu +vé +vôtre +vôtres +w +x +y +z +zut +à +â +ça +ès +étaient +étais +était +étant +état +étiez +étions +été +étée +étées +étés +êtes +être +ô \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt new file mode 100644 index 000000000..2003b42d2 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt @@ -0,0 +1,660 @@ +a +abbastanza +abbia +abbiamo +abbiano +abbiate +accidenti +ad +adesso +affinche +agl +agli +ahime +ahim㨠+ahimè +ai +al +alcuna +alcuni +alcuno +all +alla +alle +allo +allora +altre +altri +altrimenti +altro +altrove +altrui +anche +ancora +anni +anno +ansa +anticipo +assai +attesa +attraverso +avanti +avemmo +avendo +avente +aver +avere +averlo +avesse +avessero +avessi +avessimo +aveste +avesti +avete +aveva +avevamo +avevano +avevate +avevi +avevo +avrai +avranno +avrebbe +avrebbero +avrei +avremmo +avremo +avreste +avresti +avrete +avrà +avrò +avuta +avute +avuti +avuto +basta +ben +bene +benissimo +berlusconi +brava +bravo +buono +c +casa +caso +cento +certa +certe +certi +certo +che +chi +chicchessia +chiunque +ci +ciascuna +ciascuno +cima +cinque +cio +cioe +cio㨠+cioè +circa +citta +città +cittã +ciã² +ciò +co +codesta +codesti +codesto +cogli +coi +col +colei +coll +coloro +colui +come +cominci +comprare +comunque +con +concernente +conciliarsi +conclusione +consecutivi +consecutivo +consiglio +contro +cortesia +cos +cosa +cosi +cos㬠+così +cui +d +da +dagl +dagli +dai +dal +dall +dalla +dalle +dallo +dappertutto +davanti +degl +degli +dei +del +dell +della +delle +dello +dentro +detto +deve +devo +di +dice +dietro +dire +dirimpetto +diventa +diventare +diventato +dopo +doppio +dov +dove +dovra +dovrà +dovrã +dovunque +due +dunque +durante +e +ebbe +ebbero +ebbi +ecc +ecco +ed +effettivamente +egli +ella +entrambi +eppure +era +erano +eravamo +eravate +eri +ero +esempio +esse +essendo +esser +essere +essi +ex +fa +faccia +facciamo +facciano +facciate +faccio +facemmo +facendo +facesse +facessero +facessi +facessimo +faceste +facesti +faceva +facevamo +facevano +facevate +facevi +facevo +fai +fanno +farai +faranno +fare +farebbe +farebbero +farei +faremmo +faremo +fareste +faresti +farete +farà +farò +fatto +favore +fece +fecero +feci +fin +finalmente +finche +fine +fino +forse +forza +fosse +fossero +fossi +fossimo +foste +fosti +fra +frattempo +fu +fui +fummo +fuori +furono +futuro +generale +gente +gia +giacche +giorni +giorno +giu +già +giã +gli +gliela +gliele +glieli +glielo +gliene +governo +grande +grazie +gruppo +ha +haha +hai +hanno +ho +i +ie +ieri +il +improvviso +in +inc +indietro +infatti +inoltre +insieme +intanto +intorno +invece +io +l +la +lasciato +lato +lavoro +le +lei +li +lo +lontano +loro +lui +lungo +luogo +là +lã +ma +macche +magari +maggior +mai +male +malgrado +malissimo +mancanza +marche +me +medesimo +mediante +meglio +meno +mentre +mesi +mezzo +mi +mia +mie +miei +mila +miliardi +milioni +minimi +ministro +mio +modo +molta +molti +moltissimo +molto +momento +mondo +mosto +nazionale +ne +negl +negli +nei +nel +nell +nella +nelle +nello +nemmeno +neppure +nessun +nessuna +nessuno +niente +no +noi +nome +non +nondimeno +nonostante +nonsia +nostra +nostre +nostri +nostro +novanta +nove +nulla +nuovi +nuovo +o +od +oggi +ogni +ognuna +ognuno +oltre +oppure +ora +ore +osi +ossia +ottanta +otto +paese +parecchi +parecchie +parecchio +parte +partendo +peccato +peggio +per +perche +perch㨠+perchè +perché +percio +perciã² +perciò +perfino +pero +persino +persone +perã² +però +piedi +pieno +piglia +piu +piuttosto +piã¹ +più +po +pochissimo +poco +poi +poiche +possa +possedere +posteriore +posto +potrebbe +preferibilmente +presa +press +prima +primo +principalmente +probabilmente +promesso +proprio +puo +pure +purtroppo +puã² +può +qua +qualche +qualcosa +qualcuna +qualcuno +quale +quali +qualunque +quando +quanta +quante +quanti +quanto +quantunque +quarto +quasi +quattro +quel +quella +quelle +quelli +quello +quest +questa +queste +questi +questo +qui +quindi +quinto +realmente +recente +recentemente +registrazione +relativo +riecco +rispetto +salvo +sara +sarai +saranno +sarebbe +sarebbero +sarei +saremmo +saremo +sareste +saresti +sarete +sarà +sarã +sarò +scola +scopo +scorso +se +secondo +seguente +seguito +sei +sembra +sembrare +sembrato +sembrava +sembri +sempre +senza +sette +si +sia +siamo +siano +siate +siete +sig +solito +solo +soltanto +sono +sopra +soprattutto +sotto +spesso +srl +sta +stai +stando +stanno +starai +staranno +starebbe +starebbero +starei +staremmo +staremo +stareste +staresti +starete +starà +starò +stata +state +stati +stato +stava +stavamo +stavano +stavate +stavi +stavo +stemmo +stessa +stesse +stessero +stessi +stessimo +stesso +steste +stesti +stette +stettero +stetti +stia +stiamo +stiano +stiate +sto +su +sua +subito +successivamente +successivo +sue +sugl +sugli +sui +sul +sull +sulla +sulle +sullo +suo +suoi +tale +tali +talvolta +tanto +te +tempo +terzo +th +ti +titolo +torino +tra +tranne +tre +trenta +triplo +troppo +trovato +tu +tua +tue +tuo +tuoi +tutta +tuttavia +tutte +tutti +tutto +uguali +ulteriore +ultimo +un +una +uno +uomo +va +vai +vale +vari +varia +varie +vario +verso +vi +via +vicino +visto +vita +voi +volta +volte +vostra +vostre +vostri +vostro +㨠+è \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt new file mode 100644 index 000000000..53e429818 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt @@ -0,0 +1,560 @@ +a +acerca +adeus +agora +ainda +alem +algmas +algo +algumas +alguns +ali +além +ambas +ambos +ano +anos +antes +ao +aonde +aos +apenas +apoio +apontar +apos +após +aquela +aquelas +aquele +aqueles +aqui +aquilo +as +assim +através +atrás +até +aí +baixo +bastante +bem +boa +boas +bom +bons +breve +cada +caminho +catorze +cedo +cento +certamente +certeza +cima +cinco +coisa +com +como +comprido +conhecido +conselho +contra +contudo +corrente +cuja +cujas +cujo +cujos +custa +cá +da +daquela +daquelas +daquele +daqueles +dar +das +de +debaixo +dela +delas +dele +deles +demais +dentro +depois +desde +desligado +dessa +dessas +desse +desses +desta +destas +deste +destes +deve +devem +deverá +dez +dezanove +dezasseis +dezassete +dezoito +dia +diante +direita +dispoe +dispoem +diversa +diversas +diversos +diz +dizem +dizer +do +dois +dos +doze +duas +durante +dá +dão +dúvida +e +ela +elas +ele +eles +em +embora +enquanto +entao +entre +então +era +eram +essa +essas +esse +esses +esta +estado +estamos +estar +estará +estas +estava +estavam +este +esteja +estejam +estejamos +estes +esteve +estive +estivemos +estiver +estivera +estiveram +estiverem +estivermos +estivesse +estivessem +estiveste +estivestes +estivéramos +estivéssemos +estou +está +estás +estávamos +estão +eu +exemplo +falta +fará +favor +faz +fazeis +fazem +fazemos +fazer +fazes +fazia +faço +fez +fim +final +foi +fomos +for +fora +foram +forem +forma +formos +fosse +fossem +foste +fostes +fui +fôramos +fôssemos +geral +grande +grandes +grupo +ha +haja +hajam +hajamos +havemos +havia +hei +hoje +hora +horas +houve +houvemos +houver +houvera +houveram +houverei +houverem +houveremos +houveria +houveriam +houvermos +houverá +houverão +houveríamos +houvesse +houvessem +houvéramos +houvéssemos +há +hão +iniciar +inicio +ir +irá +isso +ista +iste +isto +já +lado +lhe +lhes +ligado +local +logo +longe +lugar +lá +maior +maioria +maiorias +mais +mal +mas +me +mediante +meio +menor +menos +meses +mesma +mesmas +mesmo +mesmos +meu +meus +mil +minha +minhas +momento +muito +muitos +máximo +mês +na +nada +nao +naquela +naquelas +naquele +naqueles +nas +nem +nenhuma +nessa +nessas +nesse +nesses +nesta +nestas +neste +nestes +no +noite +nome +nos +nossa +nossas +nosso +nossos +nova +novas +nove +novo +novos +num +numa +numas +nunca +nuns +não +nível +nós +número +o +obra +obrigada +obrigado +oitava +oitavo +oito +onde +ontem +onze +os +ou +outra +outras +outro +outros +para +parece +parte +partir +paucas +pegar +pela +pelas +pelo +pelos +perante +perto +pessoas +pode +podem +poder +poderá +podia +pois +ponto +pontos +por +porque +porquê +portanto +posição +possivelmente +posso +possível +pouca +pouco +poucos +povo +primeira +primeiras +primeiro +primeiros +promeiro +propios +proprio +própria +próprias +próprio +próprios +próxima +próximas +próximo +próximos +puderam +pôde +põe +põem +quais +qual +qualquer +quando +quanto +quarta +quarto +quatro +que +quem +quer +quereis +querem +queremas +queres +quero +questão +quieto +quinta +quinto +quinze +quáis +quê +relação +sabe +sabem +saber +se +segunda +segundo +sei +seis +seja +sejam +sejamos +sem +sempre +sendo +ser +serei +seremos +seria +seriam +será +serão +seríamos +sete +seu +seus +sexta +sexto +sim +sistema +sob +sobre +sois +somente +somos +sou +sua +suas +são +sétima +sétimo +só +tal +talvez +tambem +também +tanta +tantas +tanto +tarde +te +tem +temos +tempo +tendes +tenha +tenham +tenhamos +tenho +tens +tentar +tentaram +tente +tentei +ter +terceira +terceiro +terei +teremos +teria +teriam +terá +terão +teríamos +teu +teus +teve +tinha +tinham +tipo +tive +tivemos +tiver +tivera +tiveram +tiverem +tivermos +tivesse +tivessem +tiveste +tivestes +tivéramos +tivéssemos +toda +todas +todo +todos +trabalhar +trabalho +treze +três +tu +tua +tuas +tudo +tão +tém +têm +tínhamos +um +uma +umas +uns +usa +usar +vai +vais +valor +veja +vem +vens +ver +verdade +verdadeiro +vez +vezes +viagem +vindo +vinte +você +vocês +vos +vossa +vossas +vosso +vossos +vários +vão +vêm +vós +zero +à +às +área +é +éramos +és +último \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv new file mode 100644 index 000000000..201a31b90 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -0,0 +1,47 @@ +1;university;università;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;Uniwersytet;университет;universiteit;πανεπιστήμιο +2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές +3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα +4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο +5;hospital;ospedale;hôpital;hospital;hospital;Krankenhaus;szpital;больница;ziekenhuis;νοσοκομείο +6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα +7;college;collegio;université;colegio;faculdade;Hochschule;Szkoła Wyższa;Высшая школа;universiteit;κολλέγιο +8;foundation;fondazione;fondation;fundación;fundação;Stiftung;Fundacja;фонд;stichting;ίδρυμα +9;center;centro;centre;centro;centro;zentrum;centrum;центр;centrum;κέντρο +10;national;nazionale;national;nationale;nationaux;nationales;nacional;nacional;national;krajowy;национальный;nationaal;nationale;εθνικό +11;association;associazione;association;asociación;associação;Verein;verband;stowarzyszenie;ассоциация;associatie +12;society;societa;société;sociedad;sociedade;gesellschaft;społeczeństwo;общество;maatschappij;κοινωνία +13;international;internazionale;international;internacional;internacional;international;międzynarodowy;Международный;internationaal;internationale;διεθνής;διεθνή;διεθνές +14;community;comunita;communauté;comunidad;comunidade;Gemeinschaft;społeczność;сообщество;gemeenschap;κοινότητα +15;school;scuola;école;escuela;escola;schule;Szkoła;школа;school;σχολείο +16;education;educazione;éducation;educacion;Educação;Bildung;Edukacja;образование;opleiding;εκπαίδευση +17;academy;accademia;académie;academia;academia;Akademie;akademie;академия;academie;ακαδημία +18;public;pubblico;public;publique;publics;publiques;publico;publico;Öffentlichkeit;publiczny;публичный;publiek;publieke;δημόσιος;δημόσια;δημόσιο +19;museum;museo;musée;mueso;museu;museum;muzeum;музей;museum;μουσείο +20;group;gruppo;groupe;grupo;grupo;gruppe;grupa;группа;groep;ομάδα;όμιλος +21;department;dipartimento;département;departamento;departamento;abteilung;departament;отдел;afdeling;τμήμα +22;council;consiglio;conseil;Consejo;conselho;gesellschaft;rada;совет;raad;συμβούλιο +23;library;biblioteca;bibliothèque;biblioteca;biblioteca;Bibliothek;biblioteka;библиотека;bibliotheek;βιβλιοθήκη +24;ministry;ministero;ministère;ministerio;ministério;Ministerium;ministerstwo;министерство;ministerie;υπουργείο +25;services;servizi;services;servicios;Serviços;Dienstleistungen;usługi;услуги;diensten;υπηρεσίες +26;central;centrale;central;centrale;centrales;central;central;zentral;centralny;цетральный;centraal;κεντρικός;κεντρική;κεντρικό;κεντρικά +27;general;generale;général;générale;généraux;générales;general;geral;general;Allgemeines;general;общий;algemeen;algemene;γενικός;γενική;γενικό;γενικά +28;applied;applicati;appliqué;appliquée;appliqués;appliquées;aplicado;aplicada;angewendet;stosowany;прикладной;toegepast;toegepaste;εφαρμοσμένος;εφαρμοσμένη;εφαρμοσμένο;εφαρμοσμένα +29;european;europee;europea;européen;européenne;européens;européennes;europeo;europeu;europäisch;europejski;европейский;Europees;Europese;ευρωπαϊκός;ευρωπαϊκή;ευρωπαϊκό;ευρωπαϊκά +30;agency;agenzia;agence;agencia;agencia;agentur;agencja;агенция;agentschap;πρακτορείο +31;laboratory;laboratorio;laboratoire;laboratorio;laboratorio;labor;laboratorium;лаборатория;laboratorium;εργαστήριο +32;industry;industria;industrie;индустрия;industrie;βιομηχανία +33;industrial;industriale;industriel;industrielle;industriels;industrielles;индустриальный;industrieel;βιομηχανικός;βιομηχανική;βιομηχανικό;βιομηχανικά;βιομηχανικές +34;consortium;consorzio;consortium;консорциум;consortium;κοινοπραξία +35;organization;organizzazione;organisation;organización;organização;organizacja;организация;organisatie;οργανισμός +36;authority;autorità;autorité;авторитет;autoriteit +37;federation;federazione;fédération;федерация;federatie;ομοσπονδία +38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο +39;bureau;ufficio;bureau;офис;bureau;γραφείο +40;company;impresa;compagnie;société;компания;bedrijf;εταιρία +41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο +42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός +43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία +44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί +45;institution;istituzione;institution;институциональный;instelling;ινστιτούτο +46;division;divisione;division;отделение;divisie;τμήμα +47;committee;comitato;comité;комитет;commissie;επιτροπή \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 9d3919194..13288c9fa 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -3,11 +3,13 @@ package eu.dnetlib.pace; import java.io.IOException; import java.io.StringWriter; +import com.sun.webkit.network.URLs; import org.apache.commons.io.IOUtils; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldValueImpl; +import org.junit.Test; public abstract class AbstractPaceTest { @@ -29,4 +31,8 @@ public abstract class AbstractPaceTest { return new FieldValueImpl(Type.JSON, "person", s); } + protected Field url(final String s) { + return new FieldValueImpl(Type.URL, "url", s); + } + } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index c8bbda17c..71c23a811 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -5,6 +5,8 @@ import java.util.Map; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.model.Field; import org.junit.Before; import org.junit.Test; @@ -17,6 +19,16 @@ public class ClusteringFunctionTest extends AbstractPaceTest { params = Maps.newHashMap(); } + @Test + public void testUrlClustering() { + + final ClusteringFunction urlClustering = new UrlClustering(params); + + final String s = "http://www.test.it/path/to/resource"; + System.out.println(s); + System.out.println(urlClustering.apply(Lists.newArrayList(url(s)))); + } + @Test public void testNgram() { params.put("ngramLen", 3); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index f28251c57..a9068a893 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -1,18 +1,27 @@ package eu.dnetlib.pace.distance; +import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; +import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Test; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class DistanceAlgoTest extends AbstractPaceFunctions { private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; + private Map params; @Before public void setup() { System.out.println("****************************************************************"); System.out.println("Test String : " + TEST_STRING); + params = new HashMap<>(); + params.put("weight", 1.0); } @Test @@ -35,4 +44,12 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { System.out.println("cleaned up : " + cleanup(TEST_STRING)); } + @Test + public void testJaroWinklerNormalizedName() { + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("universita degli studi di genova", "universita di genova"); + + System.out.println(result); + } + }