Last active
August 29, 2015 14:01
-
-
Save RemyPorter/4b901c386d27c546064c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Foundation/Foundation.h> | |
@interface TextProcessor : NSObject { | |
NSLinguisticTagger* tagger; | |
} | |
- (id) initWithLanguage:(NSString*) language; | |
- (void) setString:(NSMutableString*) str; | |
- (NSRange) expandToSentenceBreak:(NSRange) original; | |
- (void) stringEditedInRange:(NSRange) range changeInLength:(NSInteger) delta; | |
- (void)enumerateTagsInRange:(NSRange)range scheme:(NSString *)tagScheme options:(NSLinguisticTaggerOptions)opts usingBlock:(void (^)(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop))block; | |
- (NSArray*)listTagsInRange:(NSRange) range scheme:(NSString *) tagScheme options: (NSLinguisticTaggerOptions) opts; | |
- (NSSet*)sentencesInRange:(NSRange) range; | |
@end | |
@implementation TextProcessor | |
- (id) initWithLanguage:(NSString *)language { | |
self = [super init]; | |
if (self != NULL) { | |
NSArray* schemes = [NSLinguisticTagger availableTagSchemesForLanguage:language]; | |
tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:schemes options:0]; | |
} | |
return self; | |
} | |
- (void) setString:(NSMutableString*) str { | |
[tagger setString:str]; | |
} | |
- (NSRange) expandToSentenceBreak:(NSRange)original { | |
return [tagger sentenceRangeForRange:original]; | |
} | |
- (void) stringEditedInRange:(NSRange)range changeInLength:(NSInteger)delta { | |
[tagger stringEditedInRange:range changeInLength:delta]; | |
} | |
- (void)enumerateTagsInRange:(NSRange)range scheme:(NSString *)tagScheme options:(NSLinguisticTaggerOptions)opts usingBlock:(void (^)(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop))block { | |
[tagger enumerateTagsInRange:range scheme:tagScheme options:opts usingBlock:block]; | |
} | |
- (NSArray*)listTagsInRange:(NSRange) range scheme:(NSString *) tagScheme options: (NSLinguisticTaggerOptions) opts { | |
NSMutableArray* result = [[NSMutableArray alloc] init]; | |
[self enumerateTagsInRange:range scheme:tagScheme options:opts usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { | |
[result addObject:tag]; | |
}]; | |
return result; | |
} | |
- (NSSet*)sentencesInRange:(NSRange) range { | |
NSMutableSet* result = [[NSMutableSet alloc]init]; | |
[self enumerateTagsInRange:range scheme:NSLinguisticTagSchemeLexicalClass options:nil usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { | |
[result addObject:[NSValue valueWithRange:sentenceRange]]; | |
}]; | |
return result; | |
} | |
@end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment