Upload
stanfy
View
1.216
Download
0
Embed Size (px)
Citation preview
BUILDING PROFANITY FILTERSclbuttic sh!t
Framework Days. IT Saturday. 5.09.2015
INTERNET CENSORSHIP
childrenreligionsexual
https://en.wikipedia.org/wiki/Censorship
Framework Days. IT Saturday. 5.09.2015
WHY FILTERING GOOD
ETHNICITY
PROTECTS
CHILDREN
RELIGIONSEXUAL ORIENTATION
Framework Days. IT Saturday. 5.09.2015
WHY FILTERING BADlack of trust to your users
their willing to break rules
→
Framework Days. IT Saturday. 5.09.2015
Framework Days. IT Saturday. 5.09.2015
COCK
LET’S BUILD FILTER!
Framework Days. IT Saturday. 5.09.2015
filter =list of dirty words +
list of replacements +filter rule
– 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
FILTER RULES
Framework Days. IT Saturday. 5.09.2015
1. search by entry
psss…
RANGE OF WORD
Framework Days. IT Saturday. 5.09.2015
NSRange range = [text rangeOfString:badWord options:NSCaseInsensitiveSearch];
BOOL hasDirtyWord = [text localizedCaseInsensitiveContainsString:badWord];
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; }
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.
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.
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.
FALSE POSITIVES
Framework Days. IT Saturday. 5.09.2015
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
Framework Days. IT Saturday. 5.09.2015
assart
assault
association
assurance
‘ASS’ WORDSharassment
hassel
hourglass
impassable
pass
passion
piassaba
preassign1250 words found
http://www.morewords.com/contains/ass/
Framework Days. IT Saturday. 5.09.2015
ass → butt
REPLACEMENT RULES…
Framework Days. IT Saturday. 5.09.2015
classic → clbuttic
…FAILS
Framework Days. IT Saturday. 5.09.2015
Framework Days. IT Saturday. 5.09.2015
Constitution → Consbreastution
AND FAILS AGAIN…
medieval → medireview
Tyson Gay → Tyson Homosexual
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
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];
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.
SPACE!
Framework Days. IT Saturday. 5.09.2015
AND OTHER PUNCTUATION
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
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
FILTER RULES
Framework Days. IT Saturday. 5.09.2015
1. search by entry
2. search whole word
3. handle punctuation
don’t tell anyone…
1337 59341<
Framework Days. IT Saturday. 5.09.2015
L33T SPEAK
Framework Days. IT Saturday. 5.09.2015
HOW MANY DIFFERENTSPELLINGS HAS ONE WORD?
BITCH
Framework Days. IT Saturday. 5.09.2015
B1TCH
Framework Days. IT Saturday. 5.09.2015
I → 1
BITCH
B!TCH
Framework Days. IT Saturday. 5.09.2015
I → !
BITCH B1TCH
BI+CH
Framework Days. IT Saturday. 5.09.2015
T → +
BITCH B1TCH B!TCH
I3ITCH
Framework Days. IT Saturday. 5.09.2015
B → I3
BITCH B1TCH B!TCH BI+CH
BITCH B!TCH B1TCH 8ITCH ßITCH
13ITCH L3ITCH BI7CH BI+CH BI†CH
BIT[H BIT¢H BIT<H BITC# BITC:
B1T¢H 8!†C# 8ITC/-/ 817[# (3][+(:
Framework Days. IT Saturday. 5.09.2015
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…
SCUNTHORPE PROBLEM
Framework Days. IT Saturday. 5.09.2015
https://en.wikipedia.org/wiki/Scunthorpe_problem
NICE TITSIn 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
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!
TEXT FILTERING ON IOS
Framework Days. IT Saturday. 5.09.2015
words dictionary (boobs, b00bs,
b00b5)
whole word scan NSScanner, NSSet
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
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+
HOW FAST IS IT?
Framework Days. IT Saturday. 5.09.2015
time,
sec
onds
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
LIVE FILTERING
Framework Days. IT Saturday. 5.09.2015
use RAC and run filter every time user inputs character
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
POST-MODERATION
Framework Days. IT Saturday. 5.09.2015
alive moderatorssolid community
flag abuse
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
LAST SLIDE
@vixentael
Framework Days. IT Saturday. 5.09.2015
iOS developer at Stanfy
THANK YOU FOR WATCHING!
Framework Days. IT Saturday. 5.09.2015