co-maps/libs/search/query_params.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

1589 lines
52 KiB
C++
Raw Permalink Normal View History

2025-11-22 13:58:55 +01:00
#include "search/query_params.hpp"
#include "search/ranking_utils.hpp"
#include "search/token_range.hpp"
#include <unordered_map>
#include <sstream>
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<string, vector<string>> const kSynonyms = {
/// @todo Should process synonyms with errors like "blvrd" -> "blvd".
/// @see HouseOnStreetSynonymsWithMisprints test.
{"1", {"pierwszy", "pierwsza", "un", "una", "pierwsze", "primo", "واحد", "حادى", "احد"}},
{"1st", {"first"}},
{"", {"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ư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ł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"}},
{"", {"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"}},
{"", {"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"}},
{"", {"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"}},
{"", {"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"}},
{"", {"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", "grandrue", "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"}},
{"", {"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"}},
{"", {"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"}},
{"", {"niederösterreichischer", "niederösterreichisches", "niederösterreich", "niederösterreichische"}},
{"", {"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"}},
{"", {"oberösterreichisches", "oberösterreich", "oberösterreichische", "oberösterreichischer"}},
{"oo", {"ojców"}},
{"ö", {"östra"}},
{"orch", {"orchard"}},
{"os", {"osiedlu", "osiedle"}},
{"", {"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"}},
{"", {"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"}},
{"", {"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"}},
{"", {"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ří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<String> 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