Milpitas logo Symbium Build for Business
Continue →
Browse all business types →
Where would you like to locate your business?
Search by address or select a location on the map.
Your business should be allowed at this location.
See your report →

















select(keyword,K) & ~empty(K) ==> newkeyword(K)
select(keyword,K) & newkeyword(X) ==> ~newkeyword(X)

click(browseuse) & newkeyword(X) ==> ~newkeyword(X)

empty(X) :- matches(X,"^\s*$")
somekeyword :- keyword(K)
somenewkeyword :- newkeyword(K)

value(keyword,K) :- newkeyword(K)

attribute(keyword,class,X) :- evaluate(
  if(
    somenewkeyword,
    "search semi-bold hascontent",
    true,
    "search semi-bold"
  ), X
)
attribute(searchbusiness,href,X) :- evaluate(
  if(
    somenewkeyword,
    stringappend("/business/milpitas/search?keyword=",encodeParameter(choose(K,newkeyword(K)))),
    true,
    ""
  ), X
)
attribute(searchbusiness,onclick,X) :- evaluate(
  if(
    somenewkeyword,
    "return true;",
    true,
    "document.querySelector('.search').focus(); return false;"
  ), X
)
attribute(browseuse,href,"/business/milpitas/search")
attribute(keyword,placeholder,"Enter your business type")

load & evaluate(searchkeyword(),[X,Y]) & ~empty(X) & empty(Y) ==> keyword(X) & newkeyword(X) & searchbykeyword
load & evaluate(searchkeyword(),[X,Y]) & ~empty(X) & ~empty(Y) ==> keyword(Y) & newkeyword(Y) & use(Y)


load & evaluate(searchkeyword(),[X,Y]) & ~empty(Y) ==> use(Y)

attribute(scroll,class,X) :- evaluate(
  if(
    somekeyword,
    "scroll",
    true,
    "scroll bycategory"
  ), X
)
attribute(searchbar,class,Y) :- evaluate(
  if(
    searchbykeyword,
    "searchbar",
    true,
    "searchbar hidden"
  ), Y
)
attribute(searchbar(X),class,Y) :- evaluate(
  if(
    searchbar(X),
    "full-height",
    true,
    "hidden"
  ), Y
)
searchbar(X) :- evaluate(
  if(
    somekeyword,
    keyword,
    true,
    browse
  ), X
)

attribute(searchfooter,class,X) :- evaluate(
  if(
    searchbykeyword,
    "hidden",
    someuse,
    "hidden",
    true,
    "continue text-right"
  ), X
)
attribute(continue,disabled,X) :- evaluate(
  if(
    somecandidate,
    "no",
    true,
    "yes"
  ), X
)
attribute(continue,href,X) :- evaluate(
  if(
    somecandidate,
    stringappend("/business/milpitas/search?keyword=",encodeParameter(choose(A,candidate(A))),"&use=",encodeParameter(choose(B,candidate(B)))),
    true,
    "#"
  ), X
)

innerhtml(searchHeader,X) :- evaluate(
  if(
    searchbykeyword,
    if(
      somematch,
      "Select the best match for your proposed business.",
      true,
      "We are unable to locate business types that match your search."
    ),
    someuse,
    stringappend("Your proposed business:","<br>",choose(U,use(U))),
    true,
    ""
  ), X
)

style(legend,display,X) :- evaluate(
  if(
    someuse,
    "",
    somecandidate,
    "",
    true,
    "none"
  ), X
)


select(use,X) ==> use(X)
select(use,X) & use(Y) ==> ~use(Y)

select(use,X) ==> newkeyword(X)
select(use,X) & newkeyword(Y) ==> ~newkeyword(Y)
value(use,X) :- use(X)


select(candidate,X) ==> candidate(X)
select(candidate,X) & candidate(Y) ==> ~candidate(Y)

select(candidate,X) ==> newkeyword(X)
select(candidate,X) & newkeyword(Y) ==> ~newkeyword(Y)

value(candidate,X) :- candidate(X)
somecandidate :- candidate(X)

attribute(usematch,class,X) :- evaluate(
  if(
    searchbykeyword,
    "",
    true,
    "hidden"
  ), X
)


section(browse) :- ~somekeyword
section(use) :- somekeyword
section(location) :- someuse
section(status) :- someuse & somelocation

attribute(section(X),class,Y) :- evaluate(
  if(
    section(X),
    "",
    true,
    "hidden"
  ), Y
)

