정직하게 말하자면, 문제의 일부가 쉽게 문제가 될 수밖에없는 임시적인 언 어로 넘어갈 수 있기 때문에 문제가 더 중요하다고 생각합니다. 문장을 단어로 깨는 것은 어렵습니다. 예 :
단어는 종종 다른 단어를 포함합니다. 예를 들어 "they"에는 "hey"가 포함됩니다.하위 문자열 만 검색 할 수는 없습니다.
미국의 인쇄 규칙에 따라 emdash 주위에 공백을 넣지 마십시오. 그래서 정확하게 쓰여진 문장은 "헤이 - 어떻게 지내세요?"입니다. 공백으로 분리하거나 구두점을 제거 할 수 없습니다.
분음 기호는 종종 선택 사항입니다. 미국 영어의 경우조차도 소수의 출판사, 특히 뉴요커의 출판사가 기성복을 사용합니다. 움라우트처럼 보이지만 두 단어가 한 마디로 달리면 두 번째 모음을 표시합니다. coperate처럼. 그러나 일부 언어에서는 단어가 바뀝니다. 독일어의 움라우트는 발음 표이고 예를 들어. Apfel을 Äpfel과 단수로 구분합니다.
그렇다면 Apple을 단순한 API 수준 접근 방식으로 정확히 추가 하시겠습니까? 다른 옵션을 선택하는 모든 사람들은 어떻게해야합니까? 가장 적합한 방법을 구성하는 도구를 제공하는 것이 훨씬 현명합니다.
모든 말했다되는 것을 나는 당신이 설명하고 생각의 산뜻한 가장 컴팩트 한 형태라고 생각합니다 :
NSArray *inputSentences =
@[
@"hey how are you",
@"what is going on?",
@"whats up dude?",
@"do you want to get chipotle?"
];
NSArray *forbiddenWords =
@[@"you", @"hey"];
NSSet *forbiddenWordsSet = [NSSet setWithArray:forbiddenWords];
NSCharacterSet *nonLetterSet =
[[NSCharacterSet letterCharacterSet] invertedSet];
NSPredicate *predicate =
[NSPredicate
predicateWithBlock:
^BOOL(NSString *evaluatedObject, NSDictionary *bindings)
{
return ![forbiddenWordsSet intersectsSet:
[NSSet setWithArray:
[evaluatedObject
componentsSeparatedByCharactersInSet:nonLetterSet]]];
}];
NSLog(@"%@", [inputSentences filteredArrayUsingPredicate:predicate]);
당신이 nonLetterSet 대신 whitespaceCharacterSet
될 수도 있습니다하지만. 너 스스로 판사.
술어는 명시 적 루프 및 수동 누락없이 세트를 자동 필터링하는 데 사용됩니다. 교차 설정은 수동 내부 루프를 피하기 위해 사용됩니다. 약간의 단 정치 못한 비트는 예비 논리를 적용해야하므로 블록 술어를 사용해야합니다.
더하기 측면에서, 대부분의 코드가 설정되었습니다. 하나의 술어를 한 번 작성하여 어 @ 곳에 저장 한 다음 단일 행 호출로 코드의 임의의 h 열 또는 문자열 세트에 적용 할 수 있습니다.
다른 주석 작성자가 언급했듯이 많은 임시 개체가 생성됩니다.
매우 기본적인 "check for substrings"기능과 더 멋진 구문을 원하십니까? 그래서 "그들은 바 이유에있다"라고 판단 될 것입니다. 또는 공백 문자를 구분하고 영숫자 만 사용하면 행복할까요? 아니면 NSLinguisticTagger의 모든 기능을 통해 비싸지 만 가능한 정확한 결과를 얻고 싶습니까? – Tommy