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?
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
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