Ad copy generator
MAPPINGS:
subtype_mapping
generate/generate_headlines
Generate headlines for ad copy based on remark and home data
fields
(*) required fields
- listing_id: string, "Identifier of the listing"
- remark: string or Null,"Description of the house"
- min_char: int > 0,"Minimal length of the patterns extracted from remark"
- min_headline: int > 0, default=1,"Minimal length of pattern that can be returned without any modifications"
- max_headline: int>0, default=40, "Maximal length of each returned headline"
- max_n: int>0, default=3, "Maximal number of headlines to return"
- *state : str, "Short name of the state, i.e. New York -> NY"
- *subtype : int, "Enum for subtype of the house"
- *property_type : int, "Enum for property type"
- living_area: int>=0, "Living area of the house"
- living_area_unit: string, default="square feet", "living area unit name to show in generated headline. Note that all calculations are done in square feet regardless of this argument"
- price: int>=0, "Price of the house"
- nlp_features: list of string, "Features of the house extracted via NLP service"
Logic
- Extract and generate patterns
1.1. Extract patterns from remark
1.2. generate some patterns from home data if available. Patterns are generated with price and living_area/living_area_unit:
Generated patterns depend on how large and how expensive is home.
1.3. Combine those lists into a single one
- Prepare nlp_features
2.1 Filter and sort nlp features. We keep only home related nlp_features, so for example wooden floors won't be used since they describe rooms, not the house. Also we rank the features by their importance (correlation with price). This ranking depends on state, property type and subtype
2.2. If living_area and living_area_unit are available, create one more feature with them
and add to the end of sorted_nlp_features list.
This pattern is {living_area} {living_area_unit}, for example 1500 square feet.
- Modify patterns
3.1. First decide what to do with each patterns. Long patterns will be return as is, while nlp features will be added to short ones
long_patterns = filter(patterns, pattern_length > min_headline)
short_patterns = filter(patterns, min_char <= pattern_length <= min_headline)
Those patterns then are sorted: long ones by number of character and short ones by number of words they contain 3.2. if there are short patterns, add features to each of them. Note that first we try to create unique combinations of features (add headline1 to feature1, headline2 to feature2), and only then use the same feature/headline again (headline3 + feature1 etc...)
example: [Magnificent house with pool, Beautiful home with dock, Cozy home with fireplace,
Spacious home with pool]
3.3 In case there are no short or long patterns, we have standard patterns.
dummy_headlines:
- "A subtype with extraordinary details"
- "Highlighting a delightful subtype"
- "Showcasing an inviting subtype"
- "A must-see subtype"
- "Showcasing a must-see subtype"
- "Truly one-of-a-kind subtype"
- "A magnificent subtype"
- "A light-filled subtype"
- "A gem of a subtype"
- "An exceptional subtype for property_type"
- "A truly incredible subtype"
- "An incredible subtype for property_type"
- "A truly exceptional subtype"
We just change "subtype" and "property_type" with actual subtype and property_type and generate standard headlines
standard_headlines = dummy_headlines(subtype, property_type)
- Return headlines
Now we have a big list of headlines:
We just filter them by users preferences: we return at most max_n items with length less than max_char That's it.
Notes
- Headlines are returned in the same order as created: first there are longest, then modified short patterns and in the end of the list are standard headlines
- If you got empty list, then probably max_headline is too small or min_char is too high. Try to tune them.
/generate/generate_primary_text
Generate first sentence of primary text based on home data, such as its location and number of bedrooms/bathrooms
fields (* denotes required):
- listing_id: string, "Identifier of the listing"
- patterns: list of string,"Textual patterns to use in text, like ['beautiful home', 'magnificent condo']"
- *state : str, "Short name of the state, i.e. New York -> NY"
- *city : str, "Name of the city"
- neighborhood: str, "Name of the neighborhood"
- *subtype : int, "Enum for subtype of the house"
- *property_type : int, "Enum for property type"
- bedrooms: int>0, "Number of bedrooms the listing has"
- bathrooms: int>0, "Number of bathrooms the listing has",
- exterior_style: string, "Exterior Style of the listing"
- nlp_features: list of string, "Features of the house extracted via NLP service"
- image_tags: list of string, "Tags of the listing extracted via Image Processing services"
Notes
- image_tags could be anything right now and current version of endpoint will return them as is. In the future we will sort and filter them as we do with nlp features
Logic
- Proptype_alias, subtype_alias = values from mapping.
//ex. proptype=3, subtype=2 => proptype_alias = Rent, subtype_alias = condo
- location = city, state // ex. Austin, TX if neighborhood, add it to location -> location = neighborhood, city, state // ex. neighborhood=Downtown -> location = Downtown, Austin, TX
NOTES about location
- if county, neighborhood, city or state are among popular places listed below, location will be equal to that word and all other wll be omitted:
popular_places:
- Manhattan
- Los Angeles
- San Francisco
- San Diego
- Beverly Hills
- Miami
- The Bronx
- Brooklyn
- Queens
- Staten Island
```
For example, if `county=Queens, neighborhood=Forest Hills, city=New York, state=NY`, location will
be displayed as `Queens` since it is in the list of popular places.
This is the only place the new `county` parameter is used!
- If there are duplicates amongst neighborhood, state or city, they will be removed. For
instance, if ```city=Forest Hills, neighborhood=Forest Hills, state=NY```, location will be
displayed as ```Forest Hills, NY``` instead of ```Forest Hills, Forest Hills, NY```.
#### Now get descriptive phrase for house based on data:
**Case 1. bedrooms/bathrooms are provided**
description = A {bedrooms}-bedroom {bathrooms}-bathroom {subtype_alias}
// ex. A 3-bedroom 4-bathroom condo
**Case 2. bedrooms only, bathrooms isn't specified**
description = A {bedrooms}-bedroom {subtype_alias}
// ex. A 3-bedroom condo
**Case3. No bedroom, but patterns list is not empty**
description = patterns[0] # So we pick first element of given pattern list
// ex. Magnificent home
**Case4. No bedroom, no patterns, but exterior styles is provided**
description = A {exterior_style} style {subtype_alias}
// ex. Modern condo
**Case5. no bedrooms, no patterns, no exterior styles**
description = A {subtype_alias}
// ex. A condo
#### Get list of features if either nlp_features or image_tags are provided
1. Sort & filter nlp_features as in headline generator -> sorted_nlp_features
2. Add image tags to that list
#### Connect everything
Here we add descriptive phrase and at most 4 list of features, then add info on location and
property type
first_sentence = descriptive phrase + with (at most 4) features + proptype_alias + location
if there are no features, skip that part:
first sentence = descriptive phrase + proprtype_alias + location
## generate/generate_ad_copy
Generate both a list of possible headlines and a primary text with two sentences based on home data,
including remark
### Parameters (* denotes required)
```yaml
- listing_id: string, "Identifier of the listing"
- remark: string or Null,"Description of the house"
- min_char: int > 0,"Minimal length of the patterns extracted from remark"
- min_headline: int > 0, default=1,"Minimal length of pattern that can be returned without any modifications"
- max_headline: int>0, default=40, "Maximal length of each returned headline"
- max_n: int>0, default=3, "Maximal number of headlines to return"
- *state : str, "Short name of the state, i.e. New York -> NY"
- *city : str, "Name of the city"
- neighborhood: str, optional, "Name of the neighborhood"
- *subtype : int, "Enum for subtype of the house"
- *property_type : int, "Enum for property type"
- bedrooms: int>0, "Number of bedrooms the listing has"
- bathrooms: int>0, "Number of bathrooms the listing has",
- exterior_style: string, optional "Exterior Style of the listing"
- living_area: int>=0, "Living area of the house"
- living_area_unit: string, default="square feet", "living area unit name to show in generated headline. Note that all calculations are done in square feet regardless of this argument"
- price: int>=0, "Price of the house"
- nlp_features: list of string, "Features of the house extracted via NLP service"
- image_tags: list of string, "Tags of the listing extracted via Image Processing services"
Logic
Step1. Get headlines
Pass parameters of /generate_headlines and generate a list of headlines by its logic
Step2. Take unused headlines for primary text
Return max_n number of elements as headlines, pass the rest as patterns parameter to
generate_primary_text to get the first sentence of the primary text.
This will result in a generated string
first_sentence = "A 3-bedroom home with dock, pool, and fireplace for sale in Forest Hills, Queens, NY."
Step3. Search location related sentences
Search for location related sentences in remark. We define those as sentences that contain at least one of those phrases:
"location_related_phrases": [
"near",
"close to",
"shopping",
"convenient to all transportation",
"convenient location",
"conveniently located",
"convenient to",
"located less than",
"located within walking distance",
"few minutes walk from",
"few minutes drive from",
"just a mile away",
"steps away",
"minutes away",
"subway stop from",
"subway stops from",
"desirable location",
"a block to",
"blocks to",
"meters away"
]
This will result in a list of location related sentences:
location_related_sentences = ["This 3-bedroom home is meters away from Central park",
"Condo a subway from National University"]
Step4. Filter location related sentences
Some phrases may be repeated in both first sentence (gotten from primary_text_generator) and second sentence extracted for remark. To avoid this, we remove the sentences from location_related_sentences that contain words from the first_sentence (about bedroom, style etc...)
In example above, there's a sentence about bedrooms. It will be removed after this step:
Step5. Connect everything
Now we just connect first and second sentences to get a primary text. If there's no second sentence extracted from remark, we return only the first one.
Also we return a list of headlines:
{
"headlines": [
"4 bedroom home with pool",
"Practical home 4500 square feet"
],
"primary_text": "A 4-bedroom 2-bathroom home with pool, granite countertops, gym, and spa room for sale in Forest Hills, Queens, NY. This hoome is only 5 minutes away from Central park",
"listing_id": "12344"
}
Feature Extractor
This endpoint takes a remark as input and extracts exact matches of nlp features and their variations (plural, with dash "-"). For example, if the text contains "in-unit washer/drier", the service will extract "in unit washer".
List of features and their variations are below. Not that lists don't include variants with dash ("-") and plural versions (city views), but they are extracted too.
{
"patterns": {
"not pet-friendly": [
"not pet friendly",
"no pet friendly",
"no pets are allowed",
"no pets are permitted",
"no pets permitted",
"no pets allowed",
"not pets allowed"
],
"pet-friendly": [
"pet friendly",
"pets are welcome",
"pets are permitted",
"pets are allowed",
"pets permitted",
"pets allowed",
"petfriendly"
],
"dog run": [
"dog run",
"dog runsand"
],
"pet wash station": [
"pet wash",
"pet washing"
],
"dog wash station": [
"dog wash",
"dog washing"
],
"pet spa": [
"pet spa"
],
"ready to move-in": [
"ready to move in",
"move in ready",
"move in condition",
"ready for your immediate move in",
"just move in",
"ready to be moved into",
"ready for you to move in",
"ready to move into",
"ready to move immediately",
"ready to be moved",
"ready for quick move in"
],
"gated access": [
"gated access",
"gated rv access",
"gated security access",
"gated and paved rv access"
],
"fully furnished": [
"fully furnished",
"totally furnished",
"full furnished",
"completely furnished"
],
"furniture included": [
"furniture included",
"furniture is included",
"furniture's included"
],
"appliances included": [
"appliances included"
],
"in unit washer/dryer": [
"in unit washer dryer",
"washer and dryer inside unit",
"washer dryer in unit",
"washerdryer combos in unit",
"washer dryer in unit",
"washerdryer in unit",
"in unit washerdryer",
"in unit lg washerdryer",
"an unit washer dryer",
"washer and dryer in unit",
"an in unit washerdryer",
"washer dryer in the unit",
"in unit washer and dryer",
"in unit bosch washers dryer",
"the washerdryer unit",
"in unit miele washerdryer",
"in unit washer and vented dryer",
"in unit washer & dryer"
],
"in unit laundry": [
"in unit laundry",
"in unit vented laundry",
"laundry in unit"
],
"playroom": [
"playroom",
"play room"
],
"high-speed internet": [
"high speed internet"
],
"Wi-Fi": [
"wifi",
"wi fi"
],
"tesla charger": [
"tesla charger",
"tesla charging port",
"tesla charges",
"tesla wall charger",
"tesla car charger",
"tesla charging station",
"tesla destination charger",
"tesla ev charger",
"tesla supercharging station",
"tesla electric car charger",
"tesla supercharger"
],
"EV-charger": [
"ev charger",
"ev car charger",
"ev supercharge terminal",
"ev wall charger"
],
"parks nearby": [
"parks nearby"
],
"green surroundings": [
"green surroundings"
],
"close to public transport": [
"close to public transport",
"close to public transportation",
"easy access to all transportation",
"convenient to all transportation"
],
"bike storage": [
"bike storage",
"bike room"
],
"private storage": [
"private storage"
],
"concierge services": [
"concierge"
],
"security services": [
"security services",
"24 hour security",
"24 7 security",
"private security",
"24hr security",
"24 hrs security",
"24 hr security"
],
"coworking space": [
"coworking space",
"co working space"
],
"ocean view": [
"ocean view",
"oceanview",
"view of the ocean",
"view of ocean"
],
"lake view": [
"lake view",
"lakeview",
"view of the lake",
"view of lake"
],
"water view": [
"water view",
"waterview",
"view of the water",
"view of water"
],
"river view": [
"river view",
"riverview",
"view of the river",
"view of river"
],
"mountain view": [
"mountain view",
"mountainview",
"view of the mountain",
"view of mountain"
],
"city view": [
"city view",
"cityview",
"view of the city",
"view of city"
],
"floor-to-ceiling glass": [
"floor to ceiling glass",
"floor to ceiling sliding glass"
],
"floor-to-ceiling windows": [
"floor to ceiling window",
"floor to ceiling sliding window"
],
"insulated windows": [
"insulated windows",
"insulating window"
],
"windowed kitchen": [
"windowed kitchen"
],
"windowed living room": [
"windowed living room"
],
"windowed bedroom": [
"windowed bedroom"
],
"wine refrigerator": [
"wine refrigerator",
"wine fridge"
],
"wine storage": [
"wine storage"
],
"wine cellar": [
"wine cellar"
],
"private library": [
"private library"
],
"workout room": [
"workout room",
"work out room"
],
"car wash": [
"car wash",
"carwash"
],
"beach access": [
"beach access"
],
"chief kitchen": [
"chief kitchen",
"chief's kitchen"
],
"rooftop deck": [
"rooftop deck",
"roof top deck"
],
"outdoor garden": [
"outdoor garden"
],
"outdoor living space": [
"outdoor living space"
],
"RO water": [
"ro water",
"reverse osmosis water",
"reverse osmosis system"
],
"11 ft. ceilings": [
"11 ft ceilings",
"11 foot high ceiling",
"11 foot ceiling",
"11 ft ceiling",
"11ft ceiling",
"11' ceiling",
"11' ceil"
],
"12 ft. ceilings": [
"12 ft ceilings",
"12 foot high ceiling",
"12 foot ceiling",
"12 ft ceiling",
"12ft ceiling",
"12' ceiling",
"12' ceil"
],
"attic fans": [
"attic fans"
],
"skylights": [
"skylight",
"sky light"
],
"automatic sprinklers": [
"automatic sprinklers"
],
"solar-heated pool": [
"solar heated pool",
"pool is solar heated"
],
"solar panels": [
"solar panels"
],
"rainshower": [
"rainshower",
"rain shower",
"rainfall shower",
"shower with rain",
"rainhead shower"
],
"jetted tub": [
"jetted tub",
"jetted bath tub",
"jetted jacuzzi tub",
"jetted soaking tub",
"jetted bathtub"
],
"sunken tub": [
"sunken tub",
"sunken jacuzzi tub",
"sunken spa tub",
"sunken soaking tub",
"sunken bathtub"
],
"breakfast nook": [
"breakfast nook"
],
"kitchen nook": [
"kitchen nook"
],
"kitchen island": [
"kitchen island"
],
"recently renovated kitchen": [
"recently renovated kitchen",
"recently remodeled kitchen",
"recently upgraded kitchen",
"recently updated kitchen",
"new kitchen"
],
"recently renovated bathroom": [
"recently renovated bathroom",
"recently remodeled bathroom",
"recently upgraded bathroom",
"recently updated bathroom",
"new bathroom"
],
"recently renovated bedroom": [
"recently renovated bedroom",
"recently remodeled bedroom",
"recently upgraded bedroom",
"recently updated bedroom",
"new bedroom"
],
"recently renovated living room": [
"recently renovated living room",
"recently remodeled living room",
"recently upgraded living room",
"recently updated living room",
"new living room"
],
"recently renovated dining room": [
"recently renovated dining room",
"recently remodeled dining room",
"recently upgraded dining room",
"recently updated dining room",
"new dining room"
],
"renovated kitchen": [
"renovated kitchen",
"remodeled kitchen",
"upgraded kitchen",
"updated kitchen",
"kitchen was remodeled"
],
"renovated bathroom": [
"renovated bathroom",
"remodeled bathroom",
"upgraded bathroom",
"updated bathroom"
],
"renovated bedroom": [
"renovated bedroom",
"remodeled bedroom",
"upgraded bedroom",
"updated bedroom"
],
"renovated living room": [
"renovated living room",
"remodeled living room",
"upgraded living room",
"updated living room"
],
"renovated dining room": [
"renovated dining room",
"remodeled dining room",
"upgraded dining room",
"updated dining room"
],
"bar": [
"bar"
],
"dry bar": [
"dry bar",
"bar dry"
],
"wet bar": [
"wet bar",
"bar wet",
"wetbar",
"w bar"
],
"breakfast bar": [
"breakfast bar"
],
"irrigation system": [
"irrigation system"
],
"gray water system": [
"gray water system"
],
"home automation system": [
"home automation system"
],
"automation system": [
"automation system"
],
"D-BOX System": [
"d box system"
],
"walk-in closets": [
"walkin closets",
"walk in closets",
"walking closet"
],
"dual closets": [
"dual closets"
],
"linen closets": [
"linen closets"
],
"utility closets": [
"utility closets"
],
"large backyard": [
"large backyard",
"large garden",
"large yard",
"huge backyard",
"huge garden",
"huge yard",
"spacious backyard",
"spacious garden",
"spacious yard",
"great backyard",
"great garden",
"great yard",
"big backyard",
"big garden",
"big yard",
"large back yard",
"large open yard",
"backyard is huge"
],
"backyard": [
"backyard",
"garden",
"yard"
],
"home office": [
"home office",
"home with office"
],
"open floor plan": [
"open floor plan",
"open floorplan"
],
"premium countertops": [
"premium countertops",
"premium counter tops",
"premium kitchen counter tops",
"premium counter"
],
"granite countertops": [
"granite countertops",
"granite counter tops",
"granite kitchen counter tops",
"granite tile counter tops",
"granite counter"
],
"marble countertops": [
"marble countertops",
"marble counter tops",
"marble kitchen counter tops",
"marble counter"
],
"corian countertops": [
"corian countertops",
"corian counter tops",
"corian kitchen counter tops",
"corian counter"
],
"stone countertops": [
"stone countertops",
"stone counter tops",
"stone kitchen counter tops",
"stone counter"
],
"quartz countertops": [
"quartz countertops",
"quartz counter tops",
"quartz kitchen counter tops",
"quartz counter",
"quartz slab countertop"
],
"soapstone countertops": [
"soapstone countertops",
"soapstone counter tops",
"soapstone kitchen counter tops",
"soapstone counter"
],
"slate countertops": [
"slate countertops",
"slate counter tops",
"slate kitchen counter tops",
"slate counter"
],
"formica counters": [
"formica countertops",
"formica counter tops",
"formica kitchen counter tops",
"formica counter"
],
"concrete countertops": [
"concrete countertops",
"concrete counter tops",
"concrete kitchen counter tops",
"concrete counter"
],
"tile counters": [
"tile countertops",
"tile counter tops",
"tile kitchen counter tops",
"tile counter"
],
"butcher block countertops": [
"butcher block countertops",
"butcher block counter tops",
"butcher block counter"
],
"solid surface counters": [
"solid surface countertops",
"solid surface counter tops",
"solid surface counter"
],
"swanstone countertops": [
"swanstone countertops",
"swanstone counter tops",
"swanstone kitchen counter tops",
"swanstone counter"
],
"recycled glass countertops": [
"recycled glass countertops",
"recycled glass counter tops",
"recycled glass counter"
],
"icestone countertops": [
"icestone countertops",
"icestone counter tops",
"icestone counter"
],
"bar high countertops": [
"bar high countertops",
"bar high counter tops",
"bar high counter"
],
"ceramic countertops": [
"ceramic countertops",
"ceramic counter tops",
"ceramic counter"
],
"porcelain countertops": [
"porcelain countertops",
"porcelain counter tops",
"porcelain counter"
],
"recessed lighting": [
"recessed lighting",
"recess lighting",
"recess light",
"recess lead lighting"
],
"LED lighting": [
"led lighting",
"lead recessed lighting",
"lead light"
],
"stainless steel appliances": [
"stainless steel appliances",
"stainless steel appln",
"ss appliances",
"ss appln"
],
"Thermador appliances": [
"thermador appliances",
"thermador appln"
],
"elevator": [
"elevator"
],
"washer": [
"washer"
],
"drier": [
"drier"
],
"dishwasher": [
"dishwasher"
],
"screen room": [
"screen room",
"screenroom",
"screen rm",
"screenrm"
],
"media room": [
"media room",
"media rm"
],
"theatre room": [
"theatre room",
"theatre rm"
],
"sun room": [
"sun room",
"sun rm",
"sunroom"
],
"sauna room": [
"sauna room",
"sauna rm",
"sauna steam room"
],
"steam room": [
"steam room",
"steam rm",
"steamroom"
],
"spa room": [
"spa room",
"spa rm"
],
"yoga room": [
"yoga room",
"yoga rm"
],
"fitness room": [
"fitness room",
"fitness rm"
],
"gym": [
"gym"
],
"fitness studio": [
"fitness studio"
],
"washing machine": [
"washing machine"
],
"courtyard with fireplace": [
"courtyard with fireplace",
"courtyard with fire place"
],
"hand-carved fireplace": [
"hand carved fireplace",
"hand carved fire place"
],
"marble fireplace": [
"marble fireplace",
"marble fire place"
],
"fireplace": [
"fireplace",
"fire place"
],
"smart home tech": [
"smart home tech"
],
"indoor cabana": [
"indoor cabana"
],
"heated floors": [
"heat floor",
"heated flr",
"heated flooring",
"heat limestone floor"
],
"bare floors": [
"bare floor",
"bare flr",
"bare flooring"
],
"tile floors": [
"tile floor",
"tile flr",
"tile flooring",
"tile plank floor",
"floor tile"
],
"ceramic floors": [
"ceramic floor",
"ceramic flr",
"ceramic flooring",
"ceramic tile floor"
],
"stone floors": [
"stone floor",
"stone flr",
"stone flooring"
],
"travertine floors": [
"travertine floor",
"travertine flr",
"travertine flooring"
],
"marble floors": [
"marble floor",
"marble flr",
"marble flooring"
],
"honed limestone floors": [
"honed limestone floor",
"honed limestone flr",
"honed limestone flooring"
],
"wood floors": [
"wood floor",
"wood flr",
"wood flooring"
],
"bamboo floors": [
"bamboo floor",
"bamboo flr",
"bamboo flooring"
],
"hardwood floors": [
"hardwood floor",
"hardwood flr",
"hardwood flooring",
"hard wood floor",
"hard wood flr",
"hard wood flooring"
],
"laminate floors": [
"laminate floor",
"laminate flr",
"laminate flooring",
"laminate wood flooring"
],
"beech floors": [
"beech floor",
"beech flr",
"beech flooring"
],
"ash floors": [
"ash floor",
"ash flr",
"ash flooring"
],
"pine floors": [
"pine floor",
"pine flr",
"pine flooring"
],
"natural wood flooring": [
"natural wood floor",
"natural wood flr",
"natural wood flooring"
],
"oak floor": [
"oak floor",
"oak flr",
"oak flooring",
"oak wood flooring"
],
"hickory hardwood floor": [
"hickory hardwood floor",
"hickory hardwood flr",
"hickory hardwood flooring"
],
"exhaust fan": [
"exhaust fan"
],
"wall mounted fan": [
"wall mounted fan"
],
"misting fan": [
"misting fan"
],
"floor fan": [
"floor fan"
],
"industrial fan": [
"industrial fan"
],
"concrete walls": [
"concrete wall"
],
"stucco walls": [
"stucco wall"
],
"load-bearing walls": [
"load bearing wall"
],
"glass walls": [
"glass wall",
"wall of glass"
],
"precast concrete walls": [
"precast concrete wall"
],
"masonry walls": [
"masonry wall"
],
"stone walls": [
"stone wall"
],
"shear walls": [
"shear wall"
],
"panel walls": [
"panel wall"
],
"veneered walls": [
"veneered wall"
],
"faced walls": [
"faced wall"
],
"suede upholstered walls": [
"suede upholstered wall"
],
"fully insulated walls": [
"fully insulated wall"
],
"brick facade": [
"facade bricks",
"brick facade",
"brick face"
],
"hollow bricks": [
"hollow bricks"
],
"free standing baths": [
"free standing baths"
],
"corner baths": [
"corner baths"
],
"whirlpool baths": [
"whirlpool baths"
],
"shower baths": [
"shower baths"
],
"steel baths": [
"steel baths"
],
"master baths": [
"master baths",
"master bedroom bath"
],
"pedestal bath": [
"pedestal bath"
],
"dual vanities": [
"dual vanities"
],
"make-up vanities": [
"make up vanity"
],
"dual sink vanities": [
"dual sink vanities"
],
"glass shower": [
"glass shower",
"shower glass"
],
"jacuzzi spa": [
"jacuzzi spa"
],
"therapeutic tub": [
"therapeutic tub"
],
"soaker tub": [
"soaker tub"
],
"hot tub": [
"hot tub",
"hottub"
],
"slab cabinets": [
"slab cabinets"
],
"country cabinets": [
"country cabinets"
],
"craftsman cabinets": [
"craftsman cabinets"
],
"glass-front cabinets": [
"glass front cabinets"
],
"vaulted ceilings": [
"vaulted ceiling",
"vaulted ceil",
"vaulted beam ceilings"
],
"coffered ceilings": [
"coffered ceilings",
"coffered ceil"
],
"10 ft ceilings": [
"10 ft ceilings",
"10 ft ceil",
"10' ceiling",
"10' ceil",
"10 foot ceiling",
"ten ft ceilings",
"ten ft ceil"
],
"smooth ceilings": [
"smooth ceilings",
"smooth ceil"
],
"tray ceilings": [
"tray ceilings",
"tray ceil"
],
"high ceilings": [
"high ceilings",
"high ceil"
],
"9 ft ceilings": [
"9 ft ceilings",
"9 ft ceil",
"9' ceiling",
"9' ceil",
"9 foot ceiling",
"nine ft ceilings",
"nine ft ceil"
],
"beamed ceilings": [
"beamed ceilings",
"beamed ceil"
],
"cathedral ceilings": [
"cathedral ceilings",
"cathedral ceil"
],
"regular ceilings": [
"regular ceilings",
"regular ceil"
],
"two story ceilings": [
"two story ceilings",
"two story ceil",
"2 story ceilings",
"2 story ceil"
],
"suspended ceilings": [
"suspended ceilings",
"suspended ceil"
],
"glass ceilings": [
"glass ceilings",
"glass ceil"
],
"conventional ceilings": [
"conventional ceilings",
"conventional ceil"
],
"drop ceilings": [
"drop ceilings",
"drop ceil"
],
"coved ceilings": [
"coved ceilings",
"coved ceil"
],
"sloped ceilings": [
"sloped ceilings",
"sloped ceil"
],
"exposed ceilings": [
"exposed ceilings",
"exposed ceil"
],
"shed ceilings": [
"shed ceilings",
"shed ceil"
],
"groin vault ceilings": [
"groin vault ceilings",
"groin vault ceil"
],
"barrel vault ceilings": [
"barrel vault ceilings",
"barrel vault ceil"
],
"dome ceilings": [
"dome ceilings",
"dome ceil"
],
"tall ceilings": [
"tall ceilings",
"tall ceil"
],
"kitchen ceilings": [
"kitchen ceilings",
"kitchen ceil"
],
"gypsum ceilings": [
"gypsum ceilings",
"gypsum ceil"
],
"wooden ceilings": [
"wooden ceilings",
"wooden ceil"
],
"plywood ceilings": [
"plywood ceilings",
"plywood ceil"
],
"pitched ceilings": [
"pitched ceilings",
"pitched ceil"
],
"sky lounge": [
"sky lounge"
],
"garden lounge": [
"garden lounge"
],
"built-in BBQ": [
"built in BBQ",
"built in barbecue",
"built in grill"
],
"private BBQ": [
"private BBQ",
"private barbecue",
"private grill"
],
"BBQ": [
"BBQ",
"barbecue",
"grill"
],
"outdoor BBQ": [
"outdoor BBQ",
"outdoor barbecue",
"outdoor grill"
],
"private terrace": [
"private terrace"
],
"terrace": [
"terrace"
],
"wrap around patios": [
"wrap around patios"
],
"brick paver patios": [
"brick paver patios",
"brick patios"
],
"patios": [
"patios"
],
"balcony": [
"balcony"
],
"porch": [
"porch"
],
"basin": [
"basin"
],
"outdoor pool": [
"outdoor pool"
],
"fiberglass pool": [
"fiberglass pool"
],
"vinyl pool": [
"vinyl pool"
],
"concrete pool": [
"concrete pool"
],
"infinity pool": [
"infinity pool"
],
"zero edge pool": [
"zero edge pool",
"0 edge pool"
],
"above ground pool": [
"above ground pool"
],
"in-ground pool": [
"in ground pool",
"pool in ground",
"inground pool",
"in ground heat pool"
],
"gunite pool": [
"gunite pool"
],
"heated pool": [
"heated pool",
"ht pool",
"pool is heated",
"heat pool",
"heat swimming pool",
"heated gunite pool"
],
"salt water pool": [
"salt water pool",
"saltwater pool"
],
"indoor pool": [
"indoor pool",
"indoor outdoor pool"
],
"pool": [
"pool"
],
"doorman": [
"doorman"
],
"security guard": [
"security guard"
],
"private gates": [
"private gates",
"private electric gate"
],
"discrete gates": [
"discrete gates"
],
"attached garage": [
"attach garage",
"attached garage"
],
"garage": [
"garage"
],
"covered parking": [
"cover parking"
],
"assigned parking": [
"assign parking"
],
"car charging stations": [
"car charging stations"
],
"shared car services": [
"shared car services"
],
"bus stop": [
"bus stop"
],
"satellite dish": [
"satellite dish"
],
"master antenna": [
"master antenna"
],
"TV antenna": [
"tv antenna"
],
"cable access": [
"cable access"
],
"metered sprinkler": [
"metered sprinkler",
"sprinkler metered"
],
"tennis court": [
"tennis court",
"tennis pickleball court"
],
"tennis": [
"tennis"
],
"invisible fence": [
"invisible fence"
],
"stable": [
"stable"
],
"pier": [
"pier"
],
"boat lift": [
"boat lift",
"boatlift"
],
"box stalls": [
"box stalls"
],
"private dock": [
"private dock",
"dock private"
],
"single slip dock": [
"single slip dock",
"dock single slip"
],
"dock": [
"dock"
],
"playground": [
"playground",
"play ground"
],
"storage": [
"storage"
],
"koi pond": [
"koi pond"
]
}
}
TextGenerator
TextGenerator uses ChatGPT to generate texts for the given location and collection of properties.
generate/generate_invitation_text
Generate text to invite client to MC. Invitation text consists of greeting, system introduction, collection information and closing parts. All the parts excepting collection information are predefined. Collection information is generated using ChatGPT. It is generated if the collection consists of homes or when it is not home collection but its properties have remarks.
generate/generate_location_based_text
Generate text about the location of agent local market using ChatGPT.