(* Getting list of mushrooms *) (* names0 - list of all mushroom names namespic - names of mushrooms shown on pictures names1 - names of mushrooms NOT shown on pictures *) mushroomsonpicture[pic_] := {}; maintainList := ( Print["Running maintainList ..."]; SetDirectory[dirwork]; dupnames = { (* Duplicate names on pictures *) "Pseudomerulius aureus", "Pholiota spumosa", (* ? *) "Tricholoma stiparophyllum", (* ? *) (* "Tricholoma focale", (* ? *) *) "Boletus porosporus", (* ? *) "Collybia confluens", "Collybia peronata", "Bolbitius vitellinus", "Bankera fuligineoalba", "Cantharellus tubaeformis", "Hypocrea leucopus", "Clavicorona pyxidata", "Xerocomus badius", (* Imleria badia, Bay bolete - wiki *) "Gymnopus peronatus", "Inocybe fastigiata", "Clavulina coralloides", "Cortinarius camphoratus", "Lycoperdon excipuliforme" (* Handkea excipuliformis *) }; (* (* Obsolete and bad names that are present in html-lists *) nonames = { "Leccinum piceinum", "Lycoperdon acuminatum", "Pholiota pinicola", "Russula lutea" }; *) namedata = {engnames, rusnamesWikigrib, rusnames1, rusnames2, rusnames3, rusnames4, rusnames5, rusnames6}; (*namedata = Map[StringReplace[#, misprints] &, namedata, {3}];*) names = Join @@ namedata; (* names2 = (stringtrim /@ #) & /@ names; names = Transpose[names2][[1]]; *) names = Transpose[names][[1]]; names = Join[names, addnames]; names = stringtrim /@ names; names = Select[names, StringMatchQ[#, RegularExpression["[A-Z][a-z]+ [a-z]+[-]?[a-z]+"]]&]; (*names0 = Union[Complement[names, nonames]];*) names0 = Union[names]; Print["Available ", Length[names0], " mushroom names: ", Short[names0]]; (* *) filesql = ToFileName[dirdata, "datasql.mx"]; If[ifNoSQL =!= True, openSQL; datalist = Table[ (* here, synon is the list of common names *) (* name = data[[n, 1]]; synon = Drop[data[[n]], 1]; If[Length[synon] > 0, If[StringMatchQ[synon[[1]], RegularExpression["[0-9]+|[a-z]+[-][0-9]+"]], synon = Drop[synon, 1]]]; synon = Flatten[StringSplit[#, {Whitespace ... ~~ "," ~~ Whitespace ...}] & /@ synon]; *) (* synon = Select[names2, (#[[1]] === name)&]; synon = If[synon === {}, {}, Transpose[synon][[2]]]; synon = Union[synon]; synon = StringSplit[#, {Whitespace ... ~~ "/" ~~ Whitespace ..., Whitespace ... ~~ "(" ~~ Whitespace ..., Whitespace ... ~~ ")" ~~ Whitespace ...}] & /@ synon; synon = Union[Flatten[synon]]; (* For Russion letters e and eo, choose eo where possible *) {e, eo} = {"\:0435", "\:0451"}; syns = Gather[synon, ((StringReplace[#1, eo -> e] === StringReplace[#2, eo -> e]) &)]; synon = Table[ syn1 = syn[[1]]; If[Length[syn] > 1, sn = StringLength[syn1]; Do[ Do[If[StringTake[synn, {n, n}] === eo, syn1 = StringReplacePart[syn1, eo, {n, n}]], {n, sn}], {synn, syn}]; ]; syn1, {syn, syns}]; (* *) (* For Russion letters ya and a, choose a where possible *) {e, eo} = {"\:044f", "\:0430"}; syns = Gather[synon, ((StringReplace[#1, eo -> e] === StringReplace[#2, eo -> e]) &)]; synon = Table[ syn1 = syn[[1]]; If[Length[syn] > 1, sn = StringLength[syn1]; Do[ Do[If[StringTake[synn, {n, n}] === eo, syn1 = StringReplacePart[syn1, eo, {n, n}]], {n, sn}], {synn, syn}]; ]; syn1, {syn, syns}]; *) (* For different letter cases, choose lower case where possible *) (* ToLowerCase does not work for Russian letters! *) (* syns = Gather[synon, ((ToLowerCase[#1] === ToLowerCase[#2]) &)]; synon = Table[ syn1 = syn[[1]]; If[Length[syn] > 1, sn = StringLength[syn1]; Do[ Do[ s = StringTake[synn, {n, n}]; s1 = ToLowerCase[s]; If[s === s1, syn1 = StringReplacePart[syn1, s, {n, n}]], {n, sn}], {synn, syn}]; ]; syn1, {syn, syns}]; *) synon = "Reserved place"; datasql = SQLExecute[conn, "SELECT * FROM pictures WHERE (MATCH (caption) AGAINST ('+\"russia\" +\"" <> name <> "\"' IN BOOLEAN MODE));"]; datasql = { ToString[#[[2]]], (* year *) ToString[#[[3]]], (* roll *) #[[4]],(* pic *) StringReplace[#[[5]], RegularExpression["(\\w+) (s\\W)"] -> "$1'$2"], (* caption *) #[[6]], (* x-size *) #[[7]], (* 7-size *) #[[13]][[1]], (* date *) #[[14]] (* pop *) } & /@ datasql; datasql = Select[datasql, MemberQ[yearsrussia, ToExpression[#[[1]]]] &]; {name, synon, datasql}, {name, names0}]; CloseSQLConnection[conn]; datalist = Select[datalist, #[[3]] =!= {} &]; DumpSave[filesql, datalist], Print["Warning: Taking SQL results from the previously saved data."]; Get[filesql]]; mdatalist = Length[datalist]; namespic = #[[1]] & /@ datalist; Print["There are ", mdatalist, " mushrooms from the list with pictures: ", Short[namespic, 20]]; names1 = Complement[names0, namespic]; m1 = Length[names1]; Print["There are ", m1, " mushrooms for which pictures are not available: ", Short[names1, 10]]; alldatasql = Flatten[#[[3]] & /@ datalist, 1] // Union; (picsize[#[[2]], #[[3]]] = {#[[5]], #[[6]]})& /@ alldatasql; rmushpictures = (Take[#, 3] & /@ alldatasql) // Union; rmushpictures = Sort[rmushpictures, 100 ToExpression[#1[[2]]] + ToExpression[#1[[3]]] < 100 ToExpression[#2[[2]]] + ToExpression[#2[[3]]]&]; Print["There are ", Length[rmushpictures], " pictures showing Russian mushrooms: ", Short[rmushpictures, 5]]; ryears = ToExpression[#[[1]]] & /@ rmushpictures; ryearmin = Min[ryears]; ryearmax = Max[ryears]; Print["Years span: ", ryearmin, " - ", ryearmax]; Print["Pictures per year: ", ryears // Tally // Transpose // TableForm]; Do[ names = Select[datalist, MemberQ[Transpose[Take[Transpose[#[[3]]], 3]], picture] &]; names = #[[1]] & /@ names; If[Length[names] > 1, names = Complement[names, dupnames]]; If[Length[names] > 1, Print["Warning: ambigous: mushroomsonpicture[", picture, "] = ", names]]; mushroomsonpicture[picture] = names, {picture, rmushpictures}]; Do[ {name, names, datasql} = data; (* names = StringReplace[#, RegularExpression["(\\w+) (s\\W)"] -> "$1'$2"]& /@ names;*) mushnames[name] = names; mushdatasql[name] = datasql, {data, datalist}]; (* plantdatasql["Suaeda maritima"] = Complement[plantdatasql["Suaeda maritima"], plantdatasql["Salsola soda"]]; *) namestable = {namespic, StringDrop[StringDrop[ToString[mushnames[#]], 1], -1] & /@ namespic} // Transpose; (* -( prints Reserved space )- printnames[namestable // TableForm];*) alldatasql = Join @@ Transpose[datalist][[3]]; (* Save list of mushroom names for adding links on home pages *) filelist = ToFileName[dirwork, "mushroomlist.txt"]; Export[filelist, namespic, "Lines"]; );