attribute(location,placeholder,"Search by address")
attribute(location,class,X) :- evaluate(
  if(
    somelocation,
    "search semi-bold hascontent",
    true,
    "search semi-bold"
  ), X
)
attribute(clearlocation,class,X) :- evaluate(
  if(
    somelocationtext,
    "clear-btn clickable",
    true,
    "clear-btn clickable hidden"
  ), X
)
clearlocation :- click(clearlocation)
clearlocation & location(X) ==> ~location(X)

select(location,X) & ~empty(X) ==> location(X)
select(location,X) & location(Y) ==> ~location(Y)

value(location,X) :- somelocation & evaluate(
  if (
    someaddress,
    capitalizeone(choose(A,address(A))),
    true,
    choose(A,apn(A))
  ), X
)
value(location,L) :- ~somelocation & location(L)
someaddress :- address(X) & ~empty(X)

%apn or address
select(locationtype,X) ==> locationtype(X)
select(locationtype,X) & locationtype(Y) ==> ~locationtype(Y)

%`some_questionss_not_answered` will never be in the model for SM since there are no additional questions 
attribute(viewreport,disabled,X) :- evaluate(
  if(
    some_questionss_not_answered,
    "yes",
    true,
    "no"
  ), X
)
attribute(viewreport,href,X) :- evaluate(
  if(
    somereportlink,
    choose(X,reportlink(X)),
    true,
    "#"
  ), X
)
somereportlink :- reportlink(X)
reportlink(X) :- apn(A) & address(B) & use(U) & evaluate(
  stringappend(
    "/business/milpitas/report?apn=",encodeParameter(A),"&address=",encodeParameter(B),"&use=",encodeParameter(U)
  ), X
)



attribute(status(header),class,X) :- statusmessage(A,B,C) & evaluate(stringappend("h4 status status-",A),X)
innerhtml(status(header),B) :- statusmessage(A,B,C)
innerhtml(status(message),C) :- statusmessage(A,B,C)


innerhtml(marker,Y) :- statusmessage(X,Y,Z)

attribute(marker,"class",C) :- statusmessage(X,Y,Z) & evaluate(stringappend("marker ",X), C)
marker("allowed") :- ~unknown & minmaxstatus(3,3)


someuse :- use(X)
somematch :- usematch(X)
somelocation :- apn(X)
somelocationtext :- location(X)

allusedescr(CATEGORY,USE,DESCR) :- classifiedas(USE,CATEGORY) & evaluate(
  if(
    somedescription(USE),
    choose(Z,description(USE,Z)),
    true,
    ""
  ), DESCR
)

usematchdescr(X,Y) :- usematch(X) & evaluate(
  if(
    somedescription(X),
    choose(Z,description(X,Z)),
    true,
    ""
  ), Y
)
somedescription(X) :- description(X,Y)

usematch(X) :- searchspace(X,Y) & ~onlyMatch(X) & keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch(Y,LK),1) & ~doNotMatch(X) & ~someOnlyMatch
usematch(X) :- ~someOnlyMatch & doMatch(X)
usematch(X) :- onlyMatch(X)

%searchspace(X,X) :- classifiedas(X,C)
%searchspace(X,C) :- classifiedas(X,C)
%searchspace(X,T) :- description(X,D) & evaluate(html2text(D),T)
%searchspace(X,K) :- keywordOf(X,K)
%searchspace(X,D) :- keywordOf(X,K) & meaningOf(K,D)

%Do Match means match all words - not unique result
doMatch("Family day care home") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("nursery",LK),1) & evaluate(fuzzymatch("school",LK),1)

doMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("co-working",LK),1)
doMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("co",LK),1) & evaluate(fuzzymatch("work",LK),1)
doMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("interior",LK),1) & evaluate(fuzzymatch("design",LK),1)
doMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("graphic",LK),1) & evaluate(fuzzymatch("design",LK),1)
doMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("real",LK),1) & evaluate(fuzzymatch("estate",LK),1)
doMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("law",LK),1) & evaluate(fuzzymatch("firm",LK),1)
doMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("title",LK),1) & evaluate(fuzzymatch("company",LK),1)

doMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("muay",LK),1) & evaluate(fuzzymatch("thai",LK),1)
doMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("muay",LK),1) & evaluate(fuzzymatch("thai",LK),1)

