我正在开发一个iOS聊天应用程序,在这里我有一个场景,我必须识别用户输入的文本包含我的提交按钮操作上的任何滥用词。我有一个很大的滥用词列表,以便识别。
我使用下面的代码来识别滥用的单词,但我在这里面临一个问题 例如。我的滥用词汇列表包含“地狱”。如果我在文本字段中输入“Hello”,则显示为滥用单词,因为Hello包含地狱。
这是我的代码
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");
}
答案 0 :(得分:1)
将每条消息分成一个单词数组,然后循环遍历每个单词。
但理想情况下,您应该研究正则表达式(正则表达式)。 Cocoa通过使用NSRegularExpression支持正则表达式。
答案 1 :(得分:0)
你可以修改这个
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound)
以下内容:
if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound && stringToSearchWithing.length == obj.length)
另一种方法可能是用空格或其他分隔符分割文本,然后检查单词数组是否包含这些单词。
答案 2 :(得分:0)
最终我用下面的代码解决了我的问题。
+(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;
}