Slide 1

Slide 1 text

BUILDING PROFANITY FILTERS clbuttic sh!t

Slide 2

Slide 2 text

Framework Days. IT Saturday. 5.09.2015 INTERNET CENSORSHIP children religion sexual https://en.wikipedia.org/wiki/Censorship

Slide 3

Slide 3 text

Framework Days. IT Saturday. 5.09.2015 WHY FILTERING GOOD ETHNICITY PROTECTS CHILDREN RELIGION SEXUAL ORIENTATION

Slide 4

Slide 4 text

Framework Days. IT Saturday. 5.09.2015 WHY FILTERING BAD lack of trust to your users their willing to break rules →

Slide 5

Slide 5 text

Framework Days. IT Saturday. 5.09.2015

Slide 6

Slide 6 text

Framework Days. IT Saturday. 5.09.2015 COCK

Slide 7

Slide 7 text

LET’S BUILD FILTER! Framework Days. IT Saturday. 5.09.2015 filter = list of dirty words + list of replacements + filter rule

Slide 8

Slide 8 text

– George Carlin, 1972 Shit, piss, fuck, cunt, cocksucker, motherfucker, and tits. “Seven Words You Can Never Say on Television” Framework Days. IT Saturday. 5.09.2015

Slide 9

Slide 9 text

FILTER RULES Framework Days. IT Saturday. 5.09.2015 1. search by entry psss…

Slide 10

Slide 10 text

RANGE OF WORD Framework Days. IT Saturday. 5.09.2015 NSRange range = [text rangeOfString:badWord options:NSCaseInsensitiveSearch]; BOOL hasDirtyWord = [text localizedCaseInsensitiveContainsString:badWord];

Slide 11

Slide 11 text

RANGE OF WORD Framework Days. IT Saturday. 5.09.2015 - (NSArray * )rangesOfBadWordsWithSpaceInString:(NSString * )text { __block NSMutableArray * result = [NSMutableArray array]; [self.listOfBadWordsWithSpace enumerateObjectsUsingBlock:^(NSString * badWord, NSUInteger idx, BOOL * stop) { NSRange range = [text rangeOfString:badWord options:NSCaseInsensitiveSearch]; while (range.location != NSNotFound) { [result addObject:[NSValue valueWithRange:range]]; NSRange nextRange = NSMakeRange(range.location + 1, [text length] - range.location - 1); range = [text rangeOfString:badWord options:NSCaseInsensitiveSearch range:nextRange]; } }]; return result; }

Slide 12

Slide 12 text

SEARCH BY ENTRY Framework Days. IT Saturday. 5.09.2015 Get your ass down here! The grass around the creek was new, giving it a velvety look. Dusty, his heartless assassin, had found his mate.

Slide 13

Slide 13 text

SEARCH BY ENTRY Framework Days. IT Saturday. 5.09.2015 Get your ass down here! The grass around the creek was new, giving it a velvety look. Dusty, his heartless assassin, had found his mate.

Slide 14

Slide 14 text

SEARCH BY ENTRY Framework Days. IT Saturday. 5.09.2015 Get your ass down here! The grass around the creek was new, giving it a velvety look. Dusty, his heartless assassin, had found his mate.

Slide 15

Slide 15 text

FALSE POSITIVES Framework Days. IT Saturday. 5.09.2015

Slide 16

Slide 16 text

Framework Days. IT Saturday. 5.09.2015 Get your ass down here! The grass around the creek was new, giving it a velvety look. Dusty, his heartless assassin, had found his mate. FALSE POSITIVES

Slide 17

Slide 17 text

Framework Days. IT Saturday. 5.09.2015 assart assault association assurance ‘ASS’ WORDS harassment hassel hourglass impassable pass passion piassaba preassign 1250 words found http://www.morewords.com/contains/ass/

Slide 18

Slide 18 text

Framework Days. IT Saturday. 5.09.2015 ass → butt REPLACEMENT RULES…

Slide 19

Slide 19 text

Framework Days. IT Saturday. 5.09.2015 classic → clbuttic …FAILS

Slide 20

Slide 20 text

Framework Days. IT Saturday. 5.09.2015

Slide 21

Slide 21 text

Framework Days. IT Saturday. 5.09.2015 Constitution → Consbreastution AND FAILS AGAIN… medieval → medireview Tyson Gay → Tyson Homosexual

Slide 22

Slide 22 text

FILTER RULES Framework Days. IT Saturday. 5.09.2015 1. search by entry 2. search whole word don’t u know me?

Slide 23

Slide 23 text

SEARCH WHOLE WORD Framework Days. IT Saturday. 5.09.2015 NSString * scanned; if ([scanner scanCharactersFromSet:wordCharacters intoString:&scanned]) { if ([wordSet containsObject:[scanned lowercaseString]]) { NSRange range = NSMakeRange(scanner.scanLocation - scanned.length, scanned.length); [result addObject:[NSValue valueWithRange:range]]; } } NSSet * badWordsSet = [NSMutableSet setWithArray:self.listOfBadWords]; NSScanner * scanner = [NSScanner scannerWithString:text]; NSCharacterSet * wordCharacters = [NSCharacterSet alphanumericCharacterSet];

Slide 24

Slide 24 text