doMatch("Restaurant") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("coffee",LK),1) & evaluate(fuzzymatch("shop",LK),1)
doMatch("Restaurant") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("fast",LK),1) & evaluate(fuzzymatch("food",LK),1)

doMatch("Retail") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("shop",LK),1)
doMatch("Retail") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("office",LK),1) & evaluate(fuzzymatch("supplies",LK),1)

doMatch("Dry-cleaning plant") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("dry",LK),1) & evaluate(fuzzymatch("clean",LK),1)
doMatch("Dry-cleaning plant") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("dry",LK),1) & evaluate(fuzzymatch("cleaning",LK),1)
doMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("dry",LK),1) & evaluate(fuzzymatch("clean",LK),1)
doMatch("Check cashing and payday loan businesses") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("check",LK),1) & evaluate(fuzzymatch("cashing",LK),1)

%Do not match
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("car",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("vehicle",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("machinery",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("computer",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("appliance",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("furniture",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("dry",LK),1) & evaluate(fuzzymatch("cleaning",LK),1) & evaluate(fuzzymatch("plant",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("business",LK),1) & evaluate(fuzzymatch("equipment",LK),1)
doNotMatch("Repair and cleaning") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("heavy",LK),1) & evaluate(fuzzymatch("equipment",LK),1)

doNotMatch("Recycling processing facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("cleaning",LK),1)

doNotMatch("Recreation center or facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("construction",LK),1) & evaluate(fuzzymatch("material",LK),1)

doNotMatch("Business support services") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("vehicle",LK),1) & evaluate(fuzzymatch("repair",LK),1)

doNotMatch("Alcoholic beverage sales") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("restaurant",LK),1)
doNotMatch("Auction hall") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Bank or other financial institution") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Banquet hall") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Catering establishment") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Freestanding ATM") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Funeral services") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Health and athletic facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Massage establishment") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Medical or dental office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Movie theater") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("medical",LK),1)
doNotMatch("Office") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("dental",LK),1)
doNotMatch("Transportation service facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)
doNotMatch("Sauna or steam bath") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1)

doNotMatch("Funeral services") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("home",LK),1)

doNotMatch("Recreation center or facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("loose",LK),1)

doNotMatch("Auditorium or conference center") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("accessory",LK),1)
doNotMatch("Auditorium or conference center") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("office",LK),1)

doNotMatch("Family day care home") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("school",LK),1)

doNotMatch("Hospital") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("dental",LK),1)

doNotMatch("Trade and vocational school") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("auto",LK),1)
doNotMatch("Smoke/tobacco shop (does not include cannabis sales)") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("cannabis",LK),1)

doNotMatch("Radio or television station") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("gas",LK),1) & evaluate(fuzzymatch("station",LK),1)
doNotMatch("Radio or television station") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("gasoline",LK),1) & evaluate(fuzzymatch("station",LK),1)

doNotMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1)
doNotMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1)
doNotMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("school",LK),1)
doNotMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("school",LK),1)

doNotMatch("Restaurant") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("shop",LK),1)

doNotMatch("Trade and vocational school") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("weight",LK),1) & evaluate(fuzzymatch("training",LK),1)

doNotMatch("Retail") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("leather",LK),1)

doNotMatch("Contractor or construction business") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("medical",LK),1) & evaluate(fuzzymatch("supply",LK),1)

%Only Match means match all words - unique result
someOnlyMatch :- onlyMatch(_)

onlyMatch("Bank or other financial institution") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1) & evaluate(fuzzymatch("banker",LK),1)

onlyMatch("Pawnshop") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("pawn",LK),1) & evaluate(fuzzymatch("shop",LK),1)

onlyMatch("Kennel") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("doggie",LK),1)
onlyMatch("Kennel") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("doggy",LK),1)

onlyMatch("Adult business") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("adult",LK),1) & evaluate(fuzzymatch("entertainment",LK),1)

onlyMatch("Alcoholic beverage sales") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("without",LK),1) & evaluate(fuzzymatch("restaurant",LK),1)

onlyMatch("Emergency shelter") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("support",LK),1) & evaluate(fuzzymatch("service",LK),1)

onlyMatch("Health and athletic facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("court",LK),1)

onlyMatch("Farmers market") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("certified",LK),1) & evaluate(fuzzymatch("organic",LK),1)

onlyMatch("Retail") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("leather",LK),1) & evaluate(fuzzymatch("good",LK),1)
onlyMatch("Retail") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("sporting",LK),1) & evaluate(fuzzymatch("good",LK),1)

