如何识别 UITextField 中的冒犯性词语?
How to identify offensive words in UITextField?
我正在开发一个 iOS 聊天应用程序,这里我有一个场景,我必须在我的提交按钮上识别用户输入的文本是否包含任何滥用词 action.I 有一大堆滥用词识别。
我已经使用下面的代码来识别滥用词,但我在这里遇到了问题
例如。我的滥用词列表 Array 包含“Hell”。如果我在文本字段中输入“Hello”,它会显示为滥用词,因为 Hello 包含 Hell。
这是我的代码
NSArray *arrayOfStrings = [[rateQuery findObjects] mutableCopy];
arrayOfStrings=[arrayOfStrings valueForKey:@"Words"];//List of Abusing words
NSString *stringToSearchWithin = nameFld.text;//user entered text
__block NSString *result = nil;
[arrayOfStrings indexOfObjectWithOptions:NSEnumerationConcurrent
passingTest:^(NSString *obj, NSUInteger idx, BOOL *stop)
{
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound)
{
result = obj;
*stop = YES;
//return YES;
}
return NO;
}];
if (!result){
NSLog(@"The string does not contain any of the strings from the arrayOfStrings");
}
else
{
NSLog(@"The string contains Abusing words");
}
你可以修改这个
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound)
以下内容:
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound && stringToSearchWithing.length == obj.length)
另一种方法是用空格或其他分隔符拆分文本,然后检查这些词是否包含在您的词数组中。
将每条消息分成一个单词数组,然后循环遍历每个单词。
不过,理想情况下,您应该研究一下正则表达式 (regex)。 Cocoa 通过使用 NSRegularExpression 支持正则表达式。
最终我用下面的代码解决了我的问题。
+(BOOL)profaneWordsFilterInText:(NSString *)inText
{
NSArray * listOfProfaneWords = [[self wordSet] allObjects];
NSError *error = NULL;
NSString *profaneWord ;
for (profaneWord in listOfProfaneWords)
{
NSString *as=[NSString stringWithFormat:@"\b%@\b", profaneWord ];
NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:as options:NSRegularExpressionCaseInsensitive error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:inText options:0 range:NSMakeRange(0, [inText length])];
if (numberOfMatches > 0)
{
return YES;
}
}
return NO;
}
我正在开发一个 iOS 聊天应用程序,这里我有一个场景,我必须在我的提交按钮上识别用户输入的文本是否包含任何滥用词 action.I 有一大堆滥用词识别。
我已经使用下面的代码来识别滥用词,但我在这里遇到了问题 例如。我的滥用词列表 Array 包含“Hell”。如果我在文本字段中输入“Hello”,它会显示为滥用词,因为 Hello 包含 Hell。
这是我的代码
NSArray *arrayOfStrings = [[rateQuery findObjects] mutableCopy];
arrayOfStrings=[arrayOfStrings valueForKey:@"Words"];//List of Abusing words
NSString *stringToSearchWithin = nameFld.text;//user entered text
__block NSString *result = nil;
[arrayOfStrings indexOfObjectWithOptions:NSEnumerationConcurrent
passingTest:^(NSString *obj, NSUInteger idx, BOOL *stop)
{
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound)
{
result = obj;
*stop = YES;
//return YES;
}
return NO;
}];
if (!result){
NSLog(@"The string does not contain any of the strings from the arrayOfStrings");
}
else
{
NSLog(@"The string contains Abusing words");
}
你可以修改这个
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound)
以下内容:
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound && stringToSearchWithing.length == obj.length)
另一种方法是用空格或其他分隔符拆分文本,然后检查这些词是否包含在您的词数组中。
将每条消息分成一个单词数组,然后循环遍历每个单词。
不过,理想情况下,您应该研究一下正则表达式 (regex)。 Cocoa 通过使用 NSRegularExpression 支持正则表达式。
最终我用下面的代码解决了我的问题。
+(BOOL)profaneWordsFilterInText:(NSString *)inText
{
NSArray * listOfProfaneWords = [[self wordSet] allObjects];
NSError *error = NULL;
NSString *profaneWord ;
for (profaneWord in listOfProfaneWords)
{
NSString *as=[NSString stringWithFormat:@"\b%@\b", profaneWord ];
NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:as options:NSRegularExpressionCaseInsensitive error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:inText options:0 range:NSMakeRange(0, [inText length])];
if (numberOfMatches > 0)
{
return YES;
}
}
return NO;
}