Repository: bokeh/bokeh

Issue:
[BUG] Minor typos in validation error output for FactorRange and CDSView
**Software version info**
bokeh 2.0.0
Mozilla Firefox 74.0
macOS Catalina 10.15.3

**Expected behavior:**
Validation errors will have an output with correct spelling.

Example one:
"FactorRange must specify a unique list of categorical factors for an axis"
Example two:
"CDSView filters are not compatible with glyphs with connected topology such as Line or Patch"

**Observed behavior:**
Validation errors have an output with typos (see attached screenshot).

Example one:
"FactorRange must **_specicy_** a unique list of categorical factors for an axis"
Example two:
"CDSView filters are not compatible with glyphs with connected topology **_suchs_** as Line **_and_** Patch"

**Complete, minimal, self-contained example code that reproduces the issue**

**Example one:**
```py
from bokeh.io import output_notebook, show
from bokeh.models import ColumnDataSource, FactorRange
from bokeh.plotting import figure

output_notebook()

fruits = ['Apples', 'Apples']
years = ['2015', '2016']

data = {'fruits' : fruits,
        '2015'   : [2, 1],
        '2016'   : [5, 3]}

x = [ (fruit, year) for fruit in fruits for year in years ]
counts = sum(zip(data['2015'], data['2016']), ()) # like an hstack

source = ColumnDataSource(data=dict(x=x, counts=counts))

p = figure(x_range=FactorRange(*x), plot_height=250, title="Fruit Counts by Year",
           toolbar_location=None, tools="")

p.vbar(x='x', top='counts', width=0.9, source=source)

show(p)

```

**Example two**
```py
from bokeh.layouts import row
from bokeh.plotting import output_notebook, figure, show
from bokeh.sampledata.autompg import autompg
from bokeh.models import CDSView, GroupFilter
from bokeh.models.sources import ColumnDataSource
output_notebook()

autompg = autompg.assign(efficient=(autompg.mpg > 20).astype(str))
autompg = autompg.groupby(['yr', 'efficient']).mpg.mean().reset_index()
autompg = autompg.sort_values(['efficient', 'yr'])
list_p = []
source=ColumnDataSource(autompg)
for eff in ['True', 'False']:
    filter_ = GroupFilter(column_name='efficient', group=eff)
    view = CDSView(source=source, filters=[filter_])

    list_p.append(figure(title=eff))
    list_p[-1].line(x='yr', y='mpg', source=source, view=view)

show(row(list_p))
```

**Screenshots or screencasts of the bug in action**
Example one:
<img width="1052" alt="Screen Shot 2020-04-01 at 11 12 20 PM" src="https://user-images.githubusercontent.com/18173173/78207887-f42d7380-7470-11ea-853a-f7aa905f91d2.png">

Example two:
<img width="1036" alt="Screen Shot 2020-04-01 at 11 24 33 PM" src="https://user-images.githubusercontent.com/18173173/78207888-f68fcd80-7470-11ea-9370-c048914aa6d8.png">


Discussion:

Resolving patch:
diff --git a/bokeh/core/validation/errors.py b/bokeh/core/validation/errors.py
--- a/bokeh/core/validation/errors.py
+++ b/bokeh/core/validation/errors.py
@@ -87,7 +87,7 @@
     Expected min_height <= height <= max_height
 
 1024 *(CDSVIEW_FILTERS_WITH_CONNECTED)*
-    ``CDSView`` filters are not compatible with glyphs with connected topology suchs as Line and Patch.
+    ``CDSView`` filters are not compatible with glyphs with connected topology such as Line or Patch.
 
 9999 *(EXT)*
     Indicates that a custom error check has failed.
@@ -127,12 +127,12 @@
     1016: ("INCOMPATIBLE_POLY_EDIT_RENDERER",                    "PolyEditTool renderers may only reference MultiLine and Patches glyph models"),
     1017: ("INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER",             "PolyEditTool vertex_renderer may only reference XYGlyph models"),
     1018: ("NO_RANGE_TOOL_RANGES",                               "RangeTool must have at least one of x_range or y_range configured"),
-    1019: ("DUPLICATE_FACTORS",                                  "FactorRange must specicy a unique list of categorical factors for an axis"),
+    1019: ("DUPLICATE_FACTORS",                                  "FactorRange must specify a unique list of categorical factors for an axis"),
     1020: ("BAD_EXTRA_RANGE_NAME",                               "An extra range name is configued with a name that does not correspond to any range"),
     1021: ("EQUAL_SLIDER_START_END",                             "Slider 'start' and 'end' cannot be equal"),
     1022: ("MIN_PREFERRED_MAX_WIDTH",                            "Expected min_width <= width <= max_width"),
     1023: ("MIN_PREFERRED_MAX_HEIGHT",                           "Expected min_height <= height <= max_height"),
-    1024: ("CDSVIEW_FILTERS_WITH_CONNECTED",                     "CDSView filters are not compatible with glyphs with connected topology suchs as Line and Patch"),
+    1024: ("CDSVIEW_FILTERS_WITH_CONNECTED",                     "CDSView filters are not compatible with glyphs with connected topology such as Line or Patch"),
     9999: ("EXT",                                                "Custom extension reports error"),
 }
 


Test patch: