#include "search/query_params.hpp" #include "search/ranking_utils.hpp" #include "search/token_range.hpp" #include #include namespace search { using namespace std; namespace { // All synonyms should be lowercase. /// @todo These should check the map language and use only the corresponding translation. unordered_map> const kSynonyms = { /// @todo Should process synonyms with errors like "blvrd" -> "blvd". /// @see HouseOnStreetSynonymsWithMisprints test. {"1", {"pierwszy", "pierwsza", "un", "una", "pierwsze", "primo", "واحد", "حادى", "احد"}}, {"1st", {"first"}}, {"1°", {"primo"}}, {"20", {"venti", "عشرين", "عشرون"}}, {"25", {"venticinque", "خمسه و عشرون", "خمس و عشرين"}}, {"2", {"due", "drugi", "drugie", "druga", "اثنان", "اثنين"}}, {"2nd", {"second"}}, {"3", {"trzecia", "trzecie", "tre", "trzeci", "ثلاث"}}, {"3rd", {"third"}}, {"4", {"quattro", "اربع"}}, {"4th", {"fourth"}}, {"5", {"cinque", "خمس"}}, {"5th", {"fifth"}}, {"6", {"sei", "ست"}}, {"6th", {"sixth"}}, {"7", {"sette", "سبع"}}, {"7th", {"seventh"}}, {"8", {"otto", "ثمان", "ثمانيه"}}, {"8th", {"eighth"}}, {"9", {"nove", "تسع"}}, {"9th", {"ninth"}}, {"10th", {"tenth"}}, {"11th", {"eleventh"}}, {"12th", {"twelfth"}}, {"13th", {"thirteenth"}}, {"14th", {"fourteenth"}}, {"15th", {"fifteenth"}}, {"16th", {"sixteenth"}}, {"17th", {"seventeenth"}}, {"18th", {"eighteenth"}}, {"19th", {"nineteenth"}}, {"20th", {"twentieth"}}, {"a", {"am", "auto-estrada", "aikštė"}}, {"abe", {"abbaye"}}, {"accs", {"access"}}, {"aceq", {"acequia"}}, {"ach", {"ancien chemin"}}, //{"a.d", {"auf der", "an der"}}, // unreachable {"adi", {"ambodi"}}, {"adm", {"admirała", "admirał"}}, {"afb", {"air force base"}}, {"agl", {"agglomération"}}, {"aha", {"andoha"}}, {"ahi", {"ambohi"}}, {"aire", {"aire", "aires"}}, {"akh", {"allgemeines krankenhaus"}}, {"al", {"alejach", "aleją", "alley", "alei", "alue", "aleja", "alameda", "alle", "aleea", "aleje", "allee"}}, {"alam", {"alameda"}}, {"alea", {"aleea"}}, {"ale", {"aleea"}}, {"alf", {"alferes"}}, {"all", {"alley", "allées", "allée"}}, {"ally", {"alley"}}, {"alm", {"almirante"}}, {"alque", {"alquería"}}, {"alwy", {"alleyway"}}, {"aly", {"alley"}}, {"ambl", {"amble"}}, {"andad", {"andador"}}, {"angb", {"air national guard base"}}, {"angta", {"angosta"}}, {"ani", {"ambony"}}, {"ano", {"andrano"}}, {"anse", {"anse"}}, {"any", {"ambinany"}}, {"aparc", {"aparcament"}}, {"apch", {"approach"}}, {"apdro", {"apeadero"}}, {"apmt", {"apartament"}}, {"app", {"approach"}}, {"aprt", {"airport"}}, {"apt", {"apartat", "apartment"}}, {"apto", {"apartamento"}}, {"aptos", {"apartamentos"}}, {"apts", {"apartments"}}, {"arb", {"arboleda"}}, {"arc", {"arcade", "arcades"}}, {"arq", {"arquiteto", "arquitecto"}}, {"arqº", {"arquiteto", "arquitecto"}}, {"arral", {"arrabal"}}, {"arry", {"arroyo"}}, {"art", {"anciennes routes", "ancienne route"}}, {"artl", {"arterial"}}, {"arty", {"artery"}}, {"as", {"asema"}}, {"asi", {"ampasi"}}, {"ass", {"associação"}}, {"asz", {"altstoffsammelzentrum"}}, {"àt", {"àtic"}}, {"ato", {"ambato"}}, {"atr", {"ambohitr"}}, {"auk", {"aukio"}}, {"aut", {"autoroute"}}, {"auto", {"autopista"}}, {"autop", {"autopista"}}, {"autov", {"autovía", "autovia"}}, {"avª", {"avenida"}}, {"av", {"avinguda", "avenida", "avenue"}}, {"avda", {"avinguda", "avenida"}}, {"avd", {"avinguda", "avenida"}}, {"ave", {"avenue"}}, {"awg", {"awang"}}, {"az", {"azinhaga"}}, {"ba", {"banan"}}, {"balnr", {"balneario"}}, {"barda", {"barriada"}}, {"basn", {"basin"}}, {"bast", {"baston"}}, {"bat", {"batalionu", "batalion", "batalionów", "bataliony"}}, {"bayer", {"bayerische", "bayerisch", "bayerischer", "bayerisches"}}, {"b", {"berg", "barri", "bach", "barriada", "banda", "bairro", "bad", "bei"}}, {"bc", {"beco"}}, {"bch", {"bas chemin", "beach"}}, {"bcle", {"boucle"}}, {"bco", {"beco"}}, {"bda", {"banda", "baixada"}}, {"bd", {"boulevard", "bulevardul"}}, {"bđ", {"bưu điện"}}, {"bdge", {"bridge"}}, {"bdul", {"bulevardul"}}, {"bdwy", {"broadway"}}, {"bdy", {"boundary"}}, {"begi", {"béguinage", "béguinages"}}, {"bend", {"bend"}}, {"ber", {"berges", "berge"}}, {"bez", {"bezirk"}}, {"bg", {"bundesgymnasium", "burg", "berg"}}, {"bgld", {"burgenländische", "burgenländisches", "burgenländischer"}}, {"bgm", {"bürgermeister"}}, {"bgy", {"barangay"}}, {"bhf", {"bahnhof"}}, {"bibl", {"biblioteca"}}, {"bk", {"back"}}, {"bł", {"błogosławionego", "błogosławiona", "błogosławionej", "błogosławieni", "błogosławionych", "błogosławiony"}}, {"bl", {"bulvar", "bulvarı", "bowl", "bloc", "bloco"}}, {"bldg", {"building"}}, {"bldgs", {"buildings"}}, {"bldngs", {"buildings"}}, {"blk", {"block"}}, {"blq", {"bloque"}}, {"blv", {"bulvar", "bulevardul"}}, {"blvd", {"boulevard", "bulevardul"}}, {"blvr", {"bulevar"}}, {"blvrd", {"boulevard"}}, {"bnc", {"barranc"}}, {"bnd", {"bend"}}, {"bº", {"bairro"}}, {"bo", {"barrio"}}, {"boul", {"boulevard"}}, {"bpa", {"biskupa", "biskup"}}, {"bp", {"biskupa", "biskup"}}, {"bpd", {"bundespolizeidirektion"}}, {"bps", {"bypass"}}, {"bqllo", {"barranquil"}}, {"branc", {"barranco"}}, {"br", {"bridge", "brücke", "broeder", "brae", "bairro", "brace"}}, {"brdg", {"bridge"}}, {"bre", {"barrières", "barrière"}}, {"brg", {"brigadeiro", "bourg", "bundesrealgymnasium"}}, {"brgy", {"barangay"}}, {"bri", {"bridge"}}, {"brk", {"break", "brook"}}, {"bro", {"brother"}}, {"brw", {"brow"}}, {"bsn", {"basin"}}, {"bstd", {"bastide"}}, {"bt", {"bukit"}}, {"bul", {"bulevardul"}}, {"bulevard", {"bulevardul"}}, {"bulevardu", {"bulevardul"}}, {"bulev", {"bulevardul"}}, {"bulw", {"bulwar"}}, {"burg", {"burgemeester"}}, {"bus", {"business"}}, {"but", {"butte"}}, {"bv", {"bombeiros voluntários"}}, {"bvd", {"boulevard"}}, {"bway", {"broadway"}}, {"bwlk", {"boardwalk"}}, {"bwy", {"broadway"}}, {"bxs", {"baixos"}}, {"bypa", {"bypass"}}, {"byp", {"bypass"}}, {"bywy", {"byway"}}, {"cac", {"cacique"}}, {"cª", {"companhia"}}, {"cal", {"calea"}}, {"cale", {"cale"}}, {"callej", {"callejón"}}, {"cam", {"caminho", "camino"}}, {"campg", {"camping"}}, {"cant", {"cantón", "cantonada"}}, {"canti", {"cantina"}}, {"cantr", {"cantera"}}, {"cap", {"capitão"}}, {"capt", {"capitan", "captain"}}, {"car", {"carrefour", "carré"}}, {"care", {"carrières", "carrière"}}, {"carr", {"carré"}}, {"carref", {"carrefour"}}, {"cau", {"carreau"}}, {"caus", {"causeway"}}, {"cav", {"cavée"}}, {"cbtiz", {"cobertizo"}}, {"cc", {"calçada", "centro comercial"}}, {"call", {"calleja", "callejón"}}, {"c", {"cesta", "carrer", "calle", "centre"}}, {"cckq", {"căn cứ không quân"}}, {"ccnh", {"calçadinha"}}, {"cct", {"circuit"}}, {"ccvcn", {"circunvalación"}}, {"cad", {"cadde"}}, {"cd", {"cadde", "caddesi"}}, {"cđ", {"cao đẳng"}}, {"cds", {"cul-de-sac"}}, {"ceb", {"ciclo do ensino básico"}}, {"ce", {"cove"}}, {"cee", {"colexio de educación especial", "colegio de educación especial"}}, {"cei", {"colegio de educación infantil", "colexio de educación infantil"}}, {"ceip", {"colexio de educación infantil e primaria", "colegio de educación infantil y primaria"}}, {"cel", {"coronel"}}, {"cem", {"cementiri"}}, {"cen", {"center", "centre"}}, {"cft", {"croft"}}, {"cgne", {"campagne"}}, {"ch", {"church", "chaussee", "chemin", "chairman", "chase"}}, {"che", {"chemins", "chemin"}}, {"chem", {"cheminements", "cheminement"}}, {"chi", {"charmille"}}, {"chl", {"chalet"}}, {"chor", {"chorążego", "chorąży"}}, {"chp", {"chapelle"}}, {"chs", {"chaussée", "chaussées"}}, {"cht", {"château"}}, {"chv", {"chemins vicinaux", "chemin vicinal"}}, {"ci", {"circuit"}}, {"cifp", {"centro integrado de formación profesional"}}, {"cint", {"cinturón", "cinturó"}}, {"cir", {"circle"}}, {"circt", {"circuit"}}, {"cite", {"cités", "cité"}}, {"cjla", {"callejuela"}}, {"cjón", {"callejón"}}, {"cjto", {"conjunto"}}, {"ck", {"creek"}}, {"clb", {"câu lạc bộ"}}, {"cl", {"close", "calle"}}, {"cllja", {"calleja"}}, {"cllón", {"callejón"}}, {"cllzo", {"callizo"}}, {"cloi", {"cloître"}}, {"clos", {"clos"}}, {"cm", {"câmara municipal"}}, {"cmdt", {"commandant", "comandante"}}, {"cmn", {"common"}}, {"cmno", {"camino"}}, {"cmpd", {"compound"}}, {"cnc", {"concourse"}}, {"cno", {"camino"}}, {"cnr", {"corner"}}, {"cnvto", {"convento"}}, {"cnwy", {"centreway"}}, {"co", {"county"}}, {"col", {"colonia", "col", "colonel"}}, {"coli", {"collines", "colline"}}, {"col·l", {"col·legi"}}, {"com", {"comissaria"}}, {"comend", {"comendador"}}, {"comm", {"common", "community", "commission"}}, {"compj", {"complejo"}}, {"conc", {"concession"}}, {"con", {"concourse"}}, {"cong", {"congressman"}}, {"cons", {"conselheiro"}}, {"convt", {"convent"}}, {"coop", {"cooperativa", "cooperative"}}, {"cor", {"corniches", "corniche", "coronel"}}, {"corr", {"correus"}}, {"coste", {"costera"}}, {"cote", {"côteau", "côte"}}, {"cott", {"cottage", "cottages"}}, {"cotts", {"cottages"}}, {"cov", {"cove"}}, {"cowy", {"crossway"}}, {"cp", {"codi postal", "col·legi públic"}}, {"cpd", {"compound"}}, {"cpg", {"camping"}}, {"cpl", {"corporal"}}, {"cps", {"copse"}}, {"cpt", {"captain"}}, {"cra", {"colexio rural agrupado", "carrera", "colegio rural agrupado"}}, {"crc", {"circus"}}, {"cr", {"creek", "crescent", "county route", "county road"}}, {"crcs", {"circus"}}, {"crd", {"crossroad"}}, {"cres", {"crescent"}}, {"crk", {"creek"}}, {"crn", {"corner"}}, {"crnrs", {"corners"}}, {"cro", {"carrero"}}, {"cró", {"carreró"}}, {"crois", {"croissant"}}, {"cross", {"crossing"}}, {"crrdo", {"corredor"}}, {"crrlo", {"corralillo"}}, {"crs", {"cours"}}, {"crsg", {"crossing"}}, {"crss", {"cross"}}, {"crst", {"crest"}}, {"crt", {"court"}}, {"crtil", {"carretil"}}, {"crtjo", {"cortijo"}}, {"csac", {"cul-de-sac"}}, {"cs", {"cross"}}, {"čs", {"československé", "československého", "československých"}}, {"csg", {"crossing"}}, {"csl", {"casal"}}, {"čsl", {"československej", "československé", "československého", "československých"}}, {"cso", {"corso"}}, {"csrio", {"caserío"}}, {"cstan", {"costanilla"}}, {"cst", {"castel", "crest"}}, {"cswy", {"causeway"}}, {"cta", {"cuesta"}}, {"ct", {"court", "công trường"}}, {"ctcp", {"công ty cổ phần"}}, {"ctra", {"carretera"}}, {"ctr", {"center", "contour", "centre"}}, {"ctre", {"central", "centre"}}, {"ctrin", {"carreterín"}}, {"ctrl", {"central"}}, {"cty", {"city", "công ty"}}, {"cty cp", {"công ty cổ phần"}}, {"ctyd", {"courtyard"}}, {"cutt", {"cutting"}}, {"cv", {"công viên", "cove", "cave"}}, {"cve", {"curve"}}, {"cvn", {"caravan"}}, {"cvvh", {"công viên văn hóa"}}, {"cway", {"causeway"}}, {"cyd", {"courtyard"}}, {"czada", {"calzada"}}, {"dª", {"dona"}}, {"dars", {"darse"}}, {"dav", {"deutscher alpenverein"}}, {"d´", {"de"}}, {"d", {"dom", "dona"}}, {"đ", {"đường"}}, {"deg", {"degrés", "degré"}}, {"demar", {"demarcación"}}, {"dep", {"deputado"}}, {"dep't", {"department"}}, {"dept", {"department", "departamento"}}, {"devn", {"deviation"}}, {"df", {"dorf"}}, {"đh", {"đại học"}}, {"dhsa", {"dehesa"}}, {"diag", {"diagonal"}}, {"dig", {"digues", "digue"}}, {"disem", {"diseminado"}}, {"distr", {"districte"}}, {"divers", {"diversion"}}, {"dkm", {"denkmal"}}, {"đl", {"đại lộ"}}, {"dle", {"dale"}}, {"dln", {"dolna", "dolne", "dolny"}}, {"dn", {"down", "downs"}}, {"dom", {"domaine", "domaines"}}, {"dq", {"duque"}}, {"dra", {"doctora", "doutora"}}, {"drª", {"doutora"}}, {"dr", {"doktora", "doktorky", "doktor", "dokter", "doctor", "drive", "doutora", "doutor", "doktora"}}, {"drec", {"drecera"}}, {"drs", {"doctorandus"}}, {"drv", {"drive"}}, {"drwy", {"driveway"}}, {"ds", {"dominee"}}, {"đs", {"đường sắt"}}, {"dsg", {"descentes", "descente"}}, {"dstr", {"distributor"}}, {"dta", {"dreta"}}, {"dt", {"deutsches", "deutsch", "deutscher", "deutsche"}}, {"dto", {"direito"}}, {"dv", {"drive"}}, {"dvwy", {"driveway"}}, {"dwy", {"driveway"}}, {"dyg", {"dayang"}}, {"dz", {"duże", "duża", "duży"}}, {"dż", {"duże", "duża", "duży"}}, {"eb", {"escola básica"}}, {"éch", {"échangeur"}}, {"ecl", {"écluses", "écluse"}}, {"écl", {"écluses", "écluse"}}, {"ed", {"edifício"}}, {"edf", {"edifício"}}, {"edg", {"edge"}}, {"edif", {"edificio"}}, {"e", {"east"}}, {"egl", {"église"}}, {"égl", {"église"}}, {"ehem", {"ehemalige", "ehemaliger", "ehemaliges"}}, {"eighth", {"8th"}}, {"eighteenth", {"18th"}}, {"elb", {"elbow"}}, {"eleventh", {"11th"}}, {"emb", {"embaixador"}}, {"em", {"estrada municipal"}}, {"empr", {"empresa"}}, {"enc", {"enclos"}}, {"en", {"estrada nacional", "enceinte"}}, {"enf", {"enfermeiro"}}, {"enfo", {"enfermeiro"}}, {"enfº", {"enfermeiro"}}, {"engª", {"engenheira"}}, {"eng", {"engenheira", "engenheiro"}}, {"engº", {"engenheiro"}}, {"entd", {"entrada"}}, {"ent", {"entrance"}}, {"entl", {"entresòl"}}, {"entr", {"entrada"}}, {"env", {"enclave"}}, {"ep", {"empresa pública"}}, {"er", {"estrada regional"}}, {"err", {"errepidea"}}, {"esca", {"escalera"}}, {"escal", {"escalinata"}}, {"esc", {"escalier", "escadas", "escala", "escaliers", "escola"}}, {"escnh", {"escadinhas"}}, {"esgl", {"església"}}, {"eslda", {"espalda"}}, {"espa", {"espace"}}, {"esp", {"esplanade", "esplanades"}}, {"espl", {"esplanade"}}, {"esq", {"esquerdo", "esquina"}}, {"estac", {"estacionament"}}, {"estcn", {"estación"}}, {"estda", {"estrada"}}, {"est", {"estate", "estació"}}, {"estr", {"estrada"}}, {"etang", {"étang"}}, {"étang", {"étang"}}, {"etar", {"estação de tratamento de águas residuais"}}, {"etorb", {"etorbidea"}}, {"eu", {"escola universitària"}}, {"ex", {"extension"}}, {"exp", {"expressway"}}, {"expla", {"explanada"}}, {"expwy", {"expressway"}}, {"expy", {"expressway"}}, {"exten", {"extension"}}, {"ext", {"extension"}}, {"extrm", {"extramuros"}}, {"extrr", {"extrarradio"}}, {"fac", {"facultat"}}, {"fawy", {"fairway"}}, {"fb", {"fabrik"}}, {"fbrca", {"fábrica"}}, {"fca", {"fábrica", "finca"}}, {"fc", {"futebol clube"}}, {"fdc", {"fundacul"}}, {"fd", {"field"}}, {"ff", {"freiwillige feuerwehr"}}, {"fg", {"faubourg"}}, {"fh", {"fachhochschule", "forsthaus"}}, {"fit", {"firetrail"}}, {"fifth", {"5th"}}, {"fifteenth", {"15th"}}, {"first", {"1st"}}, {"flat", {"flat"}}, {"fl", {"flat"}}, {"fnd", {"fundătura"}}, {"folw", {"follow"}}, {"fon", {"fontaine"}}, {"form", {"forum", "formation"}}, {"fos", {"fosses", "fosse"}}, {"fourth", {"4th"}}, {"fourteenth", {"14th"}}, {"foyr", {"foyer"}}, {"fr", {"father", "frontage", "frei"}}, {"frm", {"ferme", "fermes"}}, {"frnt", {"front"}}, {"frtg", {"frontage"}}, {"frwy", {"freeway"}}, {"fshr", {"foreshore"}}, {"fsr", {"forest service road"}}, {"ft", {"fort", "frente"}}, {"ftrk", {"fire track"}}, {"ftwy", {"footway"}}, {"fwy", {"freeway"}}, {"fy", {"fairway", "ferry"}}, {"ga", {"gates", "gate"}}, {"gale", {"galería"}}, {"gal", {"galerie", "general", "galeries"}}, {"garn", {"garenne"}}, {"gbd", {"grand boulevard"}}, {"gde", {"gemeinde"}}, {"gden", {"grands ensembles", "grand ensemble"}}, {"gd", {"gasilski dom"}}, {"gdn", {"gardens", "garden"}}, {"gdns", {"gardens"}}, {"gebr", {"gebroeders"}}, {"gen", {"generaal", "generała", "generála", "general"}}, {"geo", {"george"}}, {"g", {"gata", "gasse", "großes", "großer", "gatan", "große", "gaten", "gate", "gatvė"}}, {"gg", {"gang"}}, {"ghf", {"gasthof"}}, {"gh", {"gasthaus"}}, {"gi", {"gardu induk"}}, {"g:la", {"gamla"}}, {"glde", {"glade"}}, {"gld", {"glade"}}, {"glen", {"glen"}}, {"gl", {"glade", "gammel,gamle"}}, {"gln", {"glen"}}, {"gly", {"gully"}}, {"gn", {"green", "gunung"}}, {"gnr", {"guarda nacional republicana"}}, {"gov", {"governor"}}, {"gpe", {"groupe", "groupes"}}, {"gpt", {"groupement"}}, {"gra", {"grange"}}, {"grg", {"gymnasium und realgymnasium"}}, {"gr", {"grande rue", "grandes rues", "gracht", "grand’rue", "gränd", "graben", "grovet", "gränden", "grove", "großes", "große", "großer"}}, {"gri", {"grille"}}, {"grim", {"grimpette"}}, {"grnd", {"ground"}}, {"grnds", {"grounds"}}, {"grn", {"górny", "green", "górna", "górne"}}, {"gro", {"grove"}}, {"gta", {"glorieta"}}, {"gte", {"gates", "gate"}}, {"gt", {"gata", "gaten", "gate"}}, {"gwy", {"gateway"}}, {"hab", {"habitação", "habitació"}}, {"hak", {"handelsakademie"}}, {"ham", {"hameau", "hameaux"}}, {"harbr", {"harbour"}}, {"hasch", {"handelsschule"}}, {"hbf", {"hauptbahnhof"}}, {"hbr", {"harbor", "harbour"}}, {"hch", {"haut chemin", "hauts chemins"}}, {"hd", {"head", "heads"}}, {"hghlds", {"highlands"}}, {"hgts", {"heights"}}, {"h", {"höhle", "hohes", "hotel", "hohe", "hoher"}}, {"hint", {"hinteres", "hinterer", "hinter", "hintere"}}, {"hip", {"hippodrome"}}, {"hipód", {"hipódromo"}}, {"hird", {"highroad"}}, {"hiway", {"highway"}}, {"hj", {"haji"}}, {"hle", {"halle", "halles"}}, {"hl", {"heiliger", "heiliges", "heilige", "hill", "hills"}}, {"hlm", {"hlm"}}, {"hls", {"hills"}}, {"ho", {"house"}}, {"hon", {"honorable"}}, {"hosp", {"hospital"}}, {"hrd", {"highroad"}}, {"hr", {"hrabiego", "hrabiny", "hrabia", "hrabina"}}, {"hse", {"house"}}, {"hs", {"haus", "high school"}}, {"hst", {"haltestelle"}}, {"ht", {"heights", "hinteres", "hinterer", "hinter…", "hintere"}}, {"htl", {"höhere technische lehranstalt"}}, {"hts", {"heights"}}, {"htt", {"hütte"}}, {"hvn", {"haven"}}, {"hwy", {"highway"}}, {"ic", {"itinerário complementar"}}, {"ies", {"instituto de educación secundaria"}}, {"iii", {"terza", "trzecie", "trzeci", "trzecia", "terzo"}}, {"ii", {"seconda", "drugi", "druga", "secondo", "segundo", "drugie"}}, {"ile", {"île"}}, {"ima", {"irmã"}}, {"imª", {"irmã"}}, {"im", {"irmã", "irmão"}}, {"imm", {"immeubles", "immeuble"}}, {"imo", {"irmão"}}, {"imº", {"irmão"}}, {"imp", {"impasse", "impasses"}}, {"ind", {"industrial"}}, {"inf", {"infante"}}, {"ing", {"inžiniera", "inžinierky", "ingenieur", "inženýra", "inženýrky"}}, {"inst", {"instituto"}}, {"intg", {"interchange"}}, {"int", {"interior", "internationaler", "intrarea", "internationales", "internationale"}}, {"intl", {"international"}}, {"intrarea", {"intrarea"}}, {"intr", {"intrarea"}}, {"ip", {"itinerário principal", "idrottsplats"}}, {"i", {"prima", "pierwszy", "pierwsza", "in", "island", "pierwsze", "primo", "im"}}, {"ir", {"ingenieur", "insinyur"}}, {"is", {"island"}}, {"iv", {"quattro", "quarta", "quarto"}}, {"ix", {"nona", "nono"}}, {"jard", {"jardins", "jardin"}}, {"jctn", {"junction"}}, {"jdín", {"jardín"}}, {"jend", {"jenderal"}}, {"jh", {"jagdhaus"}}, {"jhr", {"jonkheer"}}, {"jhtt", {"jagdhütte"}}, {"jl", {"jalan"}}, {"jln", {"jalan"}}, {"jnc", {"junction"}}, {"jrd", {"jardim"}}, {"jr", {"júnior", "junior"}}, {"jte", {"jetées", "jetée"}}, {"kab", {"kabupaten"}}, {"kag", {"kagawad"}}, {"ka", {"kereta api", "kläranlage"}}, {"kan", {"kanunnik"}}, {"kap", {"kapelle", "kapitan"}}, {"kapt", {"kapitan"}}, {"kard", {"kardinaal", "kardynał"}}, {"kcn", {"khu công nghiệp"}}, {"kdl", {"khu du lịch"}}, {"kec", {"kecamatan"}}, {"kel", {"kelurahan"}}, {"kga", {"kleingartenanlage"}}, {"kgg", {"kagalang-galang"}}, {"kg", {"katastralgemeinde", "…kogel", "kampong", "kogel"}}, {"kgv", {"kleingartenverein"}}, {"kh", {"krankenhaus"}}, {"kj", {"kuja"}}, {"k", {"kalea", "katu", "koło", "kolo", "kort(e)"}}, {"kl", {"konzentrationslager", "klein…", "kleines", "kleiner", "kleine", "kylä"}}, {"knm", {"khu nghỉ mát"}}, {"kol", {"kolonel", "kolonia"}}, {"kon", {"koning", "koningin"}}, {"kontradm", {"kontradmirała", "kontradmirał"}}, {"kp", {"kampung"}}, {"kpl", {"kapelle"}}, {"kpr", {"kaprala", "kapral"}}, {"kpt", {"kapitana", "kapitan", "kapitána"}}, {"kri", {"kaari"}}, {"ks", {"księdza", "ksiądz", "księcia", "książe", "khách sạn"}}, {"kte", {"kort"}}, {"kz", {"kreuz", "konzentrationslager"}}, {"la", {"lane"}}, {"landng", {"landing"}}, {"lda", {"limitada"}}, {"ldg", {"landing", "lodge"}}, {"ld", {"lieu-dit"}}, {"leve", {"levée"}}, {"lg", {"largo", "lugar"}}, {"lgn", {"lagoon"}}, {"lit", {"little"}}, {"lj", {"loja"}}, {"lkh", {"landeskrankenhaus"}}, {"lk", {"link"}}, {"lkout", {"lookout"}}, {"lkt", {"lookout"}}, {"l", {"lange", "lakes", "lilla"}}, {"ll", {"lille"}}, {"llnra", {"llanura"}}, {"lmts", {"limits"}}, {"ln", {"line", "laan", "lane"}}, {"lnwy", {"laneway"}}, {"loc", {"località"}}, {"lor", {"lorong"}}, {"loteam", {"loteamento"}}, {"lot", {"lotissement", "lotissements"}}, {"low", {"lower"}}, {"lp", {"loop"}}, {"lr", {"lower"}}, {"lt", {"lote", "lieutenant", "little"}}, {"lug", {"lugar"}}, {"luit", {"luitenant"}}, {"lung", {"lungsod"}}, {"lwr", {"lower"}}, {"mag", {"magister"}}, {"mah", {"mahalle"}}, {"maj", {"major"}}, {"malec", {"malecón"}}, {"mal", {"marechal", "maréchal"}}, {"ma", {"maria", "magistratsabteilung"}}, {"man", {"manoir"}}, {"mans", {"mansions"}}, {"mar", {"marche", "marches"}}, {"marsz", {"marszałka (marszałek)"}}, {"maz", {"mazowiecka", "mazowiecki", "mazowieckie"}}, {"md", {"mead"}}, {"mdr", {"meander"}}, {"mdw", {"meadow", "meadows"}}, {"mdws", {"meadows"}}, {"med", {"medical"}}, {"mej", {"mejuffrouw"}}, {"me", {"madre", "mestre"}}, {"mem", {"memorial"}}, {"merc", {"mercado"}}, {"met", {"métro"}}, {"mét", {"métro"}}, {"mevr", {"mevrouw"}}, {"mf", {"maison forestière"}}, {"mgr", {"monseigneur"}}, {"mh", {"mahalle"}}, {"mid", {"middle"}}, {"mil", {"military"}}, {"mi", {"mile"}}, {"min", {"minister", "ministro"}}, {"mjr", {"majora", "major"}}, {"mkt", {"markt", "market"}}, {"mł", {"mała", "mały", "małe"}}, {"ml", {"mała", "mały", "mall", "małe"}}, {"mln", {"moulin", "moulins"}}, {"m", {"municipal", "miasto"}}, {"mndr", {"meander"}}, {"mn", {"mossèn"}}, {"mnr", {"manor"}}, {"mnt", {"muntele", "maantee"}}, {"mon", {"monument"}}, {"mons", {"monsenhor"}}, {"mpal", {"municipal"}}, {"mq", {"marquês"}}, {"mrdor", {"mirador"}}, {"mr", {"meester", "meander"}}, {"ms", {"middle school"}}, {"mte", {"montée", "montées"}}, {"mtir", {"monestir"}}, {"mt", {"mount", "mont", "muntele"}}, {"mtn", {"mountain", "mountains"}}, {"mto", {"maestro"}}, {"mtrio", {"monasterio"}}, {"mtwy", {"motorway"}}, {"mun", {"municipal"}}, {"mus", {"museum", "museu", "musée"}}, {"mva", {"müllverbrennungsanlage"}}, {"mw", {"mews"}}, {"mwy", {"motorway"}}, {"mz", {"manzana"}}, {"nábr", {"nábrežie"}}, {"nábř", {"nábřeží"}}, {"nac", {"nacional"}}, {"nám", {"námestie", "náměstí"}}, {"n:a", {"norra"}}, {"nª", {"nossa"}}, {"nd", {"niedere", "niederes", "niederer"}}, {"ndr", {"nordre"}}, {"ne", {"northeast"}}, {"nh", {"nhà hát"}}, {"nhs", {"national high school"}}, {"ninth", {"9th"}}, {"nineteenth", {"19th"}}, {"nk", {"nook"}}, {"nms", {"neue mittelschule"}}, {"n", {"nowy", "nowa", "nossa", "norra", "número", "north", "nosso", "nacional", "nowe"}}, {"nö", {"niederösterreichischer", "niederösterreichisches", "niederösterreich", "niederösterreichische"}}, {"nº", {"número"}}, {"nook", {"nook"}}, {"nördl", {"nördlicher", "nördliche", "nördliches"}}, {"no", {"சாலை", "salai", "nomor", "vazhi", "வழி"}}, {"np", {"nationalpark", "national park"}}, {"nra", {"national recreation area"}}, {"nre", {"nombre"}}, {"nr", {"nørre", "nummer"}}, {"nsg", {"naturschutzgebiet"}}, {"ns", {"nossa senhora"}}, {"ntđ", {"nhà thi đấu"}}, {"nte", {"nouvelle route"}}, {"nt", {"nhà thờ"}}, {"ntra", {"nuestra"}}, {"núm", {"número"}}, {"nw", {"nowy", "nowa", "nowe", "northwest"}}, {"nwra", {"national wildlife refuge area"}}, {"nz", {"noordzijde"}}, {"ö:a", {"östra"}}, {"öav", {"österreichischer alpenverein"}}, {"obj", {"objekt"}}, {"ob", {"oberer", "obere", "oberes"}}, {"ögv", {"österreichischer gebirgsverein"}}, {"olv", {"onze-lieve-vrouw"}}, {"o", {"ob"}}, {"oö", {"oberösterreichisches", "oberösterreich", "oberösterreichische", "oberösterreichischer"}}, {"oo", {"ojców"}}, {"ö", {"östra"}}, {"orch", {"orchard"}}, {"os", {"osiedlu", "osiedle"}}, {"oš", {"osnovna šola"}}, {"österr", {"österreichisches", "österreichische", "österreichischer"}}, {"östl", {"östlicher", "östliche", "östliches"}}, {"öst", {"österreichisches", "österreichische", "österreichischer"}}, {"ötk", {"österreichischer touristenklub"}}, {"otlk", {"outlook"}}, {"out", {"outlook"}}, {"oz", {"oostzijde"}}, {"pae", {"petite avenue"}}, {"palac", {"palacio"}}, {"pal", {"palais"}}, {"pam", {"pamantasan"}}, {"pant", {"pantano"}}, {"parc", {"parc", "parcel·la", "parcs"}}, {"park", {"park"}}, {"par", {"parada"}}, {"parti", {"particular"}}, {"part", {"particular"}}, {"pas", {"passage"}}, {"pass", {"passage", "passes", "passe", "pass"}}, {"past", {"pastoor"}}, {"path", {"path"}}, {"pat", {"patio"}}, {"pav", {"pavillons", "pavillon", "pavilhão", "pavelló"}}, {"pbdo", {"poblado"}}, {"pblo", {"pueblo"}}, {"pça", {"plaça"}}, {"pch", {"porche", "petit chemin"}}, {"pcp", {"police community precinct"}}, {"pc", {"praça"}}, {"pç", {"praça"}}, {"pctª", {"praceta"}}, {"pct", {"precinct", "praceta"}}, {"pda", {"pujada"}}, {"pde", {"parade"}}, {"pdís", {"passadís"}}, {"pdse", {"paradise"}}, {"pe", {"padre"}}, {"peri", {"périphérique"}}, {"pgd", {"prostovoljno gasilsko društvo"}}, {"pg", {"pengiran", "passeig"}}, {"pgr", {"penger"}}, {"phil", {"philippines"}}, {"ph", {"phường", "phase"}}, {"phwy", {"pathway"}}, {"piata", {"piața"}}, {"piată", {"piața"}}, {"piaţa", {"piața"}}, {"piaţă", {"piața"}}, {"piață", {"piața"}}, {"piaz", {"piazza"}}, {"pim", {"petite impasse"}}, {"pi", {"polígon industrial"}}, {"pj", {"polícia judiciária"}}, {"pje", {"pasaje"}}, {"pkg", {"parking"}}, {"pkld", {"parklands"}}, {"pko", {"puistikko"}}, {"pk", {"pike", "park", "punt quilomètric"}}, {"pkt", {"pocket"}}, {"pkwy", {"parkway"}}, {"pky", {"parkway"}}, {"plag", {"plages", "plage"}}, {"plan", {"plan"}}, {"plat", {"plateau"}}, {"plci", {"placis"}}, {"ple", {"passerelle", "passerelles"}}, {"plk", {"plukovníka"}}, {"płk", {"pułkownika (pułkownik)"}}, {"pln", {"plaine", "plein"}}, {"pl", {"placu", "plaça", "platz", "plain", "placem", "planta", "plass", "place", "plaza", "plassen", "plains", "plats", "platsen", "plac"}}, {"plt", {"plateau", "plateaux"}}, {"plut", {"plutonowego", "plutonowy"}}, {"plza", {"plaza"}}, {"plzla", {"plazuela"}}, {"plz", {"plaza"}}, {"pn", {"passage à niveau"}}, {"pnt", {"pointe", "point"}}, {"pobl", {"població"}}, {"políg", {"polígono"}}, {"pol. ind", {"polígon industrial"}}, {"pol", {"polígon"}}, {"pont", {"ponts", "pont"}}, {"po", {"post office"}}, {"por", {"porucznika", "porucznik", "poručíka"}}, {"porq", {"portique", "portiques"}}, {"port", {"port"}}, {"pot", {"poterne"}}, {"pour", {"pourtour"}}, {"p", {"pfad", "polku", "phường", "pater", "paseo"}}, {"pplk", {"podplukovníka"}}, {"ppłk", {"ppułkownika", "podpułkownika", "podpułkownik"}}, {"ppor", {"pporucznika", "podporucznika", "podporucznik", "podporučíka"}}, {"pq", {"parque"}}, {"pque", {"parque"}}, {"pral", {"principal"}}, {"pre", {"pré"}}, {"presid", {"presidente"}}, {"pres", {"president"}}, {"prk", {"purok"}}, {"prm", {"promenade"}}, {"profª", {"professora"}}, {"prof", {"professora", "professor", "profesora", "profesorky", "profesor"}}, {"proj", {"projectada", "projetada"}}, {"prolng", {"prolongamento"}}, {"prol", {"prolongación"}}, {"prom", {"promenade"}}, {"provl", {"provincial"}}, {"prov", {"province"}}, {"p+r", {"parking relais", "parc relais"}}, {"pr", {"praça", "prinses", "prins", "prospektas"}}, {"prq", {"presqu’île"}}, {"prtco", {"pórtico"}}, {"prt", {"petite route"}}, {"prv", {"parvis"}}, {"przla", {"prazuela"}}, {"psge", {"passage"}}, {"psje", {"pasaje"}}, {"psllo", {"pasillo"}}, {"ps", {"pass", "puisto"}}, {"psp", {"polícia de segurança pública"}}, {"pst", {"puiestee"}}, {"psty", {"péristyle"}}, {"ptal", {"portal"}}, {"pţa", {"piața"}}, {"pța", {"piața"}}, {"pta", {"porta", "petite allée", "piața", "petites allées", "puerta"}}, {"ptda", {"partida"}}, {"pte", {"porte", "puente"}}, {"ptge", {"passatge"}}, {"ptilo", {"portillo"}}, {"pto", {"puerto", "pátio"}}, {"pt", {"port", "point", "phi trường"}}, {"ptr", {"petite rue"}}, {"ptway", {"pathway"}}, {"pvt", {"private"}}, {"pway", {"pathway"}}, {"pwy", {"pathway", "parkway"}}, {"pza", {"plaza"}}, {"pzo", {"pasadizo"}}, {"pzta", {"plazoleta"}}, {"qdgl", {"quadrangle"}}, {"qd", {"quadra", "quadrant"}}, {"qdrt", {"quadrant"}}, {"ql", {"quốc lộ"}}, {"q", {"quadra", "quận", "quelle"}}, {"qta", {"quinta"}}, {"qt", {"quảng trường"}}, {"quad", {"quad"}}, {"qua", {"quartier"}}, {"qu", {"quelle", "quai"}}, {"qy", {"quay", "quays"}}, {"qys", {"quays"}}, {"rac", {"raccourci"}}, {"raid", {"raidillon"}}, {"rang", {"rang"}}, {"ra", {"ramble"}}, {"rª", {"ribeira"}}, {"ras", {"rautatieasema"}}, {"rbla", {"rambla"}}, {"rbra", {"ribera"}}, {"rcda", {"rinconada"}}, {"rch", {"reach"}}, {"rcón", {"rincón"}}, {"rc", {"rés-do-chão"}}, {"rda", {"ronda"}}, {"rdge", {"ridge"}}, {"rdg", {"ridge"}}, {"rdpt", {"rond-point"}}, {"rd", {"road"}}, {"rdsd", {"roadside"}}, {"rds", {"roads"}}, {"rdtj", {"raudteejaam"}}, {"rdt", {"raudtee"}}, {"rdwy", {"roadway"}}, {"rdy", {"roadway"}}, {"rem", {"rempart"}}, {"rep", {"representative"}}, {"resid", {"residencial"}}, {"res", {"reservation", "reserve", "reservoir", "résidence", "résidences", "residencias", "residencia"}}, {"rest", {"rest"}}, {"rge", {"range"}}, {"rg", {"range"}}, {"rgwy", {"ridgeway"}}, {"rh", {"rhein", "rạp hát"}}, {"ribª", {"ribeira"}}, {"rib", {"ribeirão", "ribeira"}}, {"ri", {"rise"}}, {"rise", {"rise"}}, {"riv", {"river"}}, {"rks", {"rocks"}}, {"rle", {"ruelle", "ruelles"}}, {"rmbl", {"ramble"}}, {"rnde", {"ronde"}}, {"rnd", {"round"}}, {"rnge", {"range"}}, {"rn", {"rinne"}}, {"robt", {"robert"}}, {"roc", {"roc", "rocade"}}, {"roqt", {"roquet"}}, {"rotm", {"rotmistrza", "rotmistrz"}}, {"rot", {"rotunda", "rotonda"}}, {"row", {"row"}}, {"rowy", {"right of way"}}, {"rpe", {"rampe"}}, {"rpt", {"rond point"}}, {"r", {"river", "ruine", "regional", "rio", "rue", "rua", "raitti", "rues"}}, {"rsbl", {"rosebowl"}}, {"rs", {"rumah sakit"}}, {"rst", {"rest"}}, {"rsud", {"rumah sakit umum daerah"}}, {"rtda", {"rotonda"}}, {"rtd", {"rotonde"}}, {"rte", {"route", "routes"}}, {"rtn", {"return"}}, {"rt", {"ranta", "retreat", "route"}}, {"rtt", {"retreat"}}, {"rty", {"rotary"}}, {"rvra", {"riviera"}}, {"rvr", {"river"}}, {"rvwy", {"riverway"}}, {"rww", {"rundwanderweg"}}, {"sanat", {"sanatorio"}}, {"santu", {"santuario"}}, {"sarg", {"sargento"}}, {"sª", {"senhora"}}, {"sa", {"sociedade anónima"}}, {"s:a", {"södra"}}, {"savinj", {"savinjski"}}, {"sbg", {"salzburger", "salzburg"}}, {"sbqt", {"sân bay quốc tế"}}, {"sb", {"sân bay"}}, {"sbwy", {"subway"}}, {"schl", {"schloss"}}, {"sc", {"strada comunale", "sport clube"}}, {"sct", {"scout"}}, {"scv", {"sub-cave"}}, {"sdla", {"stradela"}}, {"sdlg", {"siedlung"}}, {"sdng", {"siding"}}, {"sdn", {"sekolah dasar negeri"}}, {"sdr", {"søndre", "sønder"}}, {"sd", {"strand", "sekolah dasar"}}, {"second", {"2nd"}}, {"sect", {"sector"}}, {"sedra", {"sendera"}}, {"send", {"sendero"}}, {"sen", {"sente", "senator", "sentiers", "sentier", "sentes"}}, {"sent", {"sentier"}}, {"seventh", {"7th"}}, {"seventeenth", {"17th"}}, {"se", {"southeast"}}, {"sgda", {"sagrada"}}, {"sg", {"schottergrube", "sungai", "sandgrube"}}, {"sgt", {"sagrat", "sergeant"}}, {"shs", {"senior high school"}}, {"sh", {"state highway"}}, {"shun", {"shunt"}}, {"shwy", {"state highway"}}, {"sídl", {"sídlisko", "sídliště"}}, {"sixth", {"6th"}}, {"sixteenth", {"16th"}}, {"sk", {"sokak", "sokağı"}}, {"skv", {"skveras"}}, {"slj", {"sobre-loja"}}, {"slov", {"slovenskih"}}, {"slpe", {"slope"}}, {"sman", {"sekolah menengah atas negeri"}}, {"sma", {"sekolah menengah atas"}}, {"smk", {"sekolah menengah kejuruan"}}, {"smpn", {"sekolah menengah pertama negeri"}}, {"smp", {"sekolah menengah pertama"}}, {"smz", {"sozialmedizinisches zentrum"}}, {"snd", {"sound"}}, {"sngl", {"singel"}}, {"snr", {"señor"}}, {"sn", {"san", "sem número"}}, {"soc", {"sociedade"}}, {"sok", {"sokak", "sokağı"}}, {"sort", {"sortida"}}, {"soseaua", {"șoseaua"}}, {"so", {"sitio", "south"}}, {"sos", {"șoseaua"}}, {"spg", {"simpang"}}, {"splaiul", {"splaiul"}}, {"spl", {"splaiul"}}, {"sp", {"strada provinciale", "szkoła podstawowa", "splaiul", "spodnja", "spodnji", "spitze", "spodnje"}}, {"sq", {"square", "superquadra"}}, {"srª", {"senhora"}}, {"sra", {"senhora", "senora", "señora"}}, {"sr", {"srednje", "strada regionale", "senior", "srednja", "senhor", "srednji", "señor", "sister", "state route"}}, {"s", {"santo", "senhora", "sant'", "santa", "south", "são", "san", "södra", "senhor", "see"}}, {"ss", {"simpang susun", "santi", "strada statale", "saints"}}, {"śś", {"świętych", "święci"}}, {"s:ta", {"sankta"}}, {"stª", {"santa"}}, {"sta", {"santa", "station"}}, {"stas", {"santas"}}, {"staz", {"stazione"}}, {"stb", {"steinbruch"}}, {"stde", {"stade"}}, {"ste", {"sainte"}}, {"stg", {"stiege"}}, {"sth", {"south"}}, {"stn", {"station"}}, {"sto", {"santo"}}, {"stº", {"santo"}}, {"stos", {"santos"}}, {"strada", {"strada"}}, {"stra", {"strand", "strada"}}, {"strp", {"strip"}}, {"str", {"strasse", "stary", "stara", "strada", "straat", "stare", "straße"}}, {"strwy", {"stairway"}}, {"s:t", {"sankt"}}, /// @todo Should not duplicate Street synonyms defined in StreetsSynonymsHolder (avoid useless double queries). /// Remove "street" and "avenue" here, but should update GetNameScore. {"st", {"santo", "sant", "sint", "saint", "stara", "street", "stary", "stora", "sankt", "store", "stare", "stig", "stigen", "sancta", "stotelė"}}, {"št", {"šent"}}, {"stwg", {"steenweg"}}, {"subdiv", {"subdivision"}}, {"subd", {"subdivision"}}, {"südl", {"südliche", "südlicher", "südliches"}}, {"svđ", {"sân vận động"}}, {"sv", {"sveti", "sving", "svetega", "svätého", "svätej", "sveta", "svete", "svingen"}}, {"svwy", {"serviceway"}}, {"sw", {"southwest"}}, {"św", {"świętego", "święci", "świętych", "święty", "święta", "świętej"}}, {"swy", {"serviceway"}}, {"szer", {"szeregowego", "szeregowego"}}, {"tarn", {"tarn"}}, {"tce", {"terrace"}}, {"tct", {"tổng công ty"}}, {"tcty", {"tổng công ty"}}, {"ten", {"tenente"}}, {"tenth", {"10th"}}, {"term", {"terminal"}}, {"terr", {"terrace"}}, {"ter", {"terrace"}}, {"tg", {"tanjong"}}, {"thcs", {"trung học cơ sở"}}, {"thfr", {"thoroughfare"}}, {"third", {"3rd"}}, {"thirteenth", {"13th"}}, {"thor", {"thoroughfare"}}, {"thpt", {"trung học phổ thông"}}, {"th", {"tiểu học", "tienhaara"}}, {"tk", {"taman kanak-kanak"}}, {"tkwy", {"trunkway"}}, {"tline", {"townline"}}, {"tl", {"tỉnh lộ"}}, {"tlwy", {"tollway"}}, {"tn", {"tarn", "tänav", "turn"}}, {"tpke", {"turnpike"}}, {"tpk", {"turnpike"}}, {"tpl", {"terre plein"}}, {"tp", {"thành phố"}}, {"tráns", {"tránsito"}}, {"transv", {"transversal"}}, {"tras", {"trasera"}}, {"tra", {"traverse"}}, {"trav", {"travessa", "travessera", "travessia"}}, {"trce", {"trace"}}, {"tri", {"triangle"}}, {"trk", {"track"}}, {"trlr", {"trailer"}}, {"trl", {"trail"}}, {"trnabt", {"turnabout"}}, {"trn", {"turn", "terrain"}}, {"trrnt", {"torrente"}}, {"tr", {"track", "torre", "tori"}}, {"tř", {"třída"}}, {"trt", {"tertre", "tertres"}}, {"trval", {"transversal"}}, {"trva", {"travesía"}}, {"trv", {"travessa", "travessia"}}, {"tsse", {"terrasse", "terrasses"}}, {"t", {"tie", "teich"}}, {"tttm", {"trung tâm thương mại"}}, {"tt", {"trung tâm", "thị trấn"}}, {"tun", {"tunnel"}}, {"tüpl", {"truppenübungsplatz"}}, {"tu", {"technische universität"}}, {"tvl", {"taival"}}, {"tv", {"travessa"}}, {"twelfth", {"12th"}}, {"twentieth", {"20th"}}, {"twp", {"township"}}, {"twrs", {"towers"}}, {"twy", {"tollway"}}, {"tx", {"thị xã"}}, {"ukh", {"unfallkrankenhaus"}}, {"ul", {"ulicą", "ulicy", "ulica", "ulice"}}, {"uni", {"universität", "university"}}, {"univ", {"universidade", "university"}}, {"unt", {"unteres", "unterer", "untere"}}, {"upas", {"underpass"}}, {"upr", {"upper"}}, {"ups", {"underpass"}}, {"up", {"upper"}}, {"urb", {"urbanização", "urbanització", "urbanización"}}, {"u", {"unteres", "unterer", "untere", "utca"}}, {"vale", {"vale"}}, {"val", {"vallée", "vallon"}}, {"varful", {"vârful"}}, {"varf", {"vârful"}}, {"va", {"vale"}}, {"v:a", {"västra"}}, {"vbt", {"viện bảo tàng"}}, {"vche", {"vieux chemin"}}, {"vcto", {"viaducto"}}, {"vda", {"viuda"}}, {"vdct", {"viaduct"}}, {"vd", {"van de", "van den", "van der", "vorderer", "vorderes", "vordere"}}, {"vecin", {"vecindario"}}, {"vel", {"veliki", "velike", "veliko", "velika", "velikem"}}, {"ven", {"venelles", "venelle"}}, {"verf", {"verfallen"}}, {"verl", {"verlengde"}}, {"vf", {"vârful"}}, {"vge", {"village", "villages"}}, {"viad", {"viaduct"}}, {"via", {"viaduct"}}, {"view", {"view"}}, {"viii", {"ottavo", "ottava"}}, {"vii", {"settima", "settimo"}}, {"villge", {"village"}}, {"vill", {"village"}}, {"virful", {"vârful"}}, {"vîrful", {"vârful"}}, {"virf", {"vârful"}}, {"visc", {"visconde"}}, {"vi", {"sesta", "sesto"}}, {"vlä", {"väylä"}}, {"vla", {"villa", "villas"}}, {"v.le", {"viale"}}, {"vlls", {"villas"}}, {"vlt", {"vliet"}}, {"vl", {"vila"}}, {"vn", {"vegen", "veien", "veg", "vei"}}, {"voi", {"voie", "voies"}}, {"vord", {"vorderer", "vorderes", "vordere"}}, {"vqg", {"vươn quốc gia"}}, {"vr", {"vrouwe"}}, {"vsta", {"vista"}}, {"vst", {"vista"}}, {"vs", {"volksschule"}}, {"vte", {"vieille route"}}, {"v", {"västra", "vei", "von", "velike", "veliko", "väg", "via", "quinta", "velikem", "veliki", "vegen", "veien", "veg", "vägen", "quinto", "velika", "van"}}, {"vvdas", {"viviendas"}}, {"vv", {"vivenda"}}, {"vw", {"view"}}, {"vy", {"valley"}}, {"wadm", {"wiceadmirała", "wiceadmirał"}}, {"walk", {"walk"}}, {"way", {"way"}}, {"westl", {"westliche", "westliches", "westlicher"}}, {"wg", {"weg"}}, {"whrf", {"wharf"}}, {"wh", {"wirtshaus"}}, {"wk", {"walk"}}, {"wkwy", {"walkway"}}, {"wky", {"walkway"}}, {"wlkp", {"wielkopolski", "wielkopolskie", "wielkopolska"}}, {"wlk", {"wielki", "wielkie", "walk", "wielka"}}, {"wm", {"william"}}, {"woj", {"województwie", "województwo"}}, {"wr", {"wiener"}}, {"wsf", {"wasserfall"}}, {"wssf", {"wasserfall"}}, {"ws", {"wiese"}}, {"wtr", {"waters"}}, {"wu", {"wirtschaftsuniversität"}}, {"w", {"wald", "west", "weg"}}, {"wyb", {"wybrzeża", "wybrzeże", "wybrzeżem"}}, {"wynd", {"wynd"}}, {"wyn", {"wynd"}}, {"wy", {"way"}}, {"wz", {"westzijde"}}, {"x", {"decima", "decimo"}}, {"xing", {"crossing"}}, {"xway", {"expressway"}}, {"xxiii", {"ventitreesimo"}}, {"xxiv", {"ventiquattro"}}, {"xx", {"venti"}}, {"xxv", {"venticinque"}}, {"xxx", {"trenta"}}, {"yd", {"yard"}}, {"zac", {"zone d'aménagement concerté"}}, {"zad", {"zone d'aménagement différé"}}, {"za", {"zone artisanale", "zone d'activité"}}, {"zd", {"zdravstveni dom"}}, {"zg", {"zgornja", "zgornji", "zgornje"}}, {"zi", {"zone industrielle"}}, {"zn", {"zona"}}, {"zr", {"zuster"}}, {"zup", {"zone à urbaniser en priorité"}}, {"z", {"zum"}}, {"zz", {"zuidzijde"}}, {"αγ", {"αγίας", "αγίων", "αγίου"}}, {"αει", {"πανεπιστήμιο"}}, {"αλ", {"αλέξανδρου"}}, {"ατ", {"αστυνομικό τμήμα"}}, {"ατει", {"ανώτατο τεχνολογικό εκπαιδευτικό ίδρυμα"}}, {"αφοί", {"αδελφοί"}}, {"αφών", {"αδελφών"}}, {"βασ", {"βασιλέως", "βασιλίσσης"}}, {"β", {"βασιλέως", "βασιλίσσης"}}, {"γρ", {"γρηγορίου"}}, {"δ", {"δήμος"}}, {"δς", {"δημοτικό σχολείο"}}, {"εθν", {"εθνάρχου", "εθνική", "εθνικής"}}, {"ελ", {"ελευθέριος", "ελευθερίου"}}, {"ελτα", {"ταχυδρομείο", "ελληνικά ταχυδρομεία"}}, {"κτ", {"κτίριο"}}, {"λεωφ", {"λεωφόρος"}}, {"λ", {"λίμνη", "λεωφόρος"}}, {"ν", {"νέο", "νέος", "νέα", "νέες", "νησί", "νέοι", "νομός"}}, {"όρ", {"όρος"}}, {"παν", {"πανεπιστήμιο"}}, {"πλ", {"πλατεία"}}, {"ποτ", {"ποταμός"}}, {"π", {"παλαιός", "παλαιό", "παλαιά", "παλαιοί", "παλαιές", "ποταμός"}}, {"στρ", {"στρατηγού"}}, {"τει", {"τεχνολογικό εκπαιδευτικό ίδρυμα"}}, {"ал", {"аллея", "алея"}}, {"б", {"большая", "большой"}}, {"бл", {"блок"}}, {"бол", {"большая", "большой"}}, {"бул", {"булевард", "бульвар"}}, {"вул", {"вулиця"}}, {"вх", {"вход"}}, {"ген", {"генерал"}}, {"гр", {"град"}}, {"дор", {"дорога"}}, {"доц", {"доцент"}}, {"зав", {"завулак"}}, {"кап", {"капитан"}}, {"кв", {"квартал"}}, {"мал", {"малый", "малая"}}, {"мит", {"митрополит"}}, {"м", {"малый", "малая"}}, {"наб", {"набережная", "набережна", "набярэжная"}}, {"нов", {"новый", "новая"}}, {"обл", {"область"}}, {"пер", {"переулок"}}, {"пл", {"площа", "площадь", "площад"}}, {"пров", {"провулок"}}, {"просп", {"проспект"}}, {"проф", {"професор"}}, {"пр", {"проезд", "проспект", "праспект", "провулок", "проїзд", "праезд"}}, {"св", {"святые", "святая", "святого", "святых", "свети", "свято", "святой"}}, {"с", {"село"}}, {"стар", {"старая", "старый"}}, {"туп", {"тупик", "тупік"}}, {"ул", {"улица"}}, {"ш", {"шаша", "шосе", "шоссе"}}, {"ইউপি", {"ইউনিয়ন পরিষদ"}}, {"একনেক", {"জাতীয় অর্থনৈতিক পরিষদের নির্বাহী কমিটি"}}, {"টেশিস", {"টেলিফোন শিল্প সংস্থা"}}, {"ঢাবি", {"ঢাকা বিশ্ববিদ্যালয়"}}, {"পবিস", {"পল্লী বিদ্যুৎ সমিতি"}}, {"পাউবো", {"পানি উন্নয়ন বোর্ড"}}, {"বাগ", {"বাগান"}}, {"বিডি", {"বাংলাদেশ"}}, {"রাজউক", {"রাজধানী উন্নয়ন কর্তৃপক্ষ"}}, {"সওজ", {"সড়ক ও জনপথ অধিদপ্তর"}}, {"স", {"সড়ক"}}, {"সে", {"সেতু"}}, {"一", {"一般都道", "一般県道", "一般府道", "一般道道"}}, {"一社", {"一般社団法人"}}, {"一財", {"一般財団法人"}}, {"中", {"中学校"}}, {"主", {"主要地方道"}}, {"医", {"医療法人"}}, {"合", {"合同会社"}}, {"名", {"合名会社"}}, {"大", {"国立大学法人", "公立大学法人","大学"}}, {"学", {"学校法人"}}, {"小", {"小学校"}}, {"有", {"有限会社"}}, {"株", {"株式会社"}}, {"独", {"独立行政法人"}}, {"財", {"財団法人"}}, {"資", {"合資会社"}}, {"銀", {"銀行"}}, {"高校", {"高等学校"}}, {"高", {"高等学校"}}, {"ش", {"شارع"}}, {"ط", {"طريق"}}, {"م", {"ميدان", "مجاوره", "محطه", "موقف"}}, {"د", {"دكتور"}}, {"ج", {"جامعه"}}, {"ح", {"حى"}}, {"ع", {"عماره"}}, {"احد", {"1"}}, {"واحد", {"1"}}, {"حادى", {"1"}}, {"اثنين", {"2"}}, {"اثنان", {"2"}}, {"ثلاث", {"3"}}, {"اربع", {"4"}}, {"خمس", {"5"}}, {"ست", {"6"}}, {"سبع", {"7"}}, {"ثمان", {"8"}}, {"ثمانيه", {"8"}}, {"تسع", {"9"}}, {"عشر", {"10"}}, {"عشرين", {"20"}}, {"عشرون", {"20"}}, {"الحد", {"الاحد"}}, {"الاحد", {"الحد"}}, {"التلات", {"الثلاثاء"}}, {"الثلاثاء", {"التلات"}}, }; } // namespace // QueryParams::Token ------------------------------------------------------------------------------ void QueryParams::Token::AddSynonym(string const & s) { AddSynonym(strings::MakeUniString(s)); } void QueryParams::Token::AddSynonym(String const & s) { if (!IsStopWord(s)) m_synonyms.push_back(s); } string DebugPrint(QueryParams::Token const & token) { ostringstream os; os << "Token [ m_original=" << DebugPrint(token.GetOriginal()) << ", m_synonyms=" << DebugPrint(token.m_synonyms) << " ]"; return os.str(); } // QueryParams ------------------------------------------------------------------------------------- void QueryParams::ClearStreetIndices() { class AdditionalCommonTokens { set m_strings; public: AdditionalCommonTokens() { char const * arr[] = { "the", // English "der", "zum", "und", "auf", // German "del", "les", // Spanish "в", "на" // Cyrillic }; for (char const * s : arr) m_strings.insert(NormalizeAndSimplifyString(s)); } bool Has(String const & s) const { return m_strings.count(s) > 0; } }; static AdditionalCommonTokens const s_addCommonTokens; size_t const count = GetNumTokens(); m_isCommonToken.resize(count, false); for (size_t i = 0; i < count; ++i) { auto const & token = GetToken(i).GetOriginal(); if (IsStreetSynonym(token)) { m_typeIndices[i].clear(); m_isCommonToken[i] = true; } else if (s_addCommonTokens.Has(token)) m_isCommonToken[i] = true; } } void QueryParams::Clear() { m_tokens.clear(); m_prefixToken.Clear(); m_hasPrefix = false; m_isCommonToken.clear(); m_typeIndices.clear(); m_langs.Clear(); } bool QueryParams::IsCategorySynonym(size_t i) const { return !GetTypeIndices(i).empty(); } QueryParams::TypeIndices & QueryParams::GetTypeIndices(size_t i) { ASSERT_LESS(i, GetNumTokens(), ()); return m_typeIndices[i]; } QueryParams::TypeIndices const & QueryParams::GetTypeIndices(size_t i) const { ASSERT_LESS(i, GetNumTokens(), ()); return m_typeIndices[i]; } bool QueryParams::IsPrefixToken(size_t i) const { ASSERT_LESS(i, GetNumTokens(), ()); return i == m_tokens.size(); } QueryParams::Token const & QueryParams::GetToken(size_t i) const { ASSERT_LESS(i, GetNumTokens(), ()); return i < m_tokens.size() ? m_tokens[i] : m_prefixToken; } QueryParams::Token & QueryParams::GetToken(size_t i) { ASSERT_LESS(i, GetNumTokens(), ()); return i < m_tokens.size() ? m_tokens[i] : m_prefixToken; } bool QueryParams::IsCommonToken(size_t i) const { return i < m_isCommonToken.size() && m_isCommonToken[i]; } bool QueryParams::IsNumberTokens(TokenRange const & range) const { ASSERT(range.IsValid(), (range)); ASSERT_LESS_OR_EQUAL(range.End(), GetNumTokens(), ()); for (size_t i : range) if (!GetToken(i).AnyOfOriginalOrSynonyms([](String const & s) { return strings::IsASCIINumeric(s); })) return false; return true; } void QueryParams::RemoveToken(size_t i) { ASSERT_LESS(i, GetNumTokens(), ()); if (i == m_tokens.size()) { m_prefixToken.Clear(); m_hasPrefix = false; } else { m_tokens.erase(m_tokens.begin() + i); } m_typeIndices.erase(m_typeIndices.begin() + i); } void QueryParams::AddSynonyms() { for (auto & token : m_tokens) { string const ss = ToUtf8(MakeLowerCase(token.GetOriginal())); auto const it = kSynonyms.find(ss); if (it != kSynonyms.end()) for (auto const & synonym : it->second) token.AddSynonym(synonym); } if (m_hasPrefix) { string const ss = ToUtf8(MakeLowerCase(m_prefixToken.GetOriginal())); auto const it = kSynonyms.find(ss); if (it != kSynonyms.end()) for (auto const & synonym : it->second) m_prefixToken.AddSynonym(synonym); } } string DebugPrint(QueryParams const & params) { ostringstream os; os << boolalpha << "QueryParams " << "{ m_tokens: " << ::DebugPrint(params.m_tokens) << ", m_prefixToken: " << DebugPrint(params.m_prefixToken) << ", m_typeIndices: " << ::DebugPrint(params.m_typeIndices) << ", m_langs: " << DebugPrint(params.m_langs) << ", m_isCommonToken: " << ::DebugPrint(params.m_isCommonToken) << " }"; return os.str(); } } // namespace search