(* Common names *) maintainCommonNames := Module[{filescore, scoredata, sources, file, lines, line2, name, cname, cnames, cnamesdata, c, syns, set,namesused, synsused, scoremax, cname0, m, cname1, flag1, cname2, flag2}, ClearAll[scoreSource, commonNamesData, commonNamesScore, commonName, commonNames]; commonNamesData[_String] := {}; commonNamesScore[_String] := {}; commonName[_String] := ""; commonNames[_String] := {}; filescore = FileNameJoin[{dirCnames, "scores.txt"}]; checkfile[filescore]; scoredata = Import[filescore, "Table"]; Print["maintainCommonNames: Scores: ", TableForm[scoredata]]; sources = Transpose[scoredata][[1]]; (scoreSource[#[[1]]] = #[[2]]) & /@ scoredata; Do[ file = FileNameJoin[{dirCnames, source <> ".dat"}]; lines = Import[file, "Lines"]; Do[ line2 = stringtrim /@ StringSplit[line, ":", 2]; If[Length[line2] != 2, Print["Error: commonNamesData: ", source, ": ", line]; Continue[]]; {name, cname} = line2; If[! MemberQ[namesAndSynonyms, name], Continue[]]; cnames = stringtrim /@ StringSplit[cname, ","]; cnames = {#, source} & /@ cnames; commonNamesData[name] = Join[commonNamesData[name], cnames], {line, lines}], {source, sources}]; Do[ cnamesdata = commonNamesData[name]; If[cnamesdata =!= {}, c = 1; cnamesdata = {#[[1]], c scoreSource[#[[2]]]} & /@ cnamesdata; commonNamesScore[name] = Join[commonNamesScore[name], cnamesdata]; ]; syns = Complement[nameSynonyms[name], accNamesList]; set = picSet[name]; namesused = Flatten[(namesPic @@ #) & /@ set]; synsused = Intersection[syns, namesused]; synonymsUsed[name] = synsused; cnamesdata = Join @@ (commonNamesData /@ synsused); If[cnamesdata =!= {}, noPrint[name, synsused, cnamesdata]; c = 0.95; cnamesdata = {#[[1]], c scoreSource[#[[2]]]} & /@ cnamesdata; commonNamesScore[name] = Join[commonNamesScore[name], cnamesdata]; ]; synsunique = Complement[syns, synsused]; synsunique = Select[synsunique, (Length[synonymOf[#]] == 1) &]; cnamesdata = Join @@ (commonNamesData /@ synsunique); If[cnamesdata =!= {}, noPrint["-- ", name, synsunique, cnamesdata]; c = 0.01; cnamesdata = {#[[1]], c scoreSource[#[[2]]]} & /@ cnamesdata; commonNamesScore[name] = Join[commonNamesScore[name], cnamesdata]; ], {name, accNamesList}]; Do[ cnames = commonNamesScore[name]; If[cnames === {}, Continue[]]; cnames = Sort[cnames, (#1[[2]] > #2[[2]]) &]; commonName[name] = cnames[[1, 1]]; scoremax = cnames[[1, 2]]; If[scoremax > 1, cnames = Select[cnames, (#[[2]] > 1) &]]; cnames = Table[ {cname, score} = cname2; cname0 = stringtrim[StringReplace[ToLowerCase[cname], {"mushroom" -> "", "fungus" -> "", "lichen" -> "", "slime mold" -> "", "-" -> " "}]]; {cname, cname0, 1}, {cname2, cnames}]; m = Length[cnames]; Do[ {cname, cname1, flag1} = cnames[[m1]]; Do[ {cname, cname2, flag2} = cnames[[m2]]; If[flag2 == 0, Continue[]]; If[! StringFreeQ[cname2, cname1] || DamerauLevenshteinDistance[cname2, cname1] <= 2, cnames[[m1, 3]] = 0]; , {m2, m1 - 1}], {m1, 2, m}]; cnames = Select[cnames, (#[[3]] != 0) &]; cnames = First /@ cnames; commonNames[name] = cnames, {name, accNamesList}]; ]; synonymsUsed[_String] := {};