如何识别 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;
}