onlyMatch("Home occupation") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("home",LK),1) & evaluate(fuzzymatch("occupation",LK),1)
onlyMatch("Home occupation") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("home",LK),1) & evaluate(fuzzymatch("business",LK),1)
onlyMatch("Home occupation") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("home",LK),1) & evaluate(fuzzymatch("office",LK),1)
onlyMatch("Home occupation") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("professional",LK),1) & evaluate(fuzzymatch("office",LK),1) & evaluate(fuzzymatch("home",LK),1)

onlyMatch("Recreation center or facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("recreation",LK),1) & evaluate(fuzzymatch("facility",LK),1)
onlyMatch("Recreation center or facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("recreation",LK),1) & evaluate(fuzzymatch("center",LK),1)

onlyMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("driving",LK),1) & evaluate(fuzzymatch("school",LK),1)
onlyMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("martial",LK),1) & evaluate(fuzzymatch("art",LK),1)
onlyMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("heritage",LK),1) & evaluate(fuzzymatch("school",LK),1)
onlyMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1) & evaluate(fuzzymatch("class",LK),1)
onlyMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1) & evaluate(fuzzymatch("tutor",LK),1)
onlyMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1) & evaluate(fuzzymatch("instruct",LK),1)
onlyMatch("Instruction - Group") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1) & evaluate(fuzzymatch("train",LK),1)

onlyMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("driving",LK),1) & evaluate(fuzzymatch("school",LK),1)
onlyMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("martial",LK),1) & evaluate(fuzzymatch("art",LK),1)
onlyMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("heritage",LK),1) & evaluate(fuzzymatch("school",LK),1)
onlyMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1) & evaluate(fuzzymatch("class",LK),1)
onlyMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1) & evaluate(fuzzymatch("tutor",LK),1)
onlyMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1) & evaluate(fuzzymatch("instruct",LK),1)
onlyMatch("Instruction - Private") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("personal",LK),1) & evaluate(fuzzymatch("train",LK),1)

onlyMatch("Newsstand") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("news",LK),1)
onlyMatch("Newsstand") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("newspaper",LK),1)

onlyMatch("Rentals (medical supplies, costumes, party equipment, office equipment)") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("office",LK),1) & evaluate(fuzzymatch("equipment",LK),1)

onlyMatch("Trade and vocational school") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("construction",LK),1) & evaluate(fuzzymatch("trade",LK),1)

onlyMatch("Thrift store") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("used",LK),1)

onlyMatch("Social organization or place of assembly") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("private",LK),1) & evaluate(fuzzymatch("club",LK),1)
onlyMatch("Social organization or place of assembly") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("religious",LK),1) & evaluate(fuzzymatch("assembly",LK),1)
onlyMatch("Social organization or place of assembly") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("fraternal",LK),1) & evaluate(fuzzymatch("organization",LK),1)
onlyMatch("Social organization or place of assembly") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("social",LK),1) & evaluate(fuzzymatch("organization",LK),1)

onlyMatch("Smoke/tobacco shop (does not include cannabis sales)") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("head",LK),1) & evaluate(fuzzymatch("shop",LK),1)

onlyMatch("Restaurant") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("coffee",LK),1)
onlyMatch("Restaurant (with other live entertainment/dancing)") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("coffee",LK),1)
onlyMatch("Restaurant (with drive-in or drive-through)") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("coffee",LK),1)
onlyMatch("Restaurant (with ancillary on-premise beer & wine with no separate bar)") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("coffee",LK),1)

onlyMatch("Restaurant (with drive-in or drive-through)") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("fast",LK),1) & evaluate(fuzzymatch("food",LK),1)
onlyMatch("Restaurant") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("fast",LK),1) & evaluate(fuzzymatch("food",LK),1)

%locationselected & location(X) ==> ~location(X)
locationselected & address(X) ==> ~address(X)
locationselected & apn(X) ==> ~apn(X)
locationselected & basezone(X) ==> ~basezone(X)
locationselected & overlayzone(X) ==> ~overlayzone(X)
locationselected & within_1000ft_of(X) ==> ~within_1000ft_of(X)
locationselected & within_300ft_of(X) ==> ~within_300ft_of(X)
locationselected & generalplan(X) ==> ~generalplan(X)

attribute(page,class,X) :- evaluate(
  if(
    cat_party,
    "cat-party",
    true,
    ""
  ), X
)
cat_party :- value(keyword,"10 cats")