SEARCH WHOLE WORD Framework Days. IT Saturday. 5.09.2015 Get your ass down here! The grass around the creek was new, giving it a velvety look. Dusty, his heartless assassin, had found his mate.

Slide 25

Slide 25 text

SPACE! Framework Days. IT Saturday. 5.09.2015 AND OTHER PUNCTUATION

Slide 26

Slide 26 text

Framework Days. IT Saturday. 5.09.2015 Get your a s s down here! You'd probably fire my a.s.s the first day on the job. You've covered my a_s_s every time I screwed up. PUNCTUATION

Slide 27

Slide 27 text

Framework Days. IT Saturday. 5.09.2015 Get your a s s down here! You'd probably fire my a.s.s the first day on the job. You've covered my a_s_s every time I screwed up. PUNCTUATION

Slide 28

Slide 28 text

FILTER RULES Framework Days. IT Saturday. 5.09.2015 1. search by entry 2. search whole word 3. handle punctuation don’t tell anyone…

Slide 29

Slide 29 text

1337 59341< Framework Days. IT Saturday. 5.09.2015

Slide 30

Slide 30 text

L33T SPEAK Framework Days. IT Saturday. 5.09.2015 HOW MANY DIFFERENT SPELLINGS HAS ONE WORD?

Slide 31

Slide 31 text

BITCH Framework Days. IT Saturday. 5.09.2015

Slide 32

Slide 32 text

B1TCH Framework Days. IT Saturday. 5.09.2015 I → 1 BITCH

Slide 33

Slide 33 text

B!TCH Framework Days. IT Saturday. 5.09.2015 I → ! BITCH B1TCH

Slide 34

Slide 34 text

BI+CH Framework Days. IT Saturday. 5.09.2015 T → + BITCH B1TCH B!TCH

Slide 35

Slide 35 text

I3ITCH Framework Days. IT Saturday. 5.09.2015 B → I3 BITCH B1TCH B!TCH BI+CH

Slide 36

Slide 36 text

BITCH B!TCH B1TCH 8ITCH ßITCH 13ITCH L3ITCH BI7CH BI+CH BI†CH BIT[H BIT¢H BIT

Slide 37

Slide 37 text

FILTER RULES Framework Days. IT Saturday. 5.09.2015 1. search by entry 2. search whole word 3. handle punctuation 4. handle l33t speak my name is…

Slide 38

Slide 38 text

SCUNTHORPE PROBLEM Framework Days. IT Saturday. 5.09.2015 https://en.wikipedia.org/wiki/Scunthorpe_problem

Slide 39

Slide 39 text

NICE TITS In 2007, the Royal Society for the Protection of Birds blocked ornithological terms such as cock (male bird) and tit, shag and booby from its discussion forums Framework Days. IT Saturday. 5.09.2015

Slide 40

Slide 40 text

FILTER RULES Framework Days. IT Saturday. 5.09.2015 1. search by entry 2. search whole word 3. handle punctuation 4. handle l33t speak 5. remember about exceptions blue- footed booby!

Slide 41

Slide 41 text

TEXT FILTERING ON IOS Framework Days. IT Saturday. 5.09.2015 words dictionary (boobs, b00bs, b00b5) whole word scan NSScanner, NSSet

Slide 42

Slide 42 text

TEXT FILTERING ON IOS Framework Days. IT Saturday. 5.09.2015 phrases dictionary (b o o b s, b.o.o.b.s, b!o!o!bs) substring scan rangeOfString

Slide 43

Slide 43 text

TEXT FILTERING ON IOS Framework Days. IT Saturday. 5.09.2015 words dictionary (boobs, b00bs, b00b5) whole word scan NSScanner, NSSet phrases dictionary (b o o b s, b.o.o.b.s, bo!obs) substring scan rangeOfString +

Slide 44

Slide 44 text

HOW FAST IS IT? Framework Days. IT Saturday. 5.09.2015 time, seconds 0 0,1 0,2 0,3 0,4 user text, characters count 1000 5000 10000 20000 range scanner both dirty words dictionary contains 455 words

Slide 45

Slide 45 text

LIVE FILTERING Framework Days. IT Saturday. 5.09.2015 use RAC and run filter every time user inputs character

Slide 46

Slide 46 text

IMPROVE FILTERING • Keep dictionary up to date • Whitelist • Levenshtein distance • Soundex functions (where a word sounds like another) • Naive bayesian inference filtering of phrases/terms Framework Days. IT Saturday. 5.09.2015

Slide 47

Slide 47 text

POST-MODERATION Framework Days. IT Saturday. 5.09.2015 alive moderators solid community flag abuse

Slide 48

Slide 48 text

DIRTY WORDS • list of dirty words in different languages https://github.com/shutterstock/List-of-Dirty- Naughty-Obscene-and-Otherwise-Bad-Words • list of dirty words i’ve used https://gist.github.com/vixentael/ 5ce4168e3e94d9686405 Framework Days. IT Saturday. 5.09.2015

Slide 49

Slide 49 text

LAST SLIDE @vixentael Framework Days. IT Saturday. 5.09.2015 iOS developer at Stanfy

Slide 50

Slide 50 text

THANK YOU FOR WATCHING! Framework Days. IT Saturday. 5.09.2015