├── 2016-05-21_Designing-spaCy ├── _data.json ├── _layout.jade ├── _mixins.jade ├── assets │ ├── css │ │ ├── _base │ │ │ ├── _fonts.sass │ │ │ ├── _grid.sass │ │ │ ├── _layout.sass │ │ │ ├── _mixins.sass │ │ │ ├── _reset.sass │ │ │ ├── _theme.sass │ │ │ └── _utilities.sass │ │ ├── reveal.scss │ │ ├── theme-explosion.sass │ │ └── theme-spacy.sass │ ├── fonts │ │ ├── sourcecodepro-semibold.eot │ │ ├── sourcecodepro-semibold.svg │ │ ├── sourcecodepro-semibold.ttf │ │ ├── sourcecodepro-semibold.woff │ │ ├── sourcesanspro-bold.eot │ │ ├── sourcesanspro-bold.svg │ │ ├── sourcesanspro-bold.ttf │ │ ├── sourcesanspro-bold.woff │ │ ├── sourcesanspro-bold.woff2 │ │ ├── sourcesanspro-bolditalic.eot │ │ ├── sourcesanspro-bolditalic.svg │ │ ├── sourcesanspro-bolditalic.ttf │ │ ├── sourcesanspro-bolditalic.woff │ │ ├── sourcesanspro-bolditalic.woff2 │ │ ├── sourcesanspro-italic.eot │ │ ├── sourcesanspro-italic.svg │ │ ├── sourcesanspro-italic.ttf │ │ ├── sourcesanspro-italic.woff │ │ ├── sourcesanspro-italic.woff2 │ │ ├── sourcesanspro-regular.eot │ │ ├── sourcesanspro-regular.svg │ │ ├── sourcesanspro-regular.ttf │ │ ├── sourcesanspro-regular.woff │ │ └── sourcesanspro-regular.woff2 │ ├── img │ │ ├── icons.svg │ │ └── pattern_blue.jpg │ └── js │ │ ├── prism.js │ │ └── reveal.js ├── img │ ├── cake.jpg │ ├── kitchen.jpg │ ├── kitchen2.jpg │ ├── kitchen3.jpg │ └── lightning-tour.png └── index.jade ├── 2016-11-19_Introduction-to-spaCy ├── _data.json ├── _layout.jade ├── _mixins.jade ├── assets │ ├── css │ │ ├── _base │ │ │ ├── _fonts.sass │ │ │ ├── _grid.sass │ │ │ ├── _layout.sass │ │ │ ├── _mixins.sass │ │ │ ├── _reset.sass │ │ │ ├── _theme.sass │ │ │ └── _utilities.sass │ │ ├── reveal.scss │ │ ├── theme-explosion.sass │ │ └── theme-spacy.sass │ ├── fonts │ │ ├── sourcecodepro-semibold.eot │ │ ├── sourcecodepro-semibold.svg │ │ ├── sourcecodepro-semibold.ttf │ │ ├── sourcecodepro-semibold.woff │ │ ├── sourcesanspro-bold.eot │ │ ├── sourcesanspro-bold.svg │ │ ├── sourcesanspro-bold.ttf │ │ ├── sourcesanspro-bold.woff │ │ ├── sourcesanspro-bold.woff2 │ │ ├── sourcesanspro-bolditalic.eot │ │ ├── sourcesanspro-bolditalic.svg │ │ ├── sourcesanspro-bolditalic.ttf │ │ ├── sourcesanspro-bolditalic.woff │ │ ├── sourcesanspro-bolditalic.woff2 │ │ ├── sourcesanspro-italic.eot │ │ ├── sourcesanspro-italic.svg │ │ ├── sourcesanspro-italic.ttf │ │ ├── sourcesanspro-italic.woff │ │ ├── sourcesanspro-italic.woff2 │ │ ├── sourcesanspro-regular.eot │ │ ├── sourcesanspro-regular.svg │ │ ├── sourcesanspro-regular.ttf │ │ ├── sourcesanspro-regular.woff │ │ └── sourcesanspro-regular.woff2 │ ├── img │ │ ├── icons.svg │ │ └── pattern_blue.jpg │ └── js │ │ ├── prism.js │ │ └── reveal.js └── index.jade ├── 2016-11-21_spaCy-and-NLP-Innovation.pdf ├── 2016-11-28_The-State-of-AI-2016.pdf ├── 2017-01-19_Teaching-AI-about-Human-Knowledge.pdf ├── 2017-06-13_Why-Python-is-the-best-language-for-AI.pdf ├── 2017-08-28_spaCy-101.pdf ├── 2017-11-02_Practical-and-Effective-Neural-NER.pdf ├── 2018-03-21_Supervised-Learning-is-Great.pdf ├── 2018-04-12_Embed-Encode-Attend-Predict.pdf ├── 2018-04-15_Multi-lingual-NLU-with-spaCy.pdf ├── 2018-04_12_Rapid-NLP-Annotation.pdf ├── 2018-05-05_Teaching-AI-about-Human-Knowledge.pdf ├── 2018-07-07_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf ├── 2018-07-26_How-to-ingore-most-startup-advice.pdf ├── 2018-10-31_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf.pdf ├── 2018-10_31_Rapid-NLP-Annotation.pdf ├── 2018-11-22_The-AI_Revolution-will-not-be-Monopolized.pdf └── README.md /2016-05-21_Designing-spaCy/_data.json: -------------------------------------------------------------------------------- 1 | { 2 | "index": { 3 | "title": "Designing spaCy: Industrial-strength NLP", 4 | "event": "PyData Berlin", 5 | "date": "2016-05-21", 6 | "theme": "spacy" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/_layout.jade: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 LAYOUT 3 | //- ---------------------------------- 4 | 5 | include _mixins 6 | 7 | doctype html 8 | html(lang="en") 9 | head 10 | title #{title} - #{event} 11 | 12 | meta(http-equiv="content-type" content="text/html; charset=utf-8") 13 | meta(name="viewport" content="width=device-width, initial-scale=1.0") 14 | link(rel="stylesheet" href="/assets/css/reveal.css") 15 | link#theme(rel="stylesheet" href="/assets/css/theme-#{theme}.css") 16 | 17 | body 18 | main.reveal.o-container 19 | .slides.o-slides 20 | !=yield 21 | 22 | script(src="/assets/js/prism.js") 23 | script(src="/assets/js/reveal.js") 24 | script. 25 | Reveal.initialize({ 26 | controls: true, 27 | progress: false, 28 | history: true, 29 | center: true, 30 | width: 1440, 31 | height: 900, 32 | margin: 0.15 33 | }) 34 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/_mixins.jade: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 MIXINS 3 | //- ---------------------------------- 4 | 5 | //- Add prefixes to items of an array (for modifier CSS classes) 6 | 7 | - function prefixArgs(array, prefix) { 8 | - return array.map(function(arg) { 9 | - return prefix + '--' + arg; 10 | - }).join(' '); 11 | - } 12 | 13 | 14 | //- Slide 15 | 16 | mixin slide(state, transition, speed) 17 | section(data-state=state data-transition=transition data-transition-speed=speed) 18 | .o-slide&attributes(attributes) 19 | block 20 | 21 | 22 | //- Icon 23 | 24 | mixin icon(name, size) 25 | - var size = size || 28 26 | 27 | svg.o-icon(aria-hidden="true" viewBox="0 0 #{size} #{size}" width=size height=size)&attributes(attributes) 28 | use(xlink:href="/assets/img/icons.svg#icon-#{name}") 29 | 30 | 31 | //- Image 32 | 33 | mixin image(src) 34 | figure.o-block 35 | img(src="img/#{src}") 36 | 37 | 38 | //- Code 39 | 40 | mixin code(language, label) 41 | pre.c-code-block.o-block(class="lang-#{language || 'python'}") 42 | if label 43 | span.c-code-block__label.u-text-label=label 44 | 45 | code.c-code-block__content.u-code-regular&attributes(attributes) 46 | block 47 | 48 | 49 | //- List 50 | 51 | mixin list(type, start) 52 | if type 53 | ol.c-list.o-block.u-text-regular(class="c-list--#{type}" style=(start === 0 || start) ? "counter-reset: li #{(start - 1)}" : "")&attributes(attributes) 54 | block 55 | 56 | else 57 | ul.c-list.c-list--bullets.o-block.u-text-regular&attributes(attributes) 58 | block 59 | 60 | 61 | //- List item 62 | 63 | mixin item() 64 | li.c-list__item&attributes(attributes) 65 | block 66 | 67 | 68 | //- Grid Container 69 | 70 | mixin grid(...style) 71 | .o-grid.o-block(class=prefixArgs(style, "o-grid"))&attributes(attributes) 72 | block 73 | 74 | 75 | //- Grid Column 76 | 77 | mixin col(...style) 78 | .o-grid__col(class=prefixArgs(style, "o-grid__col"))&attributes(attributes) 79 | block 80 | 81 | 82 | //- Headlines 83 | 84 | mixin h(level) 85 | +headline(level).u-heading&attributes(attributes) 86 | block 87 | 88 | 89 | //- Headline base 90 | 91 | mixin headline(level) 92 | if level == 1 93 | h1.u-heading-1&attributes(attributes) 94 | block 95 | 96 | else if level == 2 97 | h2.u-heading-2&attributes(attributes) 98 | block 99 | 100 | else if level == 3 101 | h3.u-heading-3&attributes(attributes) 102 | block 103 | 104 | else if level == 4 105 | h4.u-heading-4&attributes(attributes) 106 | block 107 | 108 | else if level == 5 109 | h5.u-heading-5&attributes(attributes) 110 | block 111 | 112 | 113 | //- Date 114 | 115 | mixin date(input) 116 | - var date = new Date(input) 117 | - var months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ] 118 | 119 | time(datetime=JSON.parse(JSON.stringify(date)))&attributes(attributes)=months[date.getMonth()] + ' ' + date.getDate() + ', ' + date.getFullYear() 120 | 121 | 122 | //- Logos 123 | 124 | mixin spacy-logo 125 | svg(viewBox="0 0 675 215" width="500").o-block 126 | path(fill="currentColor" d="M83.6 83.3C68.3 81.5 67.2 61 47.5 62.8c-9.5 0-18.4 4-18.4 12.7 0 13.2 20.3 14.4 32.5 17.7 20.9 6.3 41 10.7 41 33.3 0 28.8-22.6 38.8-52.4 38.8-24.9 0-50.2-8.9-50.2-31.8 0-6.4 6.1-11.3 12-11.3 7.5 0 10.1 3.2 12.7 8.4 5.8 10.2 12.3 15.6 28.3 15.6 10.2 0 20.6-3.9 20.6-12.7 0-12.6-12.8-15.3-26.1-18.4-23.5-6.6-43.6-10-46-36.1C-1 34.5 91.7 32.9 97 71.9c.1 7.1-6.5 11.4-13.4 11.4zm110.2-39c32.5 0 51 27.2 51 60.8 0 33.7-17.9 60.8-51 60.8-18.4 0-29.8-7.8-38.1-19.8v44.5c0 13.4-4.3 19.8-14.1 19.8-11.9 0-14.1-7.6-14.1-19.8V61.3c0-10.6 4.4-17 14.1-17 9.1 0 14.1 7.2 14.1 17v3.6c9.2-11.6 19.7-20.6 38.1-20.6zm-7.7 98.4c19.1 0 27.6-17.6 27.6-38.1 0-20.1-8.6-38.1-27.6-38.1-19.8 0-29 16.3-29 38.1 0 21.2 9.2 38.1 29 38.1zM266.9 76c0-23.4 26.9-31.7 52.9-31.7 36.6 0 51.7 10.7 51.7 46v34c0 8.1 5 24.1 5 29 0 7.4-6.8 12-14.1 12-8.1 0-14.1-9.5-18.4-16.3-11.9 9.5-24.5 16.3-43.8 16.3-21.3 0-38.1-12.6-38.1-33.3 0-18.4 13.2-28.9 29-32.5 0 .1 51-12 51-12.1 0-15.7-5.5-22.6-22-22.6-14.5 0-21.9 4-27.5 12.7-4.5 6.6-4 10.6-12.7 10.6-6.9-.1-13-4.9-13-12.1zm43.6 70.2c22.3 0 31.8-11.8 31.8-35.3v-5c-6 2-30.3 8-36.8 9.1-7 1.4-14.1 6.6-14.1 14.9.1 9.1 9.4 16.3 19.1 16.3zM474.5 0c31.5 0 65.7 18.8 65.7 48.8 0 7.7-5.8 14.1-13.4 14.1-10.3 0-11.8-5.5-16.3-13.4-7.6-13.9-16.5-23.3-36.1-23.3-30.2-.2-43.7 25.6-43.7 57.8 0 32.4 11.2 55.8 42.4 55.8 20.7 0 32.2-12 38.1-27.6 2.4-7.1 6.7-14.1 15.6-14.1 7 0 14.1 7.2 14.1 14.8 0 31.8-32.4 53.8-65.8 53.8-36.5 0-57.2-15.4-68.5-41-5.5-12.2-9.1-24.9-9.1-42.4-.1-49.2 28.6-83.3 77-83.3zm180.3 44.3c8 0 12.7 5.2 12.7 13.4 0 3.3-2.6 9.9-3.6 13.4L625.1 173c-8.6 22.1-15.1 37.4-44.5 37.4-14 0-26.1-1.2-26.1-13.4 0-7 5.3-10.6 12.7-10.6 1.4 0 3.6.7 5 .7 2.1 0 3.6.7 5 .7 14.7 0 16.8-15.1 22-25.5l-37.4-92.6c-2.1-5-3.6-8.4-3.6-11.3 0-8.2 6.4-14.1 14.8-14.1 9.5 0 13.3 7.5 15.6 15.6l24.7 73.5L638 65.5c3.9-10.5 4.2-21.2 16.8-21.2z") 127 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/_base/_fonts.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > FONTS 3 | //- ---------------------------------- 4 | 5 | // Source Sans Pro 6 | 7 | @font-face 8 | font-family: "Source Sans Pro" 9 | font-style: normal 10 | font-weight: 400 11 | src: url("../fonts/sourcesanspro-regular.eot") 12 | src: url("../fonts/sourcesanspro-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-regular.woff2") format("woff2"), url("../fonts/sourcesanspro-regular.woff") format("woff"), url("../fonts/sourcesanspro-regular.ttf") format("truetype"), url("../fonts/sourcesanspro-regular.svg#source_sans_proregular") format("svg") 13 | 14 | @font-face 15 | font-family: "Source Sans Pro" 16 | font-style: italic 17 | font-weight: 400 18 | src: url("../fonts/sourcesanspro-italic.eot") 19 | src: url("../fonts/sourcesanspro-italic.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-italic.woff2") format("woff2"), url("../fonts/sourcesanspro-italic.woff") format("woff"), url("../fonts/sourcesanspro-italic.ttf") format("truetype"), url("../fonts/sourcesanspro-italic.svg#source_sans_proitalic") format("svg") 20 | 21 | @font-face 22 | font-family: "Source Sans Pro" 23 | font-style: normal 24 | font-weight: 700 25 | src: url("../fonts/sourcesanspro-bold.eot") 26 | src: url("../fonts/sourcesanspro-bold.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-bold.woff2") format("woff2"), url("../fonts/sourcesanspro-bold.woff") format("woff"), url("../fonts/sourcesanspro-bold.ttf") format("truetype"), url("../fonts/sourcesanspro-bold.svg#source_sans_probold") format("svg") 27 | 28 | @font-face 29 | font-family: "Source Sans Pro" 30 | font-style: italic 31 | font-weight: 700 32 | src: url("../fonts/sourcesanspro-bolditalic.eot") 33 | src: url("../fonts/sourcesanspro-bolditalic.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-bolditalic.woff2") format("woff2"), url("../fonts/sourcesanspro-bolditalic.woff") format("woff"), url("../fonts/sourcesanspro-bolditalic.ttf") format("truetype"), url("../fonts/sourcesanspro-bolditalic.svg#source_sans_probold_italic") format("svg") 34 | 35 | 36 | // Source Code Pro 37 | 38 | @font-face 39 | font-family: "Source Code Pro" 40 | font-style: normal 41 | font-weight: 600 42 | src: url("../fonts/sourcecodepro-semibold.eot") 43 | src: url("../fonts/sourcecodepro-semibold.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcecodepro-semibold.woff") format("woff"), url("../fonts/sourcecodepro-semibold.ttf") format("truetype"), url("../fonts/sourcecodepro-semibold.svg#sourcecodepro_semibold") format("svg") 44 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/_base/_grid.sass: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 BASE > GRID 3 | //- ---------------------------------- 4 | 5 | //- Grid container 6 | 7 | .o-grid 8 | display: flex 9 | flex-wrap: wrap 10 | flex-direction: row 11 | align-items: stretch 12 | justify-content: space-between 13 | 14 | 15 | //- Grid column 16 | 17 | .o-grid__col 18 | $grid-gutter: 2rem 19 | 20 | margin-top: $grid-gutter 21 | overflow: hidden 22 | display: flex 23 | flex: 0 0 100% 24 | flex-direction: column 25 | flex-wrap: wrap 26 | 27 | @each $mode, $count in $grid 28 | &.o-grid__col--#{$mode} 29 | $percentage: calc(#{100% / $count} - #{$grid-gutter}) 30 | flex: 0 0 $percentage 31 | max-width: $percentage 32 | 33 | // Fix overflow issue in old browsers 34 | 35 | & > * 36 | flex-shrink: 1 37 | max-width: 100% 38 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/_base/_layout.sass: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 LAYOUT 3 | //- ---------------------------------- 4 | 5 | //- Layout 6 | 7 | body 8 | background: $page-bg 9 | padding: 3rem 10 | 11 | //- Objects 12 | 13 | .o-container 14 | font: #{$type-base}/#{1.375} $font-primary 15 | background: $color-back 16 | 17 | .o-slide 18 | background: $color-back 19 | font-size: 2.25rem 20 | 21 | &.o-slide--center 22 | text-align: center 23 | 24 | a 25 | border-bottom: 2px solid $color-theme 26 | 27 | .o-block, 28 | p 29 | margin-bottom: 3rem 30 | 31 | .o-icon 32 | vertical-align: middle 33 | margin-right: 0.75rem 34 | 35 | 36 | //- Utilities 37 | 38 | .u-color-theme 39 | color: $color-theme 40 | 41 | .u-color-subtle 42 | color: $color-subtle-dark 43 | 44 | .u-text-small.u-text-small 45 | font-size: 1.75rem 46 | 47 | .u-text-tiny.u-text-tiny 48 | font-size: 1rem 49 | 50 | .u-heading 51 | margin-bottom: 2rem 52 | 53 | @each $level, $size in (1: 6, 2: 4, 3: 3, 4: 2.8, 5: 2.5) 54 | .u-heading-#{$level} 55 | font: normal bold #{$size}rem/#{1.25} $font-primary 56 | 57 | 58 | //- Components 59 | 60 | 61 | //- List Container 62 | 63 | .c-list 64 | @each $type, $counter in (numbers: decimal, letters: upper-latin, roman: lower-roman) 65 | &.c-list--#{$type} 66 | counter-reset: li 67 | 68 | .c-list__item:before 69 | content: counter(li, #{$counter}) '.' 70 | 71 | 72 | //- List Item 73 | 74 | .c-list__item 75 | padding-left: 2rem 76 | margin-bottom: 0.5em 77 | margin-left: 1.25rem 78 | 79 | &:before 80 | color: $color-theme 81 | content: '\25CF' 82 | display: inline-block 83 | font-size: 1em 84 | font-weight: bold 85 | padding-right: 1.25rem 86 | margin-left: -3.75rem 87 | text-align: right 88 | width: 2.5rem 89 | counter-increment: li 90 | 91 | & > .o-block 92 | margin-top: 2rem 93 | 94 | 95 | //- Code block 96 | 97 | .c-code-block 98 | background: $color-front 99 | color: $color-back 100 | padding: 0.75em 0 101 | border-radius: 2px 102 | overflow: auto 103 | width: 100% 104 | max-width: 100% 105 | white-space: pre 106 | direction: ltr 107 | 108 | 109 | //- Code block content 110 | 111 | .c-code-block__content 112 | display: block 113 | font: normal 600 1.5rem/#{2} $font-code 114 | padding: 1em 2em 115 | 116 | 117 | //- Inline code 118 | 119 | *:not(.c-code-block) > code 120 | font: normal 600 0.8em/#{1} $font-code 121 | background: $color-subtle 122 | color: $color-front 123 | padding: 0.1em 0.5em 124 | margin: 0 125 | border-radius: 1px 126 | text-shadow: none 127 | 128 | 129 | //- Syntax Highlighting 130 | 131 | [class*="language-"] .token 132 | &.comment, &.prolog, &.doctype, &.cdata, &.punctuation 133 | color: map-get($syntax-highlighting, comment) 134 | 135 | &.property, &.tag, &.constant, &.symbol, &.deleted 136 | color: map-get($syntax-highlighting, tag) 137 | 138 | &.boolean, &.number 139 | color: map-get($syntax-highlighting, number) 140 | 141 | &.selector, &.attr-name, &.string, &.char, &.builtin, &.inserted 142 | color: map-get($syntax-highlighting, selector) 143 | 144 | @at-root .language-css .token.string, 145 | &.operator, &.entity, &.url, &.variable 146 | color: map-get($syntax-highlighting, operator) 147 | 148 | &.atrule, &.attr-value, &.function 149 | color: map-get($syntax-highlighting, function) 150 | 151 | &.regex, &.important 152 | color: map-get($syntax-highlighting, regex) 153 | 154 | &.keyword 155 | color: map-get($syntax-highlighting, keyword) 156 | 157 | &.italic 158 | font-style: italic 159 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/_base/_mixins.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > MIXINS 3 | //- ---------------------------------- 4 | 5 | //- Size shorthand 6 | 7 | @mixin size($width, $height: $width) 8 | width: $width 9 | height: $height 10 | 11 | 12 | //- Position shorthand 13 | 14 | @mixin position($position, $pos-y, $pos-x, $pos-y-value, $pos-x-value) 15 | position: $position 16 | #{$pos-y}: $pos-y-value 17 | #{$pos-x}: $pos-x-value 18 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/_base/_reset.sass: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 BASE > RESET 3 | //- ---------------------------------- 4 | 5 | //- adapted from "normalize.css" by Nicolas Gallagher & Jonathan Neal 6 | //- https://github.com/necolas/normalize.css 7 | 8 | * 9 | box-sizing: border-box 10 | padding: 0 11 | margin: 0 12 | border: 0 13 | outline: 0 14 | 15 | html 16 | font-family: sans-serif 17 | text-rendering: optimizeSpeed 18 | -ms-text-size-adjust: 100% 19 | -webkit-text-size-adjust: 100% 20 | -webkit-font-smoothing: antialiased 21 | -moz-osx-font-smoothing: grayscale 22 | 23 | body 24 | margin: 0 25 | 26 | article, aside, details, figcaption, figure, footer, header, main, menu, nav, 27 | section, summary, progress 28 | display: block 29 | 30 | a 31 | background-color: transparent 32 | color: inherit 33 | text-decoration: none 34 | 35 | &:active, 36 | &:hover 37 | outline: 0 38 | 39 | b, strong 40 | font-weight: inherit 41 | font-weight: bolder 42 | 43 | small 44 | font-size: 80% 45 | 46 | sub, sup 47 | position: relative 48 | font-size: 65% 49 | line-height: 0 50 | vertical-align: baseline 51 | 52 | sup 53 | top: -0.5em 54 | 55 | sub 56 | bottom: -0.15em 57 | 58 | img 59 | border: 0 60 | height: auto 61 | max-width: 100% 62 | 63 | svg 64 | color-interpolation-filters: sRGB 65 | fill: currentColor 66 | 67 | &:not(:root) 68 | overflow: hidden 69 | 70 | hr 71 | box-sizing: content-box 72 | overflow: visible 73 | height: 0 74 | 75 | pre 76 | overflow: auto 77 | 78 | code, pre 79 | font-family: monospace, monospace 80 | font-size: 1em 81 | 82 | table 83 | text-align: left 84 | width: 100% 85 | max-width: 100% 86 | border-collapse: collapse 87 | 88 | td, 89 | th 90 | vertical-align: top 91 | 92 | ul, 93 | ol 94 | list-style: none 95 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/_base/_theme.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > THEME TEMPLATE 3 | //- ---------------------------------- 4 | 5 | $type-base: 16px !default 6 | 7 | $color-back: #fff !default 8 | $color-front: #1e1935 !default 9 | $color-subtle: #ddd !default 10 | $color-subtle-dark: #949E9B !default 11 | $color-theme: #1e1935 !default 12 | 13 | $syntax-highlighting: ( comment: #999, tag: #81c44d, number: #8771ff, selector: #8771ff, operator: #f44d61, function: #2fbbab, keyword: #f44d61, regex: #ff9900 ) !default 14 | 15 | $font-primary: Helvetica, Arial, sans-serif !default 16 | $font-code: Consolas, Menlo, Monaco, Courier, monospace !default 17 | 18 | $page-bg: $color-theme !default 19 | 20 | $grid: ( quarter: 4, third: 3, half: 2, two-thirds: 1.5, three-quarters: 1.33 ) 21 | 22 | @import mixins 23 | @import reset 24 | @import fonts 25 | @import layout 26 | @import grid 27 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/_base/_utilities.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > UTILITIES 3 | //- ---------------------------------- 4 | 5 | .u-text-center 6 | text-align: center 7 | 8 | .u-color-theme 9 | color: $color-theme 10 | 11 | .u-text-small 12 | font-size: 1.75rem 13 | 14 | .u-heading 15 | margin-bottom: 2rem 16 | 17 | @each $level, $size in (1: 6, 2: 4, 3: 3, 4: 2.8, 5: 2.5) 18 | .u-heading-#{$level} 19 | font: normal bold #{$size}rem/#{1.25} $font-primary 20 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/reveal.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * reveal.js 3 | * http://lab.hakim.se/reveal-js 4 | * MIT licensed 5 | * 6 | * Copyright (C) 2016 Hakim El Hattab, http://hakim.se 7 | */ 8 | 9 | /********************************************* 10 | * GLOBAL STYLES 11 | *********************************************/ 12 | 13 | html, 14 | body { 15 | width: 100%; 16 | height: 100%; 17 | overflow: hidden; 18 | } 19 | 20 | body { 21 | position: relative; 22 | line-height: 1; 23 | 24 | background-color: #fff; 25 | color: #000; 26 | font: normal 16px Helvetica, arial, sans-serif 27 | } 28 | 29 | 30 | /********************************************* 31 | * VIEW FRAGMENTS 32 | *********************************************/ 33 | 34 | .reveal .slides section .fragment { 35 | opacity: 0; 36 | visibility: hidden; 37 | transition: all .2s ease; 38 | 39 | &.visible { 40 | opacity: 1; 41 | visibility: visible; 42 | } 43 | } 44 | 45 | .reveal .slides section .fragment.grow { 46 | opacity: 1; 47 | visibility: visible; 48 | 49 | &.visible { 50 | transform: scale( 1.3 ); 51 | } 52 | } 53 | 54 | .reveal .slides section .fragment.shrink { 55 | opacity: 1; 56 | visibility: visible; 57 | 58 | &.visible { 59 | transform: scale( 0.7 ); 60 | } 61 | } 62 | 63 | .reveal .slides section .fragment.zoom-in { 64 | transform: scale( 0.1 ); 65 | 66 | &.visible { 67 | transform: none; 68 | } 69 | } 70 | 71 | .reveal .slides section .fragment.fade-out { 72 | opacity: 1; 73 | visibility: visible; 74 | 75 | &.visible { 76 | opacity: 0; 77 | visibility: hidden; 78 | } 79 | } 80 | 81 | .reveal .slides section .fragment.semi-fade-out { 82 | opacity: 1; 83 | visibility: visible; 84 | 85 | &.visible { 86 | opacity: 0.5; 87 | visibility: visible; 88 | } 89 | } 90 | 91 | .reveal .slides section .fragment.strike { 92 | opacity: 1; 93 | visibility: visible; 94 | 95 | &.visible { 96 | text-decoration: line-through; 97 | } 98 | } 99 | 100 | .reveal .slides section .fragment.fade-up { 101 | transform: translate(0, 20%); 102 | 103 | &.visible { 104 | transform: translate(0, 0); 105 | } 106 | } 107 | 108 | .reveal .slides section .fragment.fade-down { 109 | transform: translate(0, -20%); 110 | 111 | &.visible { 112 | transform: translate(0, 0); 113 | } 114 | } 115 | 116 | .reveal .slides section .fragment.fade-right { 117 | transform: translate(-20%, 0); 118 | 119 | &.visible { 120 | transform: translate(0, 0); 121 | } 122 | } 123 | 124 | .reveal .slides section .fragment.fade-left { 125 | transform: translate(20%, 0); 126 | 127 | &.visible { 128 | transform: translate(0, 0); 129 | } 130 | } 131 | 132 | .reveal .slides section .fragment.current-visible { 133 | opacity: 0; 134 | visibility: hidden; 135 | 136 | &.current-fragment { 137 | opacity: 1; 138 | visibility: visible; 139 | } 140 | } 141 | 142 | .reveal .slides section .fragment.highlight-red, 143 | .reveal .slides section .fragment.highlight-current-red, 144 | .reveal .slides section .fragment.highlight-green, 145 | .reveal .slides section .fragment.highlight-current-green, 146 | .reveal .slides section .fragment.highlight-blue, 147 | .reveal .slides section .fragment.highlight-current-blue { 148 | opacity: 1; 149 | visibility: visible; 150 | } 151 | .reveal .slides section .fragment.highlight-red.visible { 152 | color: #ff2c2d 153 | } 154 | .reveal .slides section .fragment.highlight-green.visible { 155 | color: #17ff2e; 156 | } 157 | .reveal .slides section .fragment.highlight-blue.visible { 158 | color: #1b91ff; 159 | } 160 | 161 | .reveal .slides section .fragment.highlight-current-red.current-fragment { 162 | color: #ff2c2d 163 | } 164 | .reveal .slides section .fragment.highlight-current-green.current-fragment { 165 | color: #17ff2e; 166 | } 167 | .reveal .slides section .fragment.highlight-current-blue.current-fragment { 168 | color: #1b91ff; 169 | } 170 | 171 | 172 | /********************************************* 173 | * DEFAULT ELEMENT STYLES 174 | *********************************************/ 175 | 176 | /* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */ 177 | .reveal:after { 178 | content: ''; 179 | font-style: italic; 180 | } 181 | 182 | .reveal iframe { 183 | z-index: 1; 184 | } 185 | 186 | /** Prevents layering issues in certain browser/transition combinations */ 187 | .reveal a { 188 | position: relative; 189 | } 190 | 191 | .reveal .stretch { 192 | max-width: none; 193 | max-height: none; 194 | } 195 | 196 | .reveal pre.stretch code { 197 | height: 100%; 198 | max-height: 100%; 199 | box-sizing: border-box; 200 | } 201 | 202 | 203 | /********************************************* 204 | * CONTROLS 205 | *********************************************/ 206 | 207 | .reveal .controls { 208 | display: none; 209 | position: fixed; 210 | width: 110px; 211 | height: 110px; 212 | z-index: 30; 213 | right: 10px; 214 | bottom: 10px; 215 | 216 | -webkit-user-select: none; 217 | } 218 | 219 | .reveal .controls button { 220 | padding: 0; 221 | position: absolute; 222 | opacity: 0.05; 223 | width: 0; 224 | height: 0; 225 | background-color: transparent; 226 | border: 12px solid transparent; 227 | transform: scale(.9999); 228 | transition: all 0.2s ease; 229 | -webkit-appearance: none; 230 | -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 ); 231 | } 232 | 233 | .reveal .controls .enabled { 234 | opacity: 0.7; 235 | cursor: pointer; 236 | } 237 | 238 | .reveal .controls .enabled:active { 239 | margin-top: 1px; 240 | } 241 | 242 | .reveal .controls .navigate-left { 243 | top: 42px; 244 | 245 | border-right-width: 22px; 246 | border-right-color: #000; 247 | } 248 | .reveal .controls .navigate-left.fragmented { 249 | opacity: 0.3; 250 | } 251 | 252 | .reveal .controls .navigate-right { 253 | left: 74px; 254 | top: 42px; 255 | 256 | border-left-width: 22px; 257 | border-left-color: #000; 258 | } 259 | .reveal .controls .navigate-right.fragmented { 260 | opacity: 0.3; 261 | } 262 | 263 | .reveal .controls .navigate-up { 264 | left: 42px; 265 | 266 | border-bottom-width: 22px; 267 | border-bottom-color: #000; 268 | } 269 | .reveal .controls .navigate-up.fragmented { 270 | opacity: 0.3; 271 | } 272 | 273 | .reveal .controls .navigate-down { 274 | left: 42px; 275 | top: 74px; 276 | 277 | border-top-width: 22px; 278 | border-top-color: #000; 279 | } 280 | .reveal .controls .navigate-down.fragmented { 281 | opacity: 0.3; 282 | } 283 | 284 | 285 | /********************************************* 286 | * PROGRESS BAR 287 | *********************************************/ 288 | 289 | .reveal .progress { 290 | position: fixed; 291 | display: none; 292 | height: 3px; 293 | width: 100%; 294 | bottom: 0; 295 | left: 0; 296 | z-index: 10; 297 | 298 | background-color: rgba( 0, 0, 0, 0.2 ); 299 | } 300 | .reveal .progress:after { 301 | content: ''; 302 | display: block; 303 | position: absolute; 304 | height: 20px; 305 | width: 100%; 306 | top: -20px; 307 | } 308 | .reveal .progress span { 309 | display: block; 310 | height: 100%; 311 | width: 0px; 312 | 313 | background-color: #000; 314 | transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); 315 | } 316 | 317 | /********************************************* 318 | * SLIDE NUMBER 319 | *********************************************/ 320 | 321 | .reveal .slide-number { 322 | position: fixed; 323 | display: block; 324 | right: 8px; 325 | bottom: 8px; 326 | z-index: 31; 327 | font-family: Helvetica, sans-serif; 328 | font-size: 12px; 329 | line-height: 1; 330 | color: #fff; 331 | background-color: rgba( 0, 0, 0, 0.4 ); 332 | padding: 5px; 333 | } 334 | 335 | .reveal .slide-number-delimiter { 336 | margin: 0 3px; 337 | } 338 | 339 | /********************************************* 340 | * SLIDES 341 | *********************************************/ 342 | 343 | .reveal { 344 | position: relative; 345 | width: 100%; 346 | height: 100%; 347 | overflow: hidden; 348 | touch-action: none; 349 | } 350 | 351 | .reveal .slides { 352 | position: absolute; 353 | width: 100%; 354 | height: 100%; 355 | top: 0; 356 | right: 0; 357 | bottom: 0; 358 | left: 0; 359 | margin: auto; 360 | 361 | overflow: visible; 362 | z-index: 1; 363 | // text-align: center; 364 | perspective: 600px; 365 | perspective-origin: 50% 40%; 366 | } 367 | 368 | .reveal .slides>section { 369 | -ms-perspective: 600px; 370 | } 371 | 372 | .reveal .slides>section, 373 | .reveal .slides>section>section { 374 | display: none; 375 | position: absolute; 376 | width: 100%; 377 | padding: 20px 0px; 378 | 379 | z-index: 10; 380 | transform-style: preserve-3d; 381 | transition: transform-origin 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), 382 | transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), 383 | visibility 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), 384 | opacity 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); 385 | } 386 | 387 | /* Global transition speed settings */ 388 | .reveal[data-transition-speed="fast"] .slides section { 389 | transition-duration: 400ms; 390 | } 391 | .reveal[data-transition-speed="slow"] .slides section { 392 | transition-duration: 1200ms; 393 | } 394 | 395 | /* Slide-specific transition speed overrides */ 396 | .reveal .slides section[data-transition-speed="fast"] { 397 | transition-duration: 400ms; 398 | } 399 | .reveal .slides section[data-transition-speed="slow"] { 400 | transition-duration: 1200ms; 401 | } 402 | 403 | .reveal .slides>section.stack { 404 | padding-top: 0; 405 | padding-bottom: 0; 406 | } 407 | 408 | .reveal .slides>section.present, 409 | .reveal .slides>section>section.present { 410 | display: block; 411 | z-index: 11; 412 | opacity: 1; 413 | } 414 | 415 | .reveal.center, 416 | .reveal.center .slides, 417 | .reveal.center .slides section { 418 | min-height: 0 !important; 419 | } 420 | 421 | /* Don't allow interaction with invisible slides */ 422 | .reveal .slides>section.future, 423 | .reveal .slides>section>section.future, 424 | .reveal .slides>section.past, 425 | .reveal .slides>section>section.past { 426 | pointer-events: none; 427 | } 428 | 429 | .reveal.overview .slides>section, 430 | .reveal.overview .slides>section>section { 431 | pointer-events: auto; 432 | } 433 | 434 | .reveal .slides>section.past, 435 | .reveal .slides>section.future, 436 | .reveal .slides>section>section.past, 437 | .reveal .slides>section>section.future { 438 | opacity: 0; 439 | } 440 | 441 | 442 | /********************************************* 443 | * Mixins for readability of transitions 444 | *********************************************/ 445 | 446 | @mixin transition-global($style) { 447 | .reveal .slides section[data-transition=#{$style}], 448 | .reveal.#{$style} .slides section:not([data-transition]) { 449 | @content; 450 | } 451 | } 452 | @mixin transition-horizontal-past($style) { 453 | .reveal .slides>section[data-transition=#{$style}].past, 454 | .reveal .slides>section[data-transition~=#{$style}-out].past, 455 | .reveal.#{$style} .slides>section:not([data-transition]).past { 456 | @content; 457 | } 458 | } 459 | @mixin transition-horizontal-future($style) { 460 | .reveal .slides>section[data-transition=#{$style}].future, 461 | .reveal .slides>section[data-transition~=#{$style}-in].future, 462 | .reveal.#{$style} .slides>section:not([data-transition]).future { 463 | @content; 464 | } 465 | } 466 | 467 | @mixin transition-vertical-past($style) { 468 | .reveal .slides>section>section[data-transition=#{$style}].past, 469 | .reveal .slides>section>section[data-transition~=#{$style}-out].past, 470 | .reveal.#{$style} .slides>section>section:not([data-transition]).past { 471 | @content; 472 | } 473 | } 474 | @mixin transition-vertical-future($style) { 475 | .reveal .slides>section>section[data-transition=#{$style}].future, 476 | .reveal .slides>section>section[data-transition~=#{$style}-in].future, 477 | .reveal.#{$style} .slides>section>section:not([data-transition]).future { 478 | @content; 479 | } 480 | } 481 | 482 | /********************************************* 483 | * SLIDE TRANSITION 484 | * Aliased 'linear' for backwards compatibility 485 | *********************************************/ 486 | 487 | @each $stylename in slide, linear { 488 | .reveal.#{$stylename} section { 489 | backface-visibility: hidden; 490 | } 491 | @include transition-horizontal-past(#{$stylename}) { 492 | transform: translate(-150%, 0); 493 | } 494 | @include transition-horizontal-future(#{$stylename}) { 495 | transform: translate(150%, 0); 496 | } 497 | @include transition-vertical-past(#{$stylename}) { 498 | transform: translate(0, -150%); 499 | } 500 | @include transition-vertical-future(#{$stylename}) { 501 | transform: translate(0, 150%); 502 | } 503 | } 504 | 505 | /********************************************* 506 | * CONVEX TRANSITION 507 | * Aliased 'default' for backwards compatibility 508 | *********************************************/ 509 | 510 | @each $stylename in default, convex { 511 | @include transition-horizontal-past(#{$stylename}) { 512 | transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); 513 | } 514 | @include transition-horizontal-future(#{$stylename}) { 515 | transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); 516 | } 517 | @include transition-vertical-past(#{$stylename}) { 518 | transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); 519 | } 520 | @include transition-vertical-future(#{$stylename}) { 521 | transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); 522 | } 523 | } 524 | 525 | /********************************************* 526 | * CONCAVE TRANSITION 527 | *********************************************/ 528 | 529 | @include transition-horizontal-past(concave) { 530 | transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); 531 | } 532 | @include transition-horizontal-future(concave) { 533 | transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); 534 | } 535 | @include transition-vertical-past(concave) { 536 | transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); 537 | } 538 | @include transition-vertical-future(concave) { 539 | transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); 540 | } 541 | 542 | 543 | /********************************************* 544 | * ZOOM TRANSITION 545 | *********************************************/ 546 | 547 | @include transition-global(zoom) { 548 | transition-timing-function: ease; 549 | } 550 | @include transition-horizontal-past(zoom) { 551 | visibility: hidden; 552 | transform: scale(16); 553 | } 554 | @include transition-horizontal-future(zoom) { 555 | visibility: hidden; 556 | transform: scale(0.2); 557 | } 558 | @include transition-vertical-past(zoom) { 559 | transform: translate(0, -150%); 560 | } 561 | @include transition-vertical-future(zoom) { 562 | transform: translate(0, 150%); 563 | } 564 | 565 | 566 | /********************************************* 567 | * CUBE TRANSITION 568 | *********************************************/ 569 | 570 | .reveal.cube .slides { 571 | perspective: 1300px; 572 | } 573 | 574 | .reveal.cube .slides section { 575 | padding: 30px; 576 | min-height: 700px; 577 | backface-visibility: hidden; 578 | box-sizing: border-box; 579 | } 580 | .reveal.center.cube .slides section { 581 | min-height: 0; 582 | } 583 | .reveal.cube .slides section:not(.stack):before { 584 | content: ''; 585 | position: absolute; 586 | display: block; 587 | width: 100%; 588 | height: 100%; 589 | left: 0; 590 | top: 0; 591 | background: rgba(0,0,0,0.1); 592 | border-radius: 4px; 593 | transform: translateZ( -20px ); 594 | } 595 | .reveal.cube .slides section:not(.stack):after { 596 | content: ''; 597 | position: absolute; 598 | display: block; 599 | width: 90%; 600 | height: 30px; 601 | left: 5%; 602 | bottom: 0; 603 | background: none; 604 | z-index: 1; 605 | 606 | border-radius: 4px; 607 | box-shadow: 0px 95px 25px rgba(0,0,0,0.2); 608 | transform: translateZ(-90px) rotateX( 65deg ); 609 | } 610 | 611 | .reveal.cube .slides>section.stack { 612 | padding: 0; 613 | background: none; 614 | } 615 | 616 | .reveal.cube .slides>section.past { 617 | transform-origin: 100% 0%; 618 | transform: translate3d(-100%, 0, 0) rotateY(-90deg); 619 | } 620 | 621 | .reveal.cube .slides>section.future { 622 | transform-origin: 0% 0%; 623 | transform: translate3d(100%, 0, 0) rotateY(90deg); 624 | } 625 | 626 | .reveal.cube .slides>section>section.past { 627 | transform-origin: 0% 100%; 628 | transform: translate3d(0, -100%, 0) rotateX(90deg); 629 | } 630 | 631 | .reveal.cube .slides>section>section.future { 632 | transform-origin: 0% 0%; 633 | transform: translate3d(0, 100%, 0) rotateX(-90deg); 634 | } 635 | 636 | 637 | /********************************************* 638 | * PAGE TRANSITION 639 | *********************************************/ 640 | 641 | .reveal.page .slides { 642 | perspective-origin: 0% 50%; 643 | perspective: 3000px; 644 | } 645 | 646 | .reveal.page .slides section { 647 | padding: 30px; 648 | min-height: 700px; 649 | box-sizing: border-box; 650 | } 651 | .reveal.page .slides section.past { 652 | z-index: 12; 653 | } 654 | .reveal.page .slides section:not(.stack):before { 655 | content: ''; 656 | position: absolute; 657 | display: block; 658 | width: 100%; 659 | height: 100%; 660 | left: 0; 661 | top: 0; 662 | background: rgba(0,0,0,0.1); 663 | transform: translateZ( -20px ); 664 | } 665 | .reveal.page .slides section:not(.stack):after { 666 | content: ''; 667 | position: absolute; 668 | display: block; 669 | width: 90%; 670 | height: 30px; 671 | left: 5%; 672 | bottom: 0; 673 | background: none; 674 | z-index: 1; 675 | 676 | border-radius: 4px; 677 | box-shadow: 0px 95px 25px rgba(0,0,0,0.2); 678 | 679 | -webkit-transform: translateZ(-90px) rotateX( 65deg ); 680 | } 681 | 682 | .reveal.page .slides>section.stack { 683 | padding: 0; 684 | background: none; 685 | } 686 | 687 | .reveal.page .slides>section.past { 688 | transform-origin: 0% 0%; 689 | transform: translate3d(-40%, 0, 0) rotateY(-80deg); 690 | } 691 | 692 | .reveal.page .slides>section.future { 693 | transform-origin: 100% 0%; 694 | transform: translate3d(0, 0, 0); 695 | } 696 | 697 | .reveal.page .slides>section>section.past { 698 | transform-origin: 0% 0%; 699 | transform: translate3d(0, -40%, 0) rotateX(80deg); 700 | } 701 | 702 | .reveal.page .slides>section>section.future { 703 | transform-origin: 0% 100%; 704 | transform: translate3d(0, 0, 0); 705 | } 706 | 707 | 708 | /********************************************* 709 | * FADE TRANSITION 710 | *********************************************/ 711 | 712 | .reveal .slides section[data-transition=fade], 713 | .reveal.fade .slides section:not([data-transition]), 714 | .reveal.fade .slides>section>section:not([data-transition]) { 715 | transform: none; 716 | transition: opacity 0.5s; 717 | } 718 | 719 | 720 | .reveal.fade.overview .slides section, 721 | .reveal.fade.overview .slides>section>section { 722 | transition: none; 723 | } 724 | 725 | 726 | /********************************************* 727 | * NO TRANSITION 728 | *********************************************/ 729 | 730 | @include transition-global(none) { 731 | transform: none; 732 | transition: none; 733 | } 734 | 735 | 736 | /********************************************* 737 | * PAUSED MODE 738 | *********************************************/ 739 | 740 | .reveal .pause-overlay { 741 | position: absolute; 742 | top: 0; 743 | left: 0; 744 | width: 100%; 745 | height: 100%; 746 | background: black; 747 | visibility: hidden; 748 | opacity: 0; 749 | z-index: 100; 750 | transition: all 1s ease; 751 | } 752 | .reveal.paused .pause-overlay { 753 | visibility: visible; 754 | opacity: 1; 755 | } 756 | 757 | 758 | /********************************************* 759 | * FALLBACK 760 | *********************************************/ 761 | 762 | .no-transforms { 763 | overflow-y: auto; 764 | } 765 | 766 | .no-transforms .reveal .slides { 767 | position: relative; 768 | width: 80%; 769 | height: auto !important; 770 | top: 0; 771 | left: 50%; 772 | margin: 0; 773 | text-align: center; 774 | } 775 | 776 | .no-transforms .reveal .controls, 777 | .no-transforms .reveal .progress { 778 | display: none !important; 779 | } 780 | 781 | .no-transforms .reveal .slides section { 782 | display: block !important; 783 | opacity: 1 !important; 784 | position: relative !important; 785 | height: auto; 786 | min-height: 0; 787 | top: 0; 788 | left: -50%; 789 | margin: 70px 0; 790 | transform: none; 791 | } 792 | 793 | .no-transforms .reveal .slides section section { 794 | left: 0; 795 | } 796 | 797 | .reveal .no-transition, 798 | .reveal .no-transition * { 799 | transition: none !important; 800 | } 801 | 802 | 803 | /********************************************* 804 | * PER-SLIDE BACKGROUNDS 805 | *********************************************/ 806 | 807 | .reveal .backgrounds { 808 | position: absolute; 809 | width: 100%; 810 | height: 100%; 811 | top: 0; 812 | left: 0; 813 | perspective: 600px; 814 | } 815 | .reveal .slide-background { 816 | display: none; 817 | position: absolute; 818 | width: 100%; 819 | height: 100%; 820 | opacity: 0; 821 | visibility: hidden; 822 | 823 | background-color: rgba( 0, 0, 0, 0 ); 824 | background-position: 50% 50%; 825 | background-repeat: no-repeat; 826 | background-size: cover; 827 | 828 | transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); 829 | } 830 | 831 | .reveal .slide-background.stack { 832 | display: block; 833 | } 834 | 835 | .reveal .slide-background.present { 836 | opacity: 1; 837 | visibility: visible; 838 | } 839 | 840 | .print-pdf .reveal .slide-background { 841 | opacity: 1 !important; 842 | visibility: visible !important; 843 | } 844 | 845 | /* Video backgrounds */ 846 | .reveal .slide-background video { 847 | position: absolute; 848 | width: 100%; 849 | height: 100%; 850 | max-width: none; 851 | max-height: none; 852 | top: 0; 853 | left: 0; 854 | } 855 | 856 | /* Immediate transition style */ 857 | .reveal[data-background-transition=none]>.backgrounds .slide-background, 858 | .reveal>.backgrounds .slide-background[data-background-transition=none] { 859 | transition: none; 860 | } 861 | 862 | /* Slide */ 863 | .reveal[data-background-transition=slide]>.backgrounds .slide-background, 864 | .reveal>.backgrounds .slide-background[data-background-transition=slide] { 865 | opacity: 1; 866 | backface-visibility: hidden; 867 | } 868 | .reveal[data-background-transition=slide]>.backgrounds .slide-background.past, 869 | .reveal>.backgrounds .slide-background.past[data-background-transition=slide] { 870 | transform: translate(-100%, 0); 871 | } 872 | .reveal[data-background-transition=slide]>.backgrounds .slide-background.future, 873 | .reveal>.backgrounds .slide-background.future[data-background-transition=slide] { 874 | transform: translate(100%, 0); 875 | } 876 | 877 | .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past, 878 | .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide] { 879 | transform: translate(0, -100%); 880 | } 881 | .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future, 882 | .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide] { 883 | transform: translate(0, 100%); 884 | } 885 | 886 | 887 | /* Convex */ 888 | .reveal[data-background-transition=convex]>.backgrounds .slide-background.past, 889 | .reveal>.backgrounds .slide-background.past[data-background-transition=convex] { 890 | opacity: 0; 891 | transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); 892 | } 893 | .reveal[data-background-transition=convex]>.backgrounds .slide-background.future, 894 | .reveal>.backgrounds .slide-background.future[data-background-transition=convex] { 895 | opacity: 0; 896 | transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); 897 | } 898 | 899 | .reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past, 900 | .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex] { 901 | opacity: 0; 902 | transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); 903 | } 904 | .reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future, 905 | .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex] { 906 | opacity: 0; 907 | transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); 908 | } 909 | 910 | 911 | /* Concave */ 912 | .reveal[data-background-transition=concave]>.backgrounds .slide-background.past, 913 | .reveal>.backgrounds .slide-background.past[data-background-transition=concave] { 914 | opacity: 0; 915 | transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); 916 | } 917 | .reveal[data-background-transition=concave]>.backgrounds .slide-background.future, 918 | .reveal>.backgrounds .slide-background.future[data-background-transition=concave] { 919 | opacity: 0; 920 | transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); 921 | } 922 | 923 | .reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past, 924 | .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave] { 925 | opacity: 0; 926 | transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); 927 | } 928 | .reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future, 929 | .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave] { 930 | opacity: 0; 931 | transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); 932 | } 933 | 934 | /* Zoom */ 935 | .reveal[data-background-transition=zoom]>.backgrounds .slide-background, 936 | .reveal>.backgrounds .slide-background[data-background-transition=zoom] { 937 | transition-timing-function: ease; 938 | } 939 | 940 | .reveal[data-background-transition=zoom]>.backgrounds .slide-background.past, 941 | .reveal>.backgrounds .slide-background.past[data-background-transition=zoom] { 942 | opacity: 0; 943 | visibility: hidden; 944 | transform: scale(16); 945 | } 946 | .reveal[data-background-transition=zoom]>.backgrounds .slide-background.future, 947 | .reveal>.backgrounds .slide-background.future[data-background-transition=zoom] { 948 | opacity: 0; 949 | visibility: hidden; 950 | transform: scale(0.2); 951 | } 952 | 953 | .reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past, 954 | .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom] { 955 | opacity: 0; 956 | visibility: hidden; 957 | transform: scale(16); 958 | } 959 | .reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future, 960 | .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom] { 961 | opacity: 0; 962 | visibility: hidden; 963 | transform: scale(0.2); 964 | } 965 | 966 | 967 | /* Global transition speed settings */ 968 | .reveal[data-transition-speed="fast"]>.backgrounds .slide-background { 969 | transition-duration: 400ms; 970 | } 971 | .reveal[data-transition-speed="slow"]>.backgrounds .slide-background { 972 | transition-duration: 1200ms; 973 | } 974 | 975 | 976 | /********************************************* 977 | * OVERVIEW 978 | *********************************************/ 979 | 980 | .reveal.overview { 981 | perspective-origin: 50% 50%; 982 | perspective: 700px; 983 | 984 | .slides section { 985 | height: 100%; 986 | top: 0 !important; 987 | opacity: 1 !important; 988 | overflow: hidden; 989 | visibility: visible !important; 990 | cursor: pointer; 991 | box-sizing: border-box; 992 | } 993 | .slides section:hover, 994 | .slides section.present { 995 | outline: 10px solid rgba(150,150,150,0.4); 996 | outline-offset: 10px; 997 | } 998 | .slides section .fragment { 999 | opacity: 1; 1000 | transition: none; 1001 | } 1002 | .slides section:after, 1003 | .slides section:before { 1004 | display: none !important; 1005 | } 1006 | .slides>section.stack { 1007 | padding: 0; 1008 | top: 0 !important; 1009 | background: none; 1010 | outline: none; 1011 | overflow: visible; 1012 | } 1013 | 1014 | .backgrounds { 1015 | perspective: inherit; 1016 | } 1017 | 1018 | .backgrounds .slide-background { 1019 | opacity: 1; 1020 | visibility: visible; 1021 | 1022 | // This can't be applied to the slide itself in Safari 1023 | outline: 10px solid rgba(150,150,150,0.1); 1024 | outline-offset: 10px; 1025 | } 1026 | } 1027 | 1028 | // Disable transitions transitions while we're activating 1029 | // or deactivating the overview mode. 1030 | .reveal.overview .slides section, 1031 | .reveal.overview-deactivating .slides section { 1032 | transition: none; 1033 | } 1034 | 1035 | .reveal.overview .backgrounds .slide-background, 1036 | .reveal.overview-deactivating .backgrounds .slide-background { 1037 | transition: none; 1038 | } 1039 | 1040 | .reveal.overview-animated .slides { 1041 | transition: transform 0.4s ease; 1042 | } 1043 | 1044 | 1045 | /********************************************* 1046 | * RTL SUPPORT 1047 | *********************************************/ 1048 | 1049 | .reveal.rtl .slides, 1050 | .reveal.rtl .slides h1, 1051 | .reveal.rtl .slides h2, 1052 | .reveal.rtl .slides h3, 1053 | .reveal.rtl .slides h4, 1054 | .reveal.rtl .slides h5, 1055 | .reveal.rtl .slides h6 { 1056 | direction: rtl; 1057 | font-family: sans-serif; 1058 | } 1059 | 1060 | .reveal.rtl pre, 1061 | .reveal.rtl code { 1062 | direction: ltr; 1063 | } 1064 | 1065 | .reveal.rtl ol, 1066 | .reveal.rtl ul { 1067 | text-align: right; 1068 | } 1069 | 1070 | .reveal.rtl .progress span { 1071 | float: right 1072 | } 1073 | 1074 | /********************************************* 1075 | * PARALLAX BACKGROUND 1076 | *********************************************/ 1077 | 1078 | .reveal.has-parallax-background .backgrounds { 1079 | transition: all 0.8s ease; 1080 | } 1081 | 1082 | /* Global transition speed settings */ 1083 | .reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds { 1084 | transition-duration: 400ms; 1085 | } 1086 | .reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds { 1087 | transition-duration: 1200ms; 1088 | } 1089 | 1090 | 1091 | /********************************************* 1092 | * LINK PREVIEW OVERLAY 1093 | *********************************************/ 1094 | 1095 | .reveal .overlay { 1096 | position: absolute; 1097 | top: 0; 1098 | left: 0; 1099 | width: 100%; 1100 | height: 100%; 1101 | z-index: 1000; 1102 | background: rgba( 0, 0, 0, 0.9 ); 1103 | opacity: 0; 1104 | visibility: hidden; 1105 | transition: all 0.3s ease; 1106 | } 1107 | .reveal .overlay.visible { 1108 | opacity: 1; 1109 | visibility: visible; 1110 | } 1111 | 1112 | .reveal .overlay .spinner { 1113 | position: absolute; 1114 | display: block; 1115 | top: 50%; 1116 | left: 50%; 1117 | width: 32px; 1118 | height: 32px; 1119 | margin: -16px 0 0 -16px; 1120 | z-index: 10; 1121 | background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D); 1122 | 1123 | visibility: visible; 1124 | opacity: 0.6; 1125 | transition: all 0.3s ease; 1126 | } 1127 | 1128 | .reveal .overlay header { 1129 | position: absolute; 1130 | left: 0; 1131 | top: 0; 1132 | width: 100%; 1133 | height: 40px; 1134 | z-index: 2; 1135 | border-bottom: 1px solid #222; 1136 | } 1137 | .reveal .overlay header a { 1138 | display: inline-block; 1139 | width: 40px; 1140 | height: 40px; 1141 | padding: 0 10px; 1142 | float: right; 1143 | opacity: 0.6; 1144 | 1145 | box-sizing: border-box; 1146 | } 1147 | .reveal .overlay header a:hover { 1148 | opacity: 1; 1149 | } 1150 | .reveal .overlay header a .icon { 1151 | display: inline-block; 1152 | width: 20px; 1153 | height: 20px; 1154 | 1155 | background-position: 50% 50%; 1156 | background-size: 100%; 1157 | background-repeat: no-repeat; 1158 | } 1159 | .reveal .overlay header a.close .icon { 1160 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); 1161 | } 1162 | .reveal .overlay header a.external .icon { 1163 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); 1164 | } 1165 | 1166 | .reveal .overlay .viewport { 1167 | position: absolute; 1168 | display: flex; 1169 | top: 40px; 1170 | right: 0; 1171 | bottom: 0; 1172 | left: 0; 1173 | } 1174 | 1175 | .reveal .overlay.overlay-preview .viewport iframe { 1176 | width: 100%; 1177 | height: 100%; 1178 | max-width: 100%; 1179 | max-height: 100%; 1180 | border: 0; 1181 | 1182 | opacity: 0; 1183 | visibility: hidden; 1184 | transition: all 0.3s ease; 1185 | } 1186 | 1187 | .reveal .overlay.overlay-preview.loaded .viewport iframe { 1188 | opacity: 1; 1189 | visibility: visible; 1190 | } 1191 | 1192 | .reveal .overlay.overlay-preview.loaded .spinner { 1193 | opacity: 0; 1194 | visibility: hidden; 1195 | transform: scale(0.2); 1196 | } 1197 | 1198 | .reveal .overlay.overlay-help .viewport { 1199 | overflow: auto; 1200 | color: #fff; 1201 | } 1202 | 1203 | .reveal .overlay.overlay-help .viewport .viewport-inner { 1204 | width: 600px; 1205 | margin: auto; 1206 | padding: 20px 20px 80px 20px; 1207 | text-align: center; 1208 | letter-spacing: normal; 1209 | } 1210 | 1211 | .reveal .overlay.overlay-help .viewport .viewport-inner .title { 1212 | font-size: 20px; 1213 | } 1214 | 1215 | .reveal .overlay.overlay-help .viewport .viewport-inner table { 1216 | border: 1px solid #fff; 1217 | border-collapse: collapse; 1218 | font-size: 16px; 1219 | } 1220 | 1221 | .reveal .overlay.overlay-help .viewport .viewport-inner table th, 1222 | .reveal .overlay.overlay-help .viewport .viewport-inner table td { 1223 | width: 200px; 1224 | padding: 14px; 1225 | border: 1px solid #fff; 1226 | vertical-align: middle; 1227 | } 1228 | 1229 | .reveal .overlay.overlay-help .viewport .viewport-inner table th { 1230 | padding-top: 20px; 1231 | padding-bottom: 20px; 1232 | } 1233 | 1234 | 1235 | 1236 | /********************************************* 1237 | * PLAYBACK COMPONENT 1238 | *********************************************/ 1239 | 1240 | .reveal .playback { 1241 | position: fixed; 1242 | left: 15px; 1243 | bottom: 20px; 1244 | z-index: 30; 1245 | cursor: pointer; 1246 | transition: all 400ms ease; 1247 | } 1248 | 1249 | .reveal.overview .playback { 1250 | opacity: 0; 1251 | visibility: hidden; 1252 | } 1253 | 1254 | 1255 | /********************************************* 1256 | * ROLLING LINKS 1257 | *********************************************/ 1258 | 1259 | .reveal .roll { 1260 | display: inline-block; 1261 | line-height: 1.2; 1262 | overflow: hidden; 1263 | 1264 | vertical-align: top; 1265 | perspective: 400px; 1266 | perspective-origin: 50% 50%; 1267 | } 1268 | .reveal .roll:hover { 1269 | background: none; 1270 | text-shadow: none; 1271 | } 1272 | .reveal .roll span { 1273 | display: block; 1274 | position: relative; 1275 | padding: 0 2px; 1276 | 1277 | pointer-events: none; 1278 | transition: all 400ms ease; 1279 | transform-origin: 50% 0%; 1280 | transform-style: preserve-3d; 1281 | backface-visibility: hidden; 1282 | } 1283 | .reveal .roll:hover span { 1284 | background: rgba(0,0,0,0.5); 1285 | transform: translate3d( 0px, 0px, -45px ) rotateX( 90deg ); 1286 | } 1287 | .reveal .roll span:after { 1288 | content: attr(data-title); 1289 | 1290 | display: block; 1291 | position: absolute; 1292 | left: 0; 1293 | top: 0; 1294 | padding: 0 2px; 1295 | backface-visibility: hidden; 1296 | transform-origin: 50% 0%; 1297 | transform: translate3d( 0px, 110%, 0px ) rotateX( -90deg ); 1298 | } 1299 | 1300 | 1301 | /********************************************* 1302 | * SPEAKER NOTES 1303 | *********************************************/ 1304 | 1305 | // Hide on-page notes 1306 | .reveal aside.notes { 1307 | display: none; 1308 | } 1309 | 1310 | // An interface element that can optionally be used to show the 1311 | // speaker notes to all viewers, on top of the presentation 1312 | .reveal .speaker-notes { 1313 | display: none; 1314 | position: absolute; 1315 | width: 70%; 1316 | max-height: 15%; 1317 | left: 15%; 1318 | bottom: 26px; 1319 | padding: 10px; 1320 | z-index: 1; 1321 | font-size: 18px; 1322 | line-height: 1.4; 1323 | color: #fff; 1324 | background-color: rgba(0,0,0,0.5); 1325 | overflow: auto; 1326 | box-sizing: border-box; 1327 | text-align: left; 1328 | font-family: Helvetica, sans-serif; 1329 | -webkit-overflow-scrolling: touch; 1330 | } 1331 | 1332 | .reveal .speaker-notes.visible:not(:empty) { 1333 | display: block; 1334 | } 1335 | 1336 | @media screen and (max-width: 1024px) { 1337 | .reveal .speaker-notes { 1338 | font-size: 14px; 1339 | } 1340 | } 1341 | 1342 | @media screen and (max-width: 600px) { 1343 | .reveal .speaker-notes { 1344 | width: 90%; 1345 | left: 5%; 1346 | } 1347 | } 1348 | 1349 | 1350 | /********************************************* 1351 | * ZOOM PLUGIN 1352 | *********************************************/ 1353 | 1354 | .zoomed .reveal *, 1355 | .zoomed .reveal *:before, 1356 | .zoomed .reveal *:after { 1357 | backface-visibility: visible !important; 1358 | } 1359 | 1360 | .zoomed .reveal .progress, 1361 | .zoomed .reveal .controls { 1362 | opacity: 0; 1363 | } 1364 | 1365 | .zoomed .reveal .roll span { 1366 | background: none; 1367 | } 1368 | 1369 | .zoomed .reveal .roll span:after { 1370 | visibility: hidden; 1371 | } 1372 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/theme-explosion.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 EXPLOSION THEME 3 | //- ---------------------------------- 4 | 5 | $color-back: #fff 6 | $color-front: #1e1935 7 | $color-subtle: #ddd 8 | $color-subtle-dark: #949E9B 9 | $color-theme: #1e1935 10 | 11 | $font-primary: "Sailec", Helvetica, Arial, sans-serif 12 | $font-code: "Input Mono Compressed", Consolas, "Andale Mono", Menlo, Monaco, Courier, monospace 13 | 14 | @import _base/theme 15 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/css/theme-spacy.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 SPACY THEME 3 | //- ---------------------------------- 4 | 5 | $color-back: #fff 6 | $color-front: #1a1e23 7 | $color-subtle: #ddd 8 | $color-subtle-dark: #949E9B 9 | $color-theme: #09a3d5 10 | 11 | $page-bg: $color-theme url("/assets/img/pattern_blue.jpg") top left repeat 12 | 13 | $font-primary: "Source Sans Pro", Tahoma, Geneva, sans-serif 14 | $font-code: 'Source Code Pro', Consolas, 'Andale Mono', Menlo, Monaco, Courier, monospace 15 | 16 | @import _base/theme 17 | 18 | 19 | //- Theme-specific overrides 20 | 21 | .navigate-up, 22 | .navigate-down 23 | display: none 24 | 25 | .intro, 26 | .outro 27 | .o-container, 28 | .o-slide 29 | background: transparent 30 | text-align: center 31 | font-weight: bold 32 | color: $color-back 33 | text-shadow: 5px 5px 0 darken($color-theme, 5) 34 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcecodepro-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcecodepro-semibold.eot -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcecodepro-semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcecodepro-semibold.ttf -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcecodepro-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcecodepro-semibold.woff -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.eot -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.ttf -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.woff -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bold.woff2 -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.eot -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.ttf -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.woff -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-bolditalic.woff2 -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.eot -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.ttf -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.woff -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-italic.woff2 -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.eot -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.ttf -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.woff -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/fonts/sourcesanspro-regular.woff2 -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/img/icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mail 5 | 6 | 7 | 8 | github 9 | 10 | 11 | 12 | twitter 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/img/pattern_blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/assets/img/pattern_blue.jpg -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/assets/js/prism.js: -------------------------------------------------------------------------------- 1 | /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+bash+c+csharp+cpp+css-extras+git+jade+java+json+latex+makefile+markdown+python+rest+sass+scss+sql+wiki+yaml */ 2 | var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(m instanceof a)){u.lastIndex=0;var y=u.exec(m),v=1;if(!y&&h&&p!=r.length-1){var b=r[p+1].matchedStr||r[p+1],k=m+b;if(p=m.length)continue;var _=y.index+y[0].length,P=m.length+b.length;if(v=3,P>=_){if(r[p+1].greedy)continue;v=2,k=k.slice(0,P)}m=k}if(y){g&&(f=y[1].length);var w=y.index+f,y=y[0].slice(f),_=w+y.length,S=m.slice(0,w),O=m.slice(_),j=[p,v];S&&j.push(S);var A=new a(i,c?n.tokenize(y,c):y,d,y,h);j.push(A),O&&j.push(O),Array.prototype.splice.apply(r,j)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,l=0;r=a[l++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.matchedStr=a||null,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var l={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==l.type&&(l.attributes.spellcheck="true"),e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o="";for(var s in l.attributes)o+=(o?" ":"")+s+'="'+(l.attributes[s]||"")+'"';return"<"+l.tag+' class="'+l.classes.join(" ")+'" '+o+">"+l.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,l=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),l&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",n.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); 3 | Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; 4 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); 5 | Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; 6 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript; 7 | !function(e){var t={variable:[{pattern:/\$?\(\([\w\W]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\w\W]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,inside:t},{pattern:/(["'])(?:\\\\|\\?[^\\])*?\1/g,inside:t}],variable:t.variable,"function":{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/,lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},"boolean":{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var a=t.variable[1].inside;a["function"]=e.languages.bash["function"],a.keyword=e.languages.bash.keyword,a.boolean=e.languages.bash.boolean,a.operator=e.languages.bash.operator,a.punctuation=e.languages.bash.punctuation}(Prism); 8 | Prism.languages.c=Prism.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/}),delete Prism.languages.c["class-name"],delete Prism.languages.c["boolean"]; 9 | Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}}); 10 | Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}); 11 | Prism.languages.css.selector={pattern:/[^\{\}\s][^\{\}]*(?=\s*\{)/,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+(?:\(.*\))?/,"class":/\.[-:\.\w]+/,id:/#[-:\.\w]+/}},Prism.languages.insertBefore("css","function",{hexcode:/#[\da-f]{3,6}/i,entity:/\\[\da-f]{1,8}/i,number:/[\d%\.]+/}); 12 | Prism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(\\?.)*?\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s(--|-)\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m}; 13 | !function(e){e.languages.jade={comment:{pattern:/(^([\t ]*))\/\/.*((?:\r?\n|\r)\2[\t ]+.+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{rest:e.languages.javascript}},filter:{pattern:/(^([\t ]*)):.+((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"}}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:{rest:e.languages.markup}},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:if|unless|else|case|when|default|each|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:if|unless|else|case|when|default|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:block|extends|include|append|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,"function":/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]+).+/m,lookbehind:!0,inside:{rest:e.languages.javascript}},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]+).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:{rest:e.languages.javascript}},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:{rest:e.languages.javascript}},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:{rest:e.languages.javascript}}],punctuation:/[.\-!=|]+/};for(var t="(^([\\t ]*)):{{filter_name}}((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+",n=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","hogan","less","livescript","markdown","mustache","plates",{filter:"sass",language:"scss"},"stylus","swig"],a={},i=0,r=n.length;r>i;i++){var s=n[i];s="string"==typeof s?{filter:s,language:s}:s,e.languages[s.language]&&(a["filter-"+s.filter]={pattern:RegExp(t.replace("{{filter_name}}",s.filter),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},rest:e.languages[s.language]}})}e.languages.insertBefore("jade","filter",a)}(Prism); 14 | Prism.languages.java=Prism.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),Prism.languages.insertBefore("java","function",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0}}); 15 | Prism.languages.json={property:/".*?"(?=\s*:)/gi,string:/"(?!:)(\\?[^"])*?"(?!:)/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,punctuation:/[{}[\]);,]/g,operator:/:/g,"boolean":/\b(true|false)\b/gi,"null":/\bnull\b/gi},Prism.languages.jsonp=Prism.languages.json; 16 | !function(a){var e=/\\([^a-z()[\]]|[a-z\*]+)/i,n={"equation-command":{pattern:e,alias:"regex"}};a.languages.latex={comment:/%.*/m,cdata:{pattern:/(\\begin\{((?:verbatim|lstlisting)\*?)\})([\w\W]*?)(?=\\end\{\2\})/,lookbehind:!0},equation:[{pattern:/\$(?:\\?[\w\W])*?\$|\\\((?:\\?[\w\W])*?\\\)|\\\[(?:\\?[\w\W])*?\\\]/,inside:n,alias:"string"},{pattern:/(\\begin\{((?:equation|math|eqnarray|align|multline|gather)\*?)\})([\w\W]*?)(?=\\end\{\2\})/,lookbehind:!0,inside:n,alias:"string"}],keyword:{pattern:/(\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0},url:{pattern:/(\\url\{)[^}]+(?=\})/,lookbehind:!0},headline:{pattern:/(\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\}(?:\[[^\]]+\])?)/,lookbehind:!0,alias:"class-name"},"function":{pattern:e,alias:"selector"},punctuation:/[[\]{}&]/}}(Prism); 17 | Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|.)*/,lookbehind:!0},string:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/}; 18 | Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},code:[{pattern:/^(?: {4}|\t).+/m,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*(?:\r?\n|\r)(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])([\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*$|__$/}},italic:{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),Prism.languages.markdown.bold.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.italic.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.bold.inside.italic=Prism.util.clone(Prism.languages.markdown.italic),Prism.languages.markdown.italic.inside.bold=Prism.util.clone(Prism.languages.markdown.bold); 19 | Prism.languages.python={"triple-quoted-string":{pattern:/"""[\s\S]+?"""|'''[\s\S]+?'''/,alias:"string"},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/}; 20 | Prism.languages.rest={table:[{pattern:/(\s*)(?:\+[=-]+)+\+(?:\r?\n|\r)(?:\1(?:[+|].+)+[+|](?:\r?\n|\r))+\1(?:\+[=-]+)+\+/,lookbehind:!0,inside:{punctuation:/\||(?:\+[=-]+)+\+/}},{pattern:/(\s*)(?:=+ +)+=+((?:\r?\n|\r)\1.+)+(?:\r?\n|\r)\1(?:=+ +)+=+(?=(?:\r?\n|\r){2}|\s*$)/,lookbehind:!0,inside:{punctuation:/[=-]+/}}],"substitution-def":{pattern:/(^\s*\.\. )\|(?:[^|\s](?:[^|]*[^|\s])?)\| [^:]+::/m,lookbehind:!0,inside:{substitution:{pattern:/^\|(?:[^|\s]|[^|\s][^|]*[^|\s])\|/,alias:"attr-value",inside:{punctuation:/^\||\|$/}},directive:{pattern:/( +)[^:]+::/,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}}}},"link-target":[{pattern:/(^\s*\.\. )\[[^\]]+\]/m,lookbehind:!0,alias:"string",inside:{punctuation:/^\[|\]$/}},{pattern:/(^\s*\.\. )_(?:`[^`]+`|(?:[^:\\]|\\.)+):/m,lookbehind:!0,alias:"string",inside:{punctuation:/^_|:$/}}],directive:{pattern:/(^\s*\.\. )[^:]+::/m,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}},comment:{pattern:/(^\s*\.\.)(?:(?: .+)?(?:(?:\r?\n|\r).+)+| .+)(?=(?:\r?\n|\r){2}|$)/m,lookbehind:!0},title:[{pattern:/^(([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+)(?:\r?\n|\r).+(?:\r?\n|\r)\1$/m,inside:{punctuation:/^[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+|[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}},{pattern:/(^|(?:\r?\n|\r){2}).+(?:\r?\n|\r)([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+(?=\r?\n|\r|$)/,lookbehind:!0,inside:{punctuation:/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}}],hr:{pattern:/((?:\r?\n|\r){2})([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2{3,}(?=(?:\r?\n|\r){2})/,lookbehind:!0,alias:"punctuation"},field:{pattern:/(^\s*):[^:\r\n]+:(?= )/m,lookbehind:!0,alias:"attr-name"},"command-line-option":{pattern:/(^\s*)(?:[+-][a-z\d]|(?:\-\-|\/)[a-z\d-]+)(?:[ =](?:[a-z][a-z\d_-]*|<[^<>]+>))?(?:, (?:[+-][a-z\d]|(?:\-\-|\/)[a-z\d-]+)(?:[ =](?:[a-z][a-z\d_-]*|<[^<>]+>))?)*(?=(?:\r?\n|\r)? {2,}\S)/im,lookbehind:!0,alias:"symbol"},"literal-block":{pattern:/::(?:\r?\n|\r){2}([ \t]+).+(?:(?:\r?\n|\r)\1.+)*/,inside:{"literal-block-punctuation":{pattern:/^::/,alias:"punctuation"}}},"quoted-literal-block":{pattern:/::(?:\r?\n|\r){2}([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]).*(?:(?:\r?\n|\r)\1.*)*/,inside:{"literal-block-punctuation":{pattern:/^(?:::|([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\1*)/m,alias:"punctuation"}}},"list-bullet":{pattern:/(^\s*)(?:[*+\-•‣⁃]|\(?(?:\d+|[a-z]|[ivxdclm]+)\)|(?:\d+|[a-z]|[ivxdclm]+)\.)(?= )/im,lookbehind:!0,alias:"punctuation"},"doctest-block":{pattern:/(^\s*)>>> .+(?:(?:\r?\n|\r).+)*/m,lookbehind:!0,inside:{punctuation:/^>>>/}},inline:[{pattern:/(^|[\s\-:\/'"<(\[{])(?::[^:]+:`.*?`|`.*?`:[^:]+:|(\*\*?|``?|\|)(?!\s).*?[^\s]\2(?=[\s\-.,:;!?\\\/'")\]}]|$))/m,lookbehind:!0,inside:{bold:{pattern:/(^\*\*).+(?=\*\*$)/,lookbehind:!0},italic:{pattern:/(^\*).+(?=\*$)/,lookbehind:!0},"inline-literal":{pattern:/(^``).+(?=``$)/,lookbehind:!0,alias:"symbol"},role:{pattern:/^:[^:]+:|:[^:]+:$/,alias:"function",inside:{punctuation:/^:|:$/}},"interpreted-text":{pattern:/(^`).+(?=`$)/,lookbehind:!0,alias:"attr-value"},substitution:{pattern:/(^\|).+(?=\|$)/,lookbehind:!0,alias:"attr-value"},punctuation:/\*\*?|``?|\|/}}],link:[{pattern:/\[[^\]]+\]_(?=[\s\-.,:;!?\\\/'")\]}]|$)/,alias:"string",inside:{punctuation:/^\[|\]_$/}},{pattern:/(?:\b[a-z\d](?:[_.:+]?[a-z\d]+)*_?_|`[^`]+`_?_|_`[^`]+`)(?=[\s\-.,:;!?\\\/'")\]}]|$)/i,alias:"string",inside:{punctuation:/^_?`|`$|`?_?_$/}}],punctuation:{pattern:/(^\s*)(?:\|(?= |$)|(?:---?|—|\.\.|__)(?= )|\.\.$)/m,lookbehind:!0}}; 21 | !function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var a=/((\$[-_\w]+)|(#\{\$[-_\w]+\}))/i,t=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:a,operator:t}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:a,operator:t,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,delete e.languages.sass.selector,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,lookbehind:!0}})}(Prism); 22 | Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m,inside:{placeholder:/%[-_\w]+/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","property",{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-_\w]+/,alias:"selector"},statement:/\B!(?:default|optional)\b/i,"boolean":/\b(?:true|false)\b/,"null":/\bnull\b/,operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.util.clone(Prism.languages.scss); 23 | Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},string:{pattern:/(^|[^@\\])("|')(?:\\?[\s\S])*?\2/,lookbehind:!0},variable:/@[\w.$]+|@("|'|`)(?:\\?[\s\S])+?\1/,"function":/\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATETIME|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\b/i,"boolean":/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b-?(?:0x)?\d*\.?[\da-f]+\b/,operator:/[-+*\/=%^~]|&&?|\|?\||!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}; 24 | Prism.languages.wiki=Prism.languages.extend("markup",{"block-comment":{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0,alias:"comment"},heading:{pattern:/^(=+).+?\1/m,inside:{punctuation:/^=+|=+$/,important:/.+/}},emphasis:{pattern:/('{2,5}).+?\1/,inside:{"bold italic":{pattern:/(''''').+?(?=\1)/,lookbehind:!0},bold:{pattern:/(''')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},italic:{pattern:/('')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},punctuation:/^''+|''+$/}},hr:{pattern:/^-{4,}/m,alias:"punctuation"},url:[/ISBN +(?:97[89][ -]?)?(?:\d[ -]?){9}[\dx]\b|(?:RFC|PMID) +\d+/i,/\[\[.+?\]\]|\[.+?\]/],variable:[/__[A-Z]+__/,/\{{3}.+?\}{3}/,/\{\{.+?}}/],symbol:[/^#redirect/im,/~{3,5}/],"table-tag":{pattern:/((?:^|[|!])[|!])[^|\r\n]+\|(?!\|)/m,lookbehind:!0,inside:{"table-bar":{pattern:/\|$/,alias:"punctuation"},rest:Prism.languages.markup.tag.inside}},punctuation:/^(?:\{\||\|\}|\|-|[*#:;!|])|\|\||!!/m}),Prism.languages.insertBefore("wiki","tag",{nowiki:{pattern:/<(nowiki|pre|source)\b[\w\W]*?>[\w\W]*?<\/\1>/i,inside:{tag:{pattern:/<(?:nowiki|pre|source)\b[\w\W]*?>|<\/(?:nowiki|pre|source)>/i,inside:Prism.languages.markup.tag.inside}}}}); 25 | Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\3[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*[:\-,[{\r\n?][ \t]*(![^\s]+)?[ \t]*)[^\r\n{[\]},#]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(\d{4}-\d\d?-\d\d?([tT]|[ \t]+)\d\d?:\d{2}:\d{2}(\.\d*)?[ \t]*(Z|[-+]\d\d?(:\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(:\d{2}(\.\d*)?)?)(?=[ \t]*($|,|]|}))/m,lookbehind:!0,alias:"number"},"boolean":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},"null":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?=[ \t]*($|,|]|}))/m,lookbehind:!0},number:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./}; 26 | -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/img/cake.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/img/cake.jpg -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/img/kitchen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/img/kitchen.jpg -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/img/kitchen2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/img/kitchen2.jpg -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/img/kitchen3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/img/kitchen3.jpg -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/img/lightning-tour.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-05-21_Designing-spaCy/img/lightning-tour.png -------------------------------------------------------------------------------- /2016-05-21_Designing-spaCy/index.jade: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 PYDATA BERLIN 3 | //- ---------------------------------- 4 | 5 | include _mixins 6 | 7 | +slide("intro", "slide", "fast") 8 | +spacy-logo 9 | 10 | +h(1) Designing spaCy:#[br]Industrial-strength NLP 11 | 12 | p Matthew Honnibal, #[a(href="https://spacy.io") spacy.io] 13 | 14 | +slide 15 | +h(2) Like CoreNLP for Python 16 | 17 | +grid 18 | +col("half") 19 | +image("lightning-tour.png") 20 | 21 | +col("half") 22 | +list 23 | +item #[a(href="https://spacy.io") spacy.io] 24 | +item MIT license 25 | +item Commercially backed (sell models, services) 26 | +item Fastest in the world 27 | +item Within 2% of top accuracy 28 | +item Best API (says me) 29 | 30 | +slide 31 | +h(2) Obligatory tortured #[span.u-text-small (torted?)] analogy 32 | 33 | +grid 34 | +col("half") 35 | p Let’s say you want a cake. Cool. 36 | p spaCy can help you bake a cake. 37 | p ...But spaCy is not #[em itself] a cake. It’s more like a kitchen. 38 | br 39 | | If you tried to just eat it, you would not find it tastes delicious. 40 | br 41 | | You have to make the cake first. 42 | 43 | p #[strong (Cakes here are language technology applications.)] 44 | 45 | +col("half") 46 | +image("cake.jpg") 47 | 48 | +slide 49 | +h(2) Industrial NLP kitchen 50 | 51 | +grid 52 | +col("half") 53 | +image("kitchen.jpg") 54 | 55 | +col("half") 56 | +list 57 | +item spaCy is designed to help you make “cakes” (language technologies) for profit 58 | 59 | +item spaCy is very efficient, and the cakes it makes are very good. 60 | 61 | +item ...But if you don’t yet know what a cake even #[em is], it might be hard. At first. 62 | 63 | +item #[s Safety first] 64 | br 65 | | #[s Safety second] 66 | br 67 | | ... 68 | br 69 | | Sixth? 70 | 71 | +slide 72 | +grid 73 | +col("half") 74 | +image("kitchen.jpg") 75 | 76 | +col("half") 77 | +image("kitchen2.jpg") 78 | +image("kitchen3.jpg") 79 | 80 | +slide 81 | +h(2) What we didn’t do: "Pluggable architecture" 82 | 83 | +list 84 | +item NLP is cut up into lots of little problems 85 | +item Tokenization, part-of-speech tagging, parsing, NER... 86 | +item Lots of algorithms for each problem 87 | +item Standard solution: Library is scaffolding, user plugs together 88 | +item This is a horrible, bad, no-good idea 89 | 90 | +slide 91 | +h(2) Pluggable architecture makes wrong thing easy 92 | 93 | +list 94 | +item Suggests models are interchangeable. They’re not. 95 | +item Implies “horses for courses” 96 | +item Algorithms get old. Let them die. 97 | +item If algorithmic details exposed in API, can’t retire without breaking change. 98 | 99 | +slide 100 | +h(2) What we didn’t do: Stand-off annotation 101 | 102 | +list 103 | +item Common problem: "destructive tokenization" 104 | +code. 105 | >>> tokenize("Can’t get string back!") 106 | [“Ca”, “n’t”, “get”, “string”, “back”, “!”] 107 | 108 | +item Standard answer: stand-off annotation

 109 | +code. 110 | >>> tokenize("Can’t get string back!"")
 111 | [(0, 2), (2, 5), (6, 9), (10, 15), (16, 20), (20, 21)] 112 | 113 | +slide 114 | +h(2) Stand-off annotation isn’t practical 115 | 116 | +list 117 | +item Stand-off annotation 118 | +code. 119 | >>> tokenize(“Can’t get string back!”)
 120 | [(0, 2), (2, 5), (6, 9), (10, 15), (16, 20), (20, 21)] 121 | 122 | +item Constantly slice into string to get use the token 123 | +item Works in theory... But an answer only a standards-body could love 124 | +item Slow and impractical 125 | 126 | +slide 127 | +h(2) spaCy’s text representation (roughly) 128 | 129 | +grid 130 | +col("half") 131 | +list 132 | +item Central store of #[em lexical types] 133 | +list 134 | +item Number of types grows exponentially slower than number of tokens 135 | 136 | +item Include tokens for non-trivial whitespace 137 | +item Track start indices 138 | +item Know whether a token "owns" following whitespace 139 | 140 | 141 | +col("half") 142 | +code. 143 | cdef struct LexemeC: 144 | const char* string 145 | int32_t length 146 | uint64_t flags 147 | 148 | cdef struct TokenC: 149 | const LexemeC* lex 150 | AnnotationC annot 151 | int32_t start 152 | bool has_space 153 | 154 | cdef TokenC* doc 155 | 156 | +slide 157 | +h(2) Design of ML parts 158 | 159 | +grid 160 | +col("half") 161 | +list 162 | +item Cannot easily batch problem — require per-example #[code predict()] and #[code update()] methods 163 | +item Currently linear model, tonnes of features
(around 9m individual predictors for the parsing model) 164 | +item Why so sparse? #[a(href="https://spacy.io/demos/displacy") spacy.io/demos/displacy] 165 | +item Features are hash values, collisions be damned. (Safety sixth) 166 | +item #[a(href="https://github.com/spacy-io/thinc/blob/master/thinc/linear/avgtron.pyx") github.com/spacy-io/thinc/blob/master/thinc/linear/avgtron.pyx] 167 | 168 | +col("half") 169 | +code.u-text-tiny. 170 | cdef int parseC(self, TokenC* tokens, int length, 171 | int nr_feat, int nr_class) nogil: 172 | 173 | state = new StateC(tokens, length) 174 | self.moves.initialize_state(state) 175 | while not state.is_final(): 176 | self.model.set_featuresC(&eg, state) 177 | self.moves.set_valid(eg.is_valid, state) 178 | self.model.set_scoresC(eg.scores, eg.features, eg.nr_feat) 179 | guess = arg_max_if_true(eg.scores, eg.is_valid, eg.nr_class) 180 | action = self.moves.c[guess] 181 | action.do(state, action.label) 182 | fill(eg.scores, 0, eg.nr_class) 183 | fill(eg.is_valid, 1, eg.nr_class) 184 | 185 | +slide 186 | +h(2) Implementation of Python layer 187 | 188 | +list 189 | +item Python classes are views of the underlying C data 190 | br 191 | a(href="https://github.com/spacy-io/spaCy/blob/master/spacy/tokens/token.pyx").u-text-small github.com/spacy-io/spaCy/blob/master/spacy/tokens/token.pyx 192 | 193 | +item Try not to store data twice — single source of truth. Therefore, try not to hold data in Python. 194 | +item Python classes hold a Pool object, for memory management 195 | br 196 | a(href="https://github.com/spacy-io/cymem/blob/master/cymem/cymem.pyx").u-text-small github.com/spacy-io/cymem/blob/master/cymem/cymem.pyx 197 | 198 | +slide 199 | +h(2) Python API philosophy 200 | 201 | +list 202 | +item #[a(href="https://spacy.io/docs") spacy.io/docs] 203 | +item Try to minimise number of bits in mental representation of API 204 | +item Use #[code __getitem__], #[code __call__], #[code __iter__] where possible 205 | +item Use properties liberally, in place of methods. (Sometimes regrets) 206 | +item Argument may be different types on input. 207 | +item Return should not be different types on output. 208 | 209 | +slide("outro", "zoom") 210 | +h(1) Thanks! 211 | 212 | p 213 | a(href="https://spacy.io") spacy.io 214 | 215 | br 216 | 217 | +icon("github") 218 | a(href="https://github.com/spacy-io/spaCy") github.com/spacy-io/spaCy 219 | 220 | p 221 | code pip install spacy 222 | br 223 | code conda install spacy 224 | 225 | p 226 | +icon("mail") 227 | a(href="mailto:contact@spacy.io") contact@spacy.io 228 | 229 | br 230 | 231 | +icon("twitter") 232 | a(href="https://twitter.com/spacy_io") @spacy_io 233 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/_data.json: -------------------------------------------------------------------------------- 1 | { 2 | "index": { 3 | "title": "Introduction to spaCy", 4 | "event": "Bothack Berlin", 5 | "date": "2016-11-19", 6 | "theme": "spacy" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/_layout.jade: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 LAYOUT 3 | //- ---------------------------------- 4 | 5 | include _mixins 6 | 7 | doctype html 8 | html(lang="en") 9 | head 10 | title #{title} - #{event} 11 | 12 | meta(http-equiv="content-type" content="text/html; charset=utf-8") 13 | meta(name="viewport" content="width=device-width, initial-scale=1.0") 14 | link(rel="stylesheet" href="/assets/css/reveal.css") 15 | link#theme(rel="stylesheet" href="/assets/css/theme-#{theme}.css") 16 | 17 | body 18 | main.reveal.o-container 19 | .slides.o-slides 20 | !=yield 21 | 22 | script(src="/assets/js/prism.js") 23 | script(src="/assets/js/reveal.js") 24 | script. 25 | Reveal.initialize({ 26 | controls: true, 27 | progress: false, 28 | history: true, 29 | center: true, 30 | width: 1440, 31 | height: 900, 32 | margin: 0.15 33 | }) 34 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/_mixins.jade: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 MIXINS 3 | //- ---------------------------------- 4 | 5 | //- Add prefixes to items of an array (for modifier CSS classes) 6 | 7 | - function prefixArgs(array, prefix) { 8 | - return array.map(function(arg) { 9 | - return prefix + '--' + arg; 10 | - }).join(' '); 11 | - } 12 | 13 | 14 | //- Slide 15 | 16 | mixin slide(state, transition, speed) 17 | section(data-state=state data-transition=transition data-transition-speed=speed) 18 | .o-slide&attributes(attributes) 19 | block 20 | 21 | 22 | //- Icon 23 | 24 | mixin icon(name, size) 25 | - var size = size || 28 26 | 27 | svg.o-icon(aria-hidden="true" viewBox="0 0 #{size} #{size}" width=size height=size)&attributes(attributes) 28 | use(xlink:href="/assets/img/icons.svg#icon-#{name}") 29 | 30 | 31 | //- Image 32 | 33 | mixin image(src) 34 | figure.o-block 35 | img(src="img/#{src}") 36 | 37 | 38 | //- Code 39 | 40 | mixin code(language, label) 41 | pre.c-code-block.o-block(class="lang-#{language || 'python'}") 42 | if label 43 | span.c-code-block__label.u-text-label=label 44 | 45 | code.c-code-block__content.u-code-regular&attributes(attributes) 46 | block 47 | 48 | 49 | //- List 50 | 51 | mixin list(type, start) 52 | if type 53 | ol.c-list.o-block.u-text-regular(class="c-list--#{type}" style=(start === 0 || start) ? "counter-reset: li #{(start - 1)}" : "")&attributes(attributes) 54 | block 55 | 56 | else 57 | ul.c-list.c-list--bullets.o-block.u-text-regular&attributes(attributes) 58 | block 59 | 60 | 61 | //- List item 62 | 63 | mixin item() 64 | li.c-list__item&attributes(attributes) 65 | block 66 | 67 | 68 | //- Grid Container 69 | 70 | mixin grid(...style) 71 | .o-grid.o-block(class=prefixArgs(style, "o-grid"))&attributes(attributes) 72 | block 73 | 74 | 75 | //- Grid Column 76 | 77 | mixin col(...style) 78 | .o-grid__col(class=prefixArgs(style, "o-grid__col"))&attributes(attributes) 79 | block 80 | 81 | 82 | //- Headlines 83 | 84 | mixin h(level) 85 | +headline(level).u-heading&attributes(attributes) 86 | block 87 | 88 | 89 | //- Headline base 90 | 91 | mixin headline(level) 92 | if level == 1 93 | h1.u-heading-1&attributes(attributes) 94 | block 95 | 96 | else if level == 2 97 | h2.u-heading-2&attributes(attributes) 98 | block 99 | 100 | else if level == 3 101 | h3.u-heading-3&attributes(attributes) 102 | block 103 | 104 | else if level == 4 105 | h4.u-heading-4&attributes(attributes) 106 | block 107 | 108 | else if level == 5 109 | h5.u-heading-5&attributes(attributes) 110 | block 111 | 112 | 113 | //- Date 114 | 115 | mixin date(input) 116 | - var date = new Date(input) 117 | - var months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ] 118 | 119 | time(datetime=JSON.parse(JSON.stringify(date)))&attributes(attributes)=months[date.getMonth()] + ' ' + date.getDate() + ', ' + date.getFullYear() 120 | 121 | 122 | //- Logos 123 | 124 | mixin spacy-logo 125 | svg(viewBox="0 0 675 215" width="500").o-block 126 | path(fill="currentColor" d="M83.6 83.3C68.3 81.5 67.2 61 47.5 62.8c-9.5 0-18.4 4-18.4 12.7 0 13.2 20.3 14.4 32.5 17.7 20.9 6.3 41 10.7 41 33.3 0 28.8-22.6 38.8-52.4 38.8-24.9 0-50.2-8.9-50.2-31.8 0-6.4 6.1-11.3 12-11.3 7.5 0 10.1 3.2 12.7 8.4 5.8 10.2 12.3 15.6 28.3 15.6 10.2 0 20.6-3.9 20.6-12.7 0-12.6-12.8-15.3-26.1-18.4-23.5-6.6-43.6-10-46-36.1C-1 34.5 91.7 32.9 97 71.9c.1 7.1-6.5 11.4-13.4 11.4zm110.2-39c32.5 0 51 27.2 51 60.8 0 33.7-17.9 60.8-51 60.8-18.4 0-29.8-7.8-38.1-19.8v44.5c0 13.4-4.3 19.8-14.1 19.8-11.9 0-14.1-7.6-14.1-19.8V61.3c0-10.6 4.4-17 14.1-17 9.1 0 14.1 7.2 14.1 17v3.6c9.2-11.6 19.7-20.6 38.1-20.6zm-7.7 98.4c19.1 0 27.6-17.6 27.6-38.1 0-20.1-8.6-38.1-27.6-38.1-19.8 0-29 16.3-29 38.1 0 21.2 9.2 38.1 29 38.1zM266.9 76c0-23.4 26.9-31.7 52.9-31.7 36.6 0 51.7 10.7 51.7 46v34c0 8.1 5 24.1 5 29 0 7.4-6.8 12-14.1 12-8.1 0-14.1-9.5-18.4-16.3-11.9 9.5-24.5 16.3-43.8 16.3-21.3 0-38.1-12.6-38.1-33.3 0-18.4 13.2-28.9 29-32.5 0 .1 51-12 51-12.1 0-15.7-5.5-22.6-22-22.6-14.5 0-21.9 4-27.5 12.7-4.5 6.6-4 10.6-12.7 10.6-6.9-.1-13-4.9-13-12.1zm43.6 70.2c22.3 0 31.8-11.8 31.8-35.3v-5c-6 2-30.3 8-36.8 9.1-7 1.4-14.1 6.6-14.1 14.9.1 9.1 9.4 16.3 19.1 16.3zM474.5 0c31.5 0 65.7 18.8 65.7 48.8 0 7.7-5.8 14.1-13.4 14.1-10.3 0-11.8-5.5-16.3-13.4-7.6-13.9-16.5-23.3-36.1-23.3-30.2-.2-43.7 25.6-43.7 57.8 0 32.4 11.2 55.8 42.4 55.8 20.7 0 32.2-12 38.1-27.6 2.4-7.1 6.7-14.1 15.6-14.1 7 0 14.1 7.2 14.1 14.8 0 31.8-32.4 53.8-65.8 53.8-36.5 0-57.2-15.4-68.5-41-5.5-12.2-9.1-24.9-9.1-42.4-.1-49.2 28.6-83.3 77-83.3zm180.3 44.3c8 0 12.7 5.2 12.7 13.4 0 3.3-2.6 9.9-3.6 13.4L625.1 173c-8.6 22.1-15.1 37.4-44.5 37.4-14 0-26.1-1.2-26.1-13.4 0-7 5.3-10.6 12.7-10.6 1.4 0 3.6.7 5 .7 2.1 0 3.6.7 5 .7 14.7 0 16.8-15.1 22-25.5l-37.4-92.6c-2.1-5-3.6-8.4-3.6-11.3 0-8.2 6.4-14.1 14.8-14.1 9.5 0 13.3 7.5 15.6 15.6l24.7 73.5L638 65.5c3.9-10.5 4.2-21.2 16.8-21.2z") 127 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/_base/_fonts.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > FONTS 3 | //- ---------------------------------- 4 | 5 | // Source Sans Pro 6 | 7 | @font-face 8 | font-family: "Source Sans Pro" 9 | font-style: normal 10 | font-weight: 400 11 | src: url("../fonts/sourcesanspro-regular.eot") 12 | src: url("../fonts/sourcesanspro-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-regular.woff2") format("woff2"), url("../fonts/sourcesanspro-regular.woff") format("woff"), url("../fonts/sourcesanspro-regular.ttf") format("truetype"), url("../fonts/sourcesanspro-regular.svg#source_sans_proregular") format("svg") 13 | 14 | @font-face 15 | font-family: "Source Sans Pro" 16 | font-style: italic 17 | font-weight: 400 18 | src: url("../fonts/sourcesanspro-italic.eot") 19 | src: url("../fonts/sourcesanspro-italic.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-italic.woff2") format("woff2"), url("../fonts/sourcesanspro-italic.woff") format("woff"), url("../fonts/sourcesanspro-italic.ttf") format("truetype"), url("../fonts/sourcesanspro-italic.svg#source_sans_proitalic") format("svg") 20 | 21 | @font-face 22 | font-family: "Source Sans Pro" 23 | font-style: normal 24 | font-weight: 700 25 | src: url("../fonts/sourcesanspro-bold.eot") 26 | src: url("../fonts/sourcesanspro-bold.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-bold.woff2") format("woff2"), url("../fonts/sourcesanspro-bold.woff") format("woff"), url("../fonts/sourcesanspro-bold.ttf") format("truetype"), url("../fonts/sourcesanspro-bold.svg#source_sans_probold") format("svg") 27 | 28 | @font-face 29 | font-family: "Source Sans Pro" 30 | font-style: italic 31 | font-weight: 700 32 | src: url("../fonts/sourcesanspro-bolditalic.eot") 33 | src: url("../fonts/sourcesanspro-bolditalic.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcesanspro-bolditalic.woff2") format("woff2"), url("../fonts/sourcesanspro-bolditalic.woff") format("woff"), url("../fonts/sourcesanspro-bolditalic.ttf") format("truetype"), url("../fonts/sourcesanspro-bolditalic.svg#source_sans_probold_italic") format("svg") 34 | 35 | 36 | // Source Code Pro 37 | 38 | @font-face 39 | font-family: "Source Code Pro" 40 | font-style: normal 41 | font-weight: 600 42 | src: url("../fonts/sourcecodepro-semibold.eot") 43 | src: url("../fonts/sourcecodepro-semibold.eot?#iefix") format("embedded-opentype"), url("../fonts/sourcecodepro-semibold.woff") format("woff"), url("../fonts/sourcecodepro-semibold.ttf") format("truetype"), url("../fonts/sourcecodepro-semibold.svg#sourcecodepro_semibold") format("svg") 44 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/_base/_grid.sass: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 BASE > GRID 3 | //- ---------------------------------- 4 | 5 | //- Grid container 6 | 7 | .o-grid 8 | display: flex 9 | flex-wrap: wrap 10 | flex-direction: row 11 | align-items: stretch 12 | justify-content: space-between 13 | 14 | 15 | //- Grid column 16 | 17 | .o-grid__col 18 | $grid-gutter: 2rem 19 | 20 | margin-top: $grid-gutter 21 | overflow: hidden 22 | display: flex 23 | flex: 0 0 100% 24 | flex-direction: column 25 | flex-wrap: wrap 26 | 27 | @each $mode, $count in $grid 28 | &.o-grid__col--#{$mode} 29 | $percentage: calc(#{100% / $count} - #{$grid-gutter}) 30 | flex: 0 0 $percentage 31 | max-width: $percentage 32 | 33 | // Fix overflow issue in old browsers 34 | 35 | & > * 36 | flex-shrink: 1 37 | max-width: 100% 38 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/_base/_layout.sass: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 LAYOUT 3 | //- ---------------------------------- 4 | 5 | //- Layout 6 | 7 | body 8 | background: $page-bg 9 | padding: 3rem 10 | 11 | //- Objects 12 | 13 | .o-container 14 | font: #{$type-base}/#{1.375} $font-primary 15 | background: $color-back 16 | 17 | .o-slide 18 | background: $color-back 19 | font-size: 2.25rem 20 | 21 | &.o-slide--center 22 | text-align: center 23 | 24 | a 25 | border-bottom: 2px solid $color-theme 26 | 27 | .o-block, 28 | p 29 | margin-bottom: 3rem 30 | 31 | .o-icon 32 | vertical-align: middle 33 | margin-right: 0.75rem 34 | 35 | 36 | //- Utilities 37 | 38 | .u-color-theme 39 | color: $color-theme 40 | 41 | .u-color-subtle 42 | color: $color-subtle-dark 43 | 44 | .u-text-small.u-text-small 45 | font-size: 1.75rem 46 | 47 | .u-text-tiny.u-text-tiny 48 | font-size: 1rem 49 | 50 | .u-heading 51 | margin-bottom: 2rem 52 | 53 | @each $level, $size in (1: 6, 2: 4, 3: 3, 4: 2.8, 5: 2.5) 54 | .u-heading-#{$level} 55 | font: normal bold #{$size}rem/#{1.25} $font-primary 56 | 57 | 58 | //- Components 59 | 60 | 61 | //- List Container 62 | 63 | .c-list 64 | @each $type, $counter in (numbers: decimal, letters: upper-latin, roman: lower-roman) 65 | &.c-list--#{$type} 66 | counter-reset: li 67 | 68 | .c-list__item:before 69 | content: counter(li, #{$counter}) '.' 70 | 71 | 72 | //- List Item 73 | 74 | .c-list__item 75 | padding-left: 2rem 76 | margin-bottom: 0.5em 77 | margin-left: 1.25rem 78 | 79 | &:before 80 | color: $color-theme 81 | content: '\25CF' 82 | display: inline-block 83 | font-size: 1em 84 | font-weight: bold 85 | padding-right: 1.25rem 86 | margin-left: -3.75rem 87 | text-align: right 88 | width: 2.5rem 89 | counter-increment: li 90 | 91 | & > .o-block 92 | margin-top: 2rem 93 | 94 | 95 | //- Code block 96 | 97 | .c-code-block 98 | background: $color-front 99 | color: $color-back 100 | padding: 0.75em 0 101 | border-radius: 2px 102 | overflow: auto 103 | width: 100% 104 | max-width: 100% 105 | white-space: pre 106 | direction: ltr 107 | 108 | 109 | //- Code block content 110 | 111 | .c-code-block__content 112 | display: block 113 | font: normal 600 1.5rem/#{2} $font-code 114 | padding: 1em 2em 115 | 116 | 117 | //- Inline code 118 | 119 | *:not(.c-code-block) > code 120 | font: normal 600 0.8em/#{1} $font-code 121 | background: $color-subtle 122 | color: $color-front 123 | padding: 0.1em 0.5em 124 | margin: 0 125 | border-radius: 1px 126 | text-shadow: none 127 | 128 | 129 | //- Syntax Highlighting 130 | 131 | [class*="language-"] .token 132 | &.comment, &.prolog, &.doctype, &.cdata, &.punctuation 133 | color: map-get($syntax-highlighting, comment) 134 | 135 | &.property, &.tag, &.constant, &.symbol, &.deleted 136 | color: map-get($syntax-highlighting, tag) 137 | 138 | &.boolean, &.number 139 | color: map-get($syntax-highlighting, number) 140 | 141 | &.selector, &.attr-name, &.string, &.char, &.builtin, &.inserted 142 | color: map-get($syntax-highlighting, selector) 143 | 144 | @at-root .language-css .token.string, 145 | &.operator, &.entity, &.url, &.variable 146 | color: map-get($syntax-highlighting, operator) 147 | 148 | &.atrule, &.attr-value, &.function 149 | color: map-get($syntax-highlighting, function) 150 | 151 | &.regex, &.important 152 | color: map-get($syntax-highlighting, regex) 153 | 154 | &.keyword 155 | color: map-get($syntax-highlighting, keyword) 156 | 157 | &.italic 158 | font-style: italic 159 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/_base/_mixins.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > MIXINS 3 | //- ---------------------------------- 4 | 5 | //- Size shorthand 6 | 7 | @mixin size($width, $height: $width) 8 | width: $width 9 | height: $height 10 | 11 | 12 | //- Position shorthand 13 | 14 | @mixin position($position, $pos-y, $pos-x, $pos-y-value, $pos-x-value) 15 | position: $position 16 | #{$pos-y}: $pos-y-value 17 | #{$pos-x}: $pos-x-value 18 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/_base/_reset.sass: -------------------------------------------------------------------------------- 1 | //- ---------------------------------- 2 | //- 💥 BASE > RESET 3 | //- ---------------------------------- 4 | 5 | //- adapted from "normalize.css" by Nicolas Gallagher & Jonathan Neal 6 | //- https://github.com/necolas/normalize.css 7 | 8 | * 9 | box-sizing: border-box 10 | padding: 0 11 | margin: 0 12 | border: 0 13 | outline: 0 14 | 15 | html 16 | font-family: sans-serif 17 | text-rendering: optimizeSpeed 18 | -ms-text-size-adjust: 100% 19 | -webkit-text-size-adjust: 100% 20 | -webkit-font-smoothing: antialiased 21 | -moz-osx-font-smoothing: grayscale 22 | 23 | body 24 | margin: 0 25 | 26 | article, aside, details, figcaption, figure, footer, header, main, menu, nav, 27 | section, summary, progress 28 | display: block 29 | 30 | a 31 | background-color: transparent 32 | color: inherit 33 | text-decoration: none 34 | 35 | &:active, 36 | &:hover 37 | outline: 0 38 | 39 | b, strong 40 | font-weight: inherit 41 | font-weight: bolder 42 | 43 | small 44 | font-size: 80% 45 | 46 | sub, sup 47 | position: relative 48 | font-size: 65% 49 | line-height: 0 50 | vertical-align: baseline 51 | 52 | sup 53 | top: -0.5em 54 | 55 | sub 56 | bottom: -0.15em 57 | 58 | img 59 | border: 0 60 | height: auto 61 | max-width: 100% 62 | 63 | svg 64 | color-interpolation-filters: sRGB 65 | fill: currentColor 66 | 67 | &:not(:root) 68 | overflow: hidden 69 | 70 | hr 71 | box-sizing: content-box 72 | overflow: visible 73 | height: 0 74 | 75 | pre 76 | overflow: auto 77 | 78 | code, pre 79 | font-family: monospace, monospace 80 | font-size: 1em 81 | 82 | table 83 | text-align: left 84 | width: 100% 85 | max-width: 100% 86 | border-collapse: collapse 87 | 88 | td, 89 | th 90 | vertical-align: top 91 | 92 | ul, 93 | ol 94 | list-style: none 95 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/_base/_theme.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > THEME TEMPLATE 3 | //- ---------------------------------- 4 | 5 | $type-base: 16px !default 6 | 7 | $color-back: #fff !default 8 | $color-front: #1e1935 !default 9 | $color-subtle: #ddd !default 10 | $color-subtle-dark: #949E9B !default 11 | $color-theme: #1e1935 !default 12 | 13 | $syntax-highlighting: ( comment: #999, tag: #81c44d, number: #8771ff, selector: #8771ff, operator: #f44d61, function: #2fbbab, keyword: #f44d61, regex: #ff9900 ) !default 14 | 15 | $font-primary: Helvetica, Arial, sans-serif !default 16 | $font-code: Consolas, Menlo, Monaco, Courier, monospace !default 17 | 18 | $page-bg: $color-theme !default 19 | 20 | $grid: ( quarter: 4, third: 3, half: 2, two-thirds: 1.5, three-quarters: 1.33 ) 21 | 22 | @import mixins 23 | @import reset 24 | @import fonts 25 | @import layout 26 | @import grid 27 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/_base/_utilities.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BASE > UTILITIES 3 | //- ---------------------------------- 4 | 5 | .u-text-center 6 | text-align: center 7 | 8 | .u-color-theme 9 | color: $color-theme 10 | 11 | .u-text-small 12 | font-size: 1.75rem 13 | 14 | .u-heading 15 | margin-bottom: 2rem 16 | 17 | @each $level, $size in (1: 6, 2: 4, 3: 3, 4: 2.8, 5: 2.5) 18 | .u-heading-#{$level} 19 | font: normal bold #{$size}rem/#{1.25} $font-primary 20 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/theme-explosion.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 EXPLOSION THEME 3 | //- ---------------------------------- 4 | 5 | $color-back: #fff 6 | $color-front: #1e1935 7 | $color-subtle: #ddd 8 | $color-subtle-dark: #949E9B 9 | $color-theme: #1e1935 10 | 11 | $font-primary: "Sailec", Helvetica, Arial, sans-serif 12 | $font-code: "Input Mono Compressed", Consolas, "Andale Mono", Menlo, Monaco, Courier, monospace 13 | 14 | @import _base/theme 15 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/css/theme-spacy.sass: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 SPACY THEME 3 | //- ---------------------------------- 4 | 5 | $color-back: #fff 6 | $color-front: #1a1e23 7 | $color-subtle: #ddd 8 | $color-subtle-dark: #949E9B 9 | $color-theme: #09a3d5 10 | 11 | $page-bg: $color-theme url("/assets/img/pattern_blue.jpg") top left repeat 12 | 13 | $font-primary: "Source Sans Pro", Tahoma, Geneva, sans-serif 14 | $font-code: 'Source Code Pro', Consolas, 'Andale Mono', Menlo, Monaco, Courier, monospace 15 | 16 | @import _base/theme 17 | 18 | 19 | //- Theme-specific overrides 20 | 21 | .navigate-up, 22 | .navigate-down 23 | display: none 24 | 25 | .intro, 26 | .outro 27 | .o-container, 28 | .o-slide 29 | background: transparent 30 | text-align: center 31 | font-weight: bold 32 | color: $color-back 33 | text-shadow: 5px 5px 0 darken($color-theme, 5) 34 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcecodepro-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcecodepro-semibold.eot -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcecodepro-semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcecodepro-semibold.ttf -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcecodepro-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcecodepro-semibold.woff -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.eot -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.ttf -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.woff -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bold.woff2 -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.eot -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.ttf -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.woff -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-bolditalic.woff2 -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.eot -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.ttf -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.woff -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-italic.woff2 -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.eot -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.ttf -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.woff -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/fonts/sourcesanspro-regular.woff2 -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/img/icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mail 5 | 6 | 7 | 8 | github 9 | 10 | 11 | 12 | twitter 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/img/pattern_blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-19_Introduction-to-spaCy/assets/img/pattern_blue.jpg -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/assets/js/prism.js: -------------------------------------------------------------------------------- 1 | /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+bash+c+csharp+cpp+css-extras+git+jade+java+json+latex+makefile+markdown+python+rest+sass+scss+sql+wiki+yaml */ 2 | var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(m instanceof a)){u.lastIndex=0;var y=u.exec(m),v=1;if(!y&&h&&p!=r.length-1){var b=r[p+1].matchedStr||r[p+1],k=m+b;if(p=m.length)continue;var _=y.index+y[0].length,P=m.length+b.length;if(v=3,P>=_){if(r[p+1].greedy)continue;v=2,k=k.slice(0,P)}m=k}if(y){g&&(f=y[1].length);var w=y.index+f,y=y[0].slice(f),_=w+y.length,S=m.slice(0,w),O=m.slice(_),j=[p,v];S&&j.push(S);var A=new a(i,c?n.tokenize(y,c):y,d,y,h);j.push(A),O&&j.push(O),Array.prototype.splice.apply(r,j)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,l=0;r=a[l++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.matchedStr=a||null,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var l={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==l.type&&(l.attributes.spellcheck="true"),e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o="";for(var s in l.attributes)o+=(o?" ":"")+s+'="'+(l.attributes[s]||"")+'"';return"<"+l.tag+' class="'+l.classes.join(" ")+'" '+o+">"+l.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,l=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),l&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",n.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); 3 | Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; 4 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); 5 | Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; 6 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript; 7 | !function(e){var t={variable:[{pattern:/\$?\(\([\w\W]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\w\W]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,inside:t},{pattern:/(["'])(?:\\\\|\\?[^\\])*?\1/g,inside:t}],variable:t.variable,"function":{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/,lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},"boolean":{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var a=t.variable[1].inside;a["function"]=e.languages.bash["function"],a.keyword=e.languages.bash.keyword,a.boolean=e.languages.bash.boolean,a.operator=e.languages.bash.operator,a.punctuation=e.languages.bash.punctuation}(Prism); 8 | Prism.languages.c=Prism.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/}),delete Prism.languages.c["class-name"],delete Prism.languages.c["boolean"]; 9 | Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}}); 10 | Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}); 11 | Prism.languages.css.selector={pattern:/[^\{\}\s][^\{\}]*(?=\s*\{)/,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+(?:\(.*\))?/,"class":/\.[-:\.\w]+/,id:/#[-:\.\w]+/}},Prism.languages.insertBefore("css","function",{hexcode:/#[\da-f]{3,6}/i,entity:/\\[\da-f]{1,8}/i,number:/[\d%\.]+/}); 12 | Prism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(\\?.)*?\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s(--|-)\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m}; 13 | !function(e){e.languages.jade={comment:{pattern:/(^([\t ]*))\/\/.*((?:\r?\n|\r)\2[\t ]+.+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{rest:e.languages.javascript}},filter:{pattern:/(^([\t ]*)):.+((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"}}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:{rest:e.languages.markup}},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:if|unless|else|case|when|default|each|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:if|unless|else|case|when|default|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:block|extends|include|append|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,"function":/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]+).+/m,lookbehind:!0,inside:{rest:e.languages.javascript}},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]+).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:{rest:e.languages.javascript}},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:{rest:e.languages.javascript}},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:{rest:e.languages.javascript}}],punctuation:/[.\-!=|]+/};for(var t="(^([\\t ]*)):{{filter_name}}((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+",n=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","hogan","less","livescript","markdown","mustache","plates",{filter:"sass",language:"scss"},"stylus","swig"],a={},i=0,r=n.length;r>i;i++){var s=n[i];s="string"==typeof s?{filter:s,language:s}:s,e.languages[s.language]&&(a["filter-"+s.filter]={pattern:RegExp(t.replace("{{filter_name}}",s.filter),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},rest:e.languages[s.language]}})}e.languages.insertBefore("jade","filter",a)}(Prism); 14 | Prism.languages.java=Prism.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),Prism.languages.insertBefore("java","function",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0}}); 15 | Prism.languages.json={property:/".*?"(?=\s*:)/gi,string:/"(?!:)(\\?[^"])*?"(?!:)/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,punctuation:/[{}[\]);,]/g,operator:/:/g,"boolean":/\b(true|false)\b/gi,"null":/\bnull\b/gi},Prism.languages.jsonp=Prism.languages.json; 16 | !function(a){var e=/\\([^a-z()[\]]|[a-z\*]+)/i,n={"equation-command":{pattern:e,alias:"regex"}};a.languages.latex={comment:/%.*/m,cdata:{pattern:/(\\begin\{((?:verbatim|lstlisting)\*?)\})([\w\W]*?)(?=\\end\{\2\})/,lookbehind:!0},equation:[{pattern:/\$(?:\\?[\w\W])*?\$|\\\((?:\\?[\w\W])*?\\\)|\\\[(?:\\?[\w\W])*?\\\]/,inside:n,alias:"string"},{pattern:/(\\begin\{((?:equation|math|eqnarray|align|multline|gather)\*?)\})([\w\W]*?)(?=\\end\{\2\})/,lookbehind:!0,inside:n,alias:"string"}],keyword:{pattern:/(\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0},url:{pattern:/(\\url\{)[^}]+(?=\})/,lookbehind:!0},headline:{pattern:/(\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\}(?:\[[^\]]+\])?)/,lookbehind:!0,alias:"class-name"},"function":{pattern:e,alias:"selector"},punctuation:/[[\]{}&]/}}(Prism); 17 | Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|.)*/,lookbehind:!0},string:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/}; 18 | Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},code:[{pattern:/^(?: {4}|\t).+/m,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*(?:\r?\n|\r)(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])([\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*$|__$/}},italic:{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),Prism.languages.markdown.bold.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.italic.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.bold.inside.italic=Prism.util.clone(Prism.languages.markdown.italic),Prism.languages.markdown.italic.inside.bold=Prism.util.clone(Prism.languages.markdown.bold); 19 | Prism.languages.python={"triple-quoted-string":{pattern:/"""[\s\S]+?"""|'''[\s\S]+?'''/,alias:"string"},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/}; 20 | Prism.languages.rest={table:[{pattern:/(\s*)(?:\+[=-]+)+\+(?:\r?\n|\r)(?:\1(?:[+|].+)+[+|](?:\r?\n|\r))+\1(?:\+[=-]+)+\+/,lookbehind:!0,inside:{punctuation:/\||(?:\+[=-]+)+\+/}},{pattern:/(\s*)(?:=+ +)+=+((?:\r?\n|\r)\1.+)+(?:\r?\n|\r)\1(?:=+ +)+=+(?=(?:\r?\n|\r){2}|\s*$)/,lookbehind:!0,inside:{punctuation:/[=-]+/}}],"substitution-def":{pattern:/(^\s*\.\. )\|(?:[^|\s](?:[^|]*[^|\s])?)\| [^:]+::/m,lookbehind:!0,inside:{substitution:{pattern:/^\|(?:[^|\s]|[^|\s][^|]*[^|\s])\|/,alias:"attr-value",inside:{punctuation:/^\||\|$/}},directive:{pattern:/( +)[^:]+::/,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}}}},"link-target":[{pattern:/(^\s*\.\. )\[[^\]]+\]/m,lookbehind:!0,alias:"string",inside:{punctuation:/^\[|\]$/}},{pattern:/(^\s*\.\. )_(?:`[^`]+`|(?:[^:\\]|\\.)+):/m,lookbehind:!0,alias:"string",inside:{punctuation:/^_|:$/}}],directive:{pattern:/(^\s*\.\. )[^:]+::/m,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}},comment:{pattern:/(^\s*\.\.)(?:(?: .+)?(?:(?:\r?\n|\r).+)+| .+)(?=(?:\r?\n|\r){2}|$)/m,lookbehind:!0},title:[{pattern:/^(([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+)(?:\r?\n|\r).+(?:\r?\n|\r)\1$/m,inside:{punctuation:/^[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+|[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}},{pattern:/(^|(?:\r?\n|\r){2}).+(?:\r?\n|\r)([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+(?=\r?\n|\r|$)/,lookbehind:!0,inside:{punctuation:/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}}],hr:{pattern:/((?:\r?\n|\r){2})([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2{3,}(?=(?:\r?\n|\r){2})/,lookbehind:!0,alias:"punctuation"},field:{pattern:/(^\s*):[^:\r\n]+:(?= )/m,lookbehind:!0,alias:"attr-name"},"command-line-option":{pattern:/(^\s*)(?:[+-][a-z\d]|(?:\-\-|\/)[a-z\d-]+)(?:[ =](?:[a-z][a-z\d_-]*|<[^<>]+>))?(?:, (?:[+-][a-z\d]|(?:\-\-|\/)[a-z\d-]+)(?:[ =](?:[a-z][a-z\d_-]*|<[^<>]+>))?)*(?=(?:\r?\n|\r)? {2,}\S)/im,lookbehind:!0,alias:"symbol"},"literal-block":{pattern:/::(?:\r?\n|\r){2}([ \t]+).+(?:(?:\r?\n|\r)\1.+)*/,inside:{"literal-block-punctuation":{pattern:/^::/,alias:"punctuation"}}},"quoted-literal-block":{pattern:/::(?:\r?\n|\r){2}([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]).*(?:(?:\r?\n|\r)\1.*)*/,inside:{"literal-block-punctuation":{pattern:/^(?:::|([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\1*)/m,alias:"punctuation"}}},"list-bullet":{pattern:/(^\s*)(?:[*+\-•‣⁃]|\(?(?:\d+|[a-z]|[ivxdclm]+)\)|(?:\d+|[a-z]|[ivxdclm]+)\.)(?= )/im,lookbehind:!0,alias:"punctuation"},"doctest-block":{pattern:/(^\s*)>>> .+(?:(?:\r?\n|\r).+)*/m,lookbehind:!0,inside:{punctuation:/^>>>/}},inline:[{pattern:/(^|[\s\-:\/'"<(\[{])(?::[^:]+:`.*?`|`.*?`:[^:]+:|(\*\*?|``?|\|)(?!\s).*?[^\s]\2(?=[\s\-.,:;!?\\\/'")\]}]|$))/m,lookbehind:!0,inside:{bold:{pattern:/(^\*\*).+(?=\*\*$)/,lookbehind:!0},italic:{pattern:/(^\*).+(?=\*$)/,lookbehind:!0},"inline-literal":{pattern:/(^``).+(?=``$)/,lookbehind:!0,alias:"symbol"},role:{pattern:/^:[^:]+:|:[^:]+:$/,alias:"function",inside:{punctuation:/^:|:$/}},"interpreted-text":{pattern:/(^`).+(?=`$)/,lookbehind:!0,alias:"attr-value"},substitution:{pattern:/(^\|).+(?=\|$)/,lookbehind:!0,alias:"attr-value"},punctuation:/\*\*?|``?|\|/}}],link:[{pattern:/\[[^\]]+\]_(?=[\s\-.,:;!?\\\/'")\]}]|$)/,alias:"string",inside:{punctuation:/^\[|\]_$/}},{pattern:/(?:\b[a-z\d](?:[_.:+]?[a-z\d]+)*_?_|`[^`]+`_?_|_`[^`]+`)(?=[\s\-.,:;!?\\\/'")\]}]|$)/i,alias:"string",inside:{punctuation:/^_?`|`$|`?_?_$/}}],punctuation:{pattern:/(^\s*)(?:\|(?= |$)|(?:---?|—|\.\.|__)(?= )|\.\.$)/m,lookbehind:!0}}; 21 | !function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var a=/((\$[-_\w]+)|(#\{\$[-_\w]+\}))/i,t=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:a,operator:t}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:a,operator:t,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,delete e.languages.sass.selector,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,lookbehind:!0}})}(Prism); 22 | Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m,inside:{placeholder:/%[-_\w]+/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","property",{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-_\w]+/,alias:"selector"},statement:/\B!(?:default|optional)\b/i,"boolean":/\b(?:true|false)\b/,"null":/\bnull\b/,operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.util.clone(Prism.languages.scss); 23 | Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},string:{pattern:/(^|[^@\\])("|')(?:\\?[\s\S])*?\2/,lookbehind:!0},variable:/@[\w.$]+|@("|'|`)(?:\\?[\s\S])+?\1/,"function":/\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATETIME|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\b/i,"boolean":/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b-?(?:0x)?\d*\.?[\da-f]+\b/,operator:/[-+*\/=%^~]|&&?|\|?\||!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}; 24 | Prism.languages.wiki=Prism.languages.extend("markup",{"block-comment":{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0,alias:"comment"},heading:{pattern:/^(=+).+?\1/m,inside:{punctuation:/^=+|=+$/,important:/.+/}},emphasis:{pattern:/('{2,5}).+?\1/,inside:{"bold italic":{pattern:/(''''').+?(?=\1)/,lookbehind:!0},bold:{pattern:/(''')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},italic:{pattern:/('')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},punctuation:/^''+|''+$/}},hr:{pattern:/^-{4,}/m,alias:"punctuation"},url:[/ISBN +(?:97[89][ -]?)?(?:\d[ -]?){9}[\dx]\b|(?:RFC|PMID) +\d+/i,/\[\[.+?\]\]|\[.+?\]/],variable:[/__[A-Z]+__/,/\{{3}.+?\}{3}/,/\{\{.+?}}/],symbol:[/^#redirect/im,/~{3,5}/],"table-tag":{pattern:/((?:^|[|!])[|!])[^|\r\n]+\|(?!\|)/m,lookbehind:!0,inside:{"table-bar":{pattern:/\|$/,alias:"punctuation"},rest:Prism.languages.markup.tag.inside}},punctuation:/^(?:\{\||\|\}|\|-|[*#:;!|])|\|\||!!/m}),Prism.languages.insertBefore("wiki","tag",{nowiki:{pattern:/<(nowiki|pre|source)\b[\w\W]*?>[\w\W]*?<\/\1>/i,inside:{tag:{pattern:/<(?:nowiki|pre|source)\b[\w\W]*?>|<\/(?:nowiki|pre|source)>/i,inside:Prism.languages.markup.tag.inside}}}}); 25 | Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\3[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*[:\-,[{\r\n?][ \t]*(![^\s]+)?[ \t]*)[^\r\n{[\]},#]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(\d{4}-\d\d?-\d\d?([tT]|[ \t]+)\d\d?:\d{2}:\d{2}(\.\d*)?[ \t]*(Z|[-+]\d\d?(:\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(:\d{2}(\.\d*)?)?)(?=[ \t]*($|,|]|}))/m,lookbehind:!0,alias:"number"},"boolean":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},"null":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?=[ \t]*($|,|]|}))/m,lookbehind:!0},number:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./}; 26 | -------------------------------------------------------------------------------- /2016-11-19_Introduction-to-spaCy/index.jade: -------------------------------------------------------------------------------- 1 | //- --------------------------------- 2 | //- 💥 BOTHACK BERLIN 3 | //- ---------------------------------- 4 | 5 | include _mixins 6 | 7 | +slide("intro", "slide", "fast") 8 | +h(1) Introduction to 9 | 10 | +spacy-logo 11 | 12 | br 13 | br 14 | 15 | +h(2) Industrial-strength#[br] 16 | | Natural Language Processing#[br] 17 | 18 | p Matthew Honnibal, #[a(href="https://spacy.io") spacy.io] 19 | 20 | +slide 21 | +h(2) Using spaCy 22 | 23 | +code. 24 | python -m spacy.en.download all 25 | >>> import spacy 26 | >>> nlp = spacy.load('en') 27 | >>> query = nlp(u"I need car insurance") 28 | >>> cat1 = nlp(u'home and contents') 29 | >>> cat2 = nlp(u'auto insurance') 30 | >>> query.similarity(cat1) 31 | 0.79768605326858877 32 | >>> query.similarity(cat2) 33 | 0.76848982281235922 34 | 35 | +slide 36 | +h(2) spaCy speaks both English and German 37 | 38 | +code. 39 | >>> de_nlp = spacy.load('de') 40 | >>> en_nlp = spacy.load('en') 41 | 42 | +list 43 | +item English support a bit better overall 44 | 45 | +slide 46 | +h(2) Find verbs 47 | 48 | +code. 49 | >>> from spacy.symbols import * 50 | >>> doc = nlp(u'Where should I eat?') 51 | >>> [word for word in doc if word.pos == VERB] 52 | [u'should', u'eat'] 53 | 54 | +list 55 | +item Parse tree gives useful heuristics. 56 | +item #[code ROOT], #[code nsubj], #[code dobj] are good, central content words (verb subject object) 57 | +item Short path to root generally means important. 58 | 59 | +code. 60 | >>> [(word.dep_, word) for word in doc if word.pos == VERB] 61 | [(u'aux', should), (u'ROOT', eat)] 62 | >>> [(1, u'aux', should), (0, u'ROOT', eat)] 63 | 64 | +slide 65 | +h(2) Find named entities 66 | 67 | +code. 68 | >>> doc = nlp(u"Where's the cheapest dentist in New York?") 69 | >>> [(ent.label_, ent.text) for ent in doc] 70 | [(u'GPE', u'New York')] 71 | 72 | +slide 73 | +h(2) Set flags 74 | 75 | +code. 76 | >>> is_job = nlp.vocab.set_flag(lambda string: string in (u'doctor', u'lawyer', u'mechanic')) 77 | >>> doctor, nurse, potato = nlp(u'doctor nurse potato') 78 | >>> doctor.check_flag(is_job) 79 | True 80 | >>> potato.check_flag(is_job) 81 | False 82 | >>> nurse.check_flag(is_job) 83 | >>> jobs = nlp(u'doctor lawyer mechanic') 84 | >>> is_job = nlp.vocab.add_flag(lambda string: jobs.similarity(nlp.vocab[string]) > 0.5) 85 | >>> nurse.check_flag(is_job) 86 | True 87 | >>> potato.check_flag(is_job) 88 | False 89 | 90 | +slide 91 | +h(2) Match rules 92 | 93 | +list 94 | +item Neural networks best option for classification 95 | +item Not true that they need big data. Much better when you have only a few examples, too. 96 | +item Pre-training means network is "born knowing" 97 | 98 | 99 | +code. 100 | >>> from spacy.matcher import Matcher 101 | >>> matcher = Matcher(nlp.vocab) 102 | >>> matcher.add_pattern( 103 | 'X-for-job', 104 | [ 105 | {IS_SCHOOL: True}, 106 | {TAG: IN}, # to, for... 107 | {IS_JOB: True} 108 | ] 109 | ) 110 | 111 | +slide 112 | +h(2) Match rules (2) 113 | 114 | +code. 115 | >>> doc = nlp(u"What's the best course for carpentry?') 116 | >>> matches = matcher(doc) 117 | >>> matches 118 | >>> ent_id, label, start, end = matches 119 | >>> span = doc[start:end] 120 | >>> span 121 | course for carpentry 122 | >>> span.lefts 123 | >>> [u'the', u'best'] 124 | >>> span.merge() 125 | >>> [w.text for w in doc] 126 | [u"What", u"'s", u"the", "u'best', u'course for carpentry', u'?'] 127 | 128 | +slide 129 | +h(2) Power of pre-training: sense2vec demo 130 | 131 | 132 | +slide 133 | +h(2) Tips for getting started 134 | 135 | +list 136 | +item Use #[strong Keras] with #[stong Theano] 137 | +item TensorFlow is harder to install. 138 | +item Using AWS? Use the #[strong NVidia AMI]. Much easier. 139 | +item Otherwise, be sure to use #[strong Ubuntu 14.04]. 140 | +item For fast GPU training, you want #[strong CUDA + cuDNN + cnmem] 141 | +list 142 | +item Not available in package managers 😞 143 | +item Download and install, Manually. Like some sort of primitive savage. Wtf NVidia. 144 | 145 | +slide 146 | +h(2) spaCy and Keras 147 | 148 | +list 149 | +item #[strong Simple text classification for short texts:]#[br] 150 | | #[a.u-text-small(href="https://github.com/explosion/spaCy/blob/master/examples/deep_learning_keras.py") github.com/explosion/spaCy/blob/master/examples/deep_learning_keras.py] 151 | 152 | +list 153 | +item Set #[code trainable=False] on your vectors (important) 154 | +item Use #[code TimeDistributed(Dense())] to reduce dimensionality 155 | +item Use #[code Bidirectional(LSTM())] 156 | 157 | +list 158 | +item #[strong Example pairwise model:]#[br] 159 | | #[a.u-text-small(href="https://github.com/explosion/spaCy/tree/master/examples/keras_parikh_entailment") github.com/explosion/spaCy/tree/master/examples/keras_parikh_entailment] 160 | 161 | +list 162 | +item #[strong spaCy documentation]: #[a(href="https://spacy.io/docs") spacy.io/docs] 163 | +item #[strong Keras documentation]: #[a(href="https://keras.io") keras.io] 164 | 165 | +slide("outro", "zoom") 166 | +h(1) Have fun & good luck! 💫 167 | -------------------------------------------------------------------------------- /2016-11-21_spaCy-and-NLP-Innovation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-21_spaCy-and-NLP-Innovation.pdf -------------------------------------------------------------------------------- /2016-11-28_The-State-of-AI-2016.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2016-11-28_The-State-of-AI-2016.pdf -------------------------------------------------------------------------------- /2017-01-19_Teaching-AI-about-Human-Knowledge.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2017-01-19_Teaching-AI-about-Human-Knowledge.pdf -------------------------------------------------------------------------------- /2017-06-13_Why-Python-is-the-best-language-for-AI.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2017-06-13_Why-Python-is-the-best-language-for-AI.pdf -------------------------------------------------------------------------------- /2017-08-28_spaCy-101.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2017-08-28_spaCy-101.pdf -------------------------------------------------------------------------------- /2017-11-02_Practical-and-Effective-Neural-NER.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2017-11-02_Practical-and-Effective-Neural-NER.pdf -------------------------------------------------------------------------------- /2018-03-21_Supervised-Learning-is-Great.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-03-21_Supervised-Learning-is-Great.pdf -------------------------------------------------------------------------------- /2018-04-12_Embed-Encode-Attend-Predict.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-04-12_Embed-Encode-Attend-Predict.pdf -------------------------------------------------------------------------------- /2018-04-15_Multi-lingual-NLU-with-spaCy.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-04-15_Multi-lingual-NLU-with-spaCy.pdf -------------------------------------------------------------------------------- /2018-04_12_Rapid-NLP-Annotation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-04_12_Rapid-NLP-Annotation.pdf -------------------------------------------------------------------------------- /2018-05-05_Teaching-AI-about-Human-Knowledge.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-05-05_Teaching-AI-about-Human-Knowledge.pdf -------------------------------------------------------------------------------- /2018-07-07_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-07-07_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf -------------------------------------------------------------------------------- /2018-07-26_How-to-ingore-most-startup-advice.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-07-26_How-to-ingore-most-startup-advice.pdf -------------------------------------------------------------------------------- /2018-10-31_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-10-31_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf.pdf -------------------------------------------------------------------------------- /2018-10_31_Rapid-NLP-Annotation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-10_31_Rapid-NLP-Annotation.pdf -------------------------------------------------------------------------------- /2018-11-22_The-AI_Revolution-will-not-be-Monopolized.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/explosion/talks/733dd68926308667e2b5f35bc3a2c36ffa5fcead/2018-11-22_The-AI_Revolution-will-not-be-Monopolized.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Talks 4 | 5 | Ongoing collection of talks about spaCy and other NLP/Machine Learning/AI-related 6 | topics. Most slides are available as PDFs. 7 | 8 | ## Table of contents 9 | 10 | | Date | Topic | Event | Location | 11 | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- | ------------------- | 12 | | 2019-05-02 | Practical NLP transfer learning with spaCy and Prodigy Scale | [O'Reilly Strata](https://conferences.oreilly.com/strata/strata-eu) | London, UK | 13 | | 2019-04-13 | Practical NLP transfer learning with spaCy and Prodigy | [Women in Data Science](https://www.widsconference.org/) | Poznań, PL | 14 | | 2019-01-28 | Practical transfer learning for NLP with spaCy and Prodigy | [Applied Machine Learning Days](https://www.appliedmldays.org) | Lausanne, CH | 15 | | 2018-11-22 | [The AI Revolution will not be Monopolized](2018-11-22_The-AI_Revolution-will-not-be-Monopolized.pdf) | [Hack Talks](http://hacktalks.hackjunction.com/) | Helsinki, FI | 16 | | 2018-10-31 | [Building new NLP solutions with spaCy and Prodigy](2018-07-07_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf) | [Belgium NLP Meetup](https://www.meetup.com/nl-NL/Belgium-NLP-Meetup/events/254794655/) | Brussels, BE | 17 | | 2018-10-31 | [Rapid NLP Annotation Through Binary Decisions, Pattern Bootstrapping and Active Learning](2018-04_12_Rapid-NLP-Annotation.pdf) | [Belgium NLP Meetup](https://www.meetup.com/nl-NL/Belgium-NLP-Meetup/events/254794655/) | Brussels, BE | 18 | | 2018-07-26 | [Building new NLP solutions with spaCy and Prodigy](2018-07-07_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf) | [EuroPython](https://ep2018.europython.eu) | Edinburgh, UK | 19 | | 2018-07-26 | [How to Ignore Most Startup Advice and Build a Decent Software Business](2018-07-26_How-to-ingore-most-startup-advice.pdf) | [EuroPython](https://ep2018.europython.eu) | Edinburgh, UK | 20 | | 2018-07-14 | [Building new NLP solutions with spaCy and Prodigy](2018-07-07_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf) | Sydney NLP Mini Conference | Sydney, AUS | 21 | | 2018-07-07 | [Building new NLP solutions with spaCy and Prodigy](2018-07-07_Building-New-NLP-Solutions-with-spaCy-and-Prodigy.pdf) | [PyData Berlin](https://pydata.org/berlin2018/) | Berlin, DE | 22 | | 2018-05-28 | [Rapid NLP Annotation Through Binary Decisions, Pattern Bootstrapping and Active Learning](2018-04_12_Rapid-NLP-Annotation.pdf) | [Data Science Summit](http://datasciencesummit.ai/) | Tel Aviv, IL | 23 | | 2018-05-28 | [Embed, Encode, Attend, Predict: A four-step framework for understanding neural network approaches to Natural Language Understanding problems](2018-04-12_Embed-Encode-Attend-Predict.pdf) | [Data Science Summit](http://datasciencesummit.ai/) | Tel Aviv, IL | 24 | | 2018-05-05 | [Teaching AI about Human Knowledge](2018-05-05_Teaching-AI-about-Human-Knowledge.pdf) | [PyDays](https://www.pydays.at/) | Vienna, AT | 25 | | 2018-04-14 | [Rapid NLP Annotation Through Binary Decisions, Pattern Bootstrapping and Active Learning](2018-04_12_Rapid-NLP-Annotation.pdf) | [University of San Francisco](https://www.meetup.com/sfmachinelearning/events/249647003) | San Francisco, US | 26 | | 2018-04-14 | [Multi-Linguial Natural Language Understanding with spaCy](2018-04-15_Multi-lingual-NLU-with-spaCy.pdf) | [University of San Francisco](https://www.meetup.com/sfmachinelearning/events/249647003) | San Francisco, US | 27 | | 2018-04-12 | [Rapid NLP Annotation Through Binary Decisions, Pattern Bootstrapping and Active Learning](2018-04_12_Rapid-NLP-Annotation.pdf) | [Tom Tom Founders Festival](https://tomtomfest.com/machine-learning/) | Charlottesville, US | 28 | | 2018-04-12 | [Embed, Encode, Attend, Predict: A four-step framework for understanding neural network approaches to Natural Language Understanding problems](2018-04-12_Embed-Encode-Attend-Predict.pdf) | [Tom Tom Founders Festival](https://tomtomfest.com/machine-learning/) | Charlottesville, US | 29 | | 2018-03-21 | [Supervised Learning is Great — it's Data Collection That's Broken](2018-03-21_Supervised-Learning-is-Great.pdf) | [The Ground](http://www.theground.se) | Malmö, SE | 30 | | 2017-11-02 | [Practical and Effective Neural Entity Recognition](2017-11-02_Practical-and-Effective-Neural-NER.pdf) | [Zalando Research](https://research.zalando.com/) | Berlin, DE | 31 | | 2017-08-28 | [spaCy 101](2017-08-28_spaCy-101.pdf) | [Retriever](https://www.retriever.no/) | Oslo, NO | 32 | | 2017-06-13 | [Why Python is the best language for AI](2017-06-13_Why-Python-is-the-best-language-for-AI.pdf) | [PyCon](http://www.pycon.org.il/2017/) | Tel Aviv, IL | 33 | | 2017-01-19 | [Teaching AI about Human Knowledge](2017-01-19_Teaching-AI-about-Human-Knowledge.pdf) | [Founders](https://medium.com/the-founders-blog/how-ai-will-shape-the-future-of-work-9b2f51a35a8) | Copenhagen, DK | 34 | | 2016-11-28 | [The State of AI 2016](2016-11-28_The-State-of-AI-2016.pdf) | [AIAIAI!](https://www.facebook.com/events/1263237797030583/) | Oslo, NO | 35 | | 2016-11-21 | [spaCy and NLP Innovation](2016-11-21_spaCy-and-NLP-Innovation.pdf) | [LT-Accelerate](http://www.lt-accelerate.com/) | Brussels, BE | 36 | | 2016-11-19 | [Introduction to spaCy](2016-11-19_Introduction-to-spaCy) | [Bothack](http://bothack.berlin) | Berlin, DE | 37 | | 2016-05-21 | [Designing spaCy: Industrial-strength NLP](2016-05-21_Designing-spaCy) | [PyData](http://pydata.org) | Berlin, DE | 38 | 39 | ## Viewing the HTML slides 40 | 41 | HTML slides are implemented in [Jade (aka Pug)](https://www.jade-lang.org) with help of [reveal.js](https://github.com/hakimel/reveal.js). The site is built or served by [Harp](https://harpjs.com). To view the slides, simply install [Harp](https://harpjs.com), clone this repository and run the server from the new directory. Then navigate your browser to `http://localhost:9000`. 42 | 43 | ```bash 44 | sudo npm install --global harp 45 | git clone https://github.com/explosion/talks 46 | cd talks/ 47 | harp server 48 | ``` 49 | --------------------------------------------------------------------------------