Skip to content

Instantly share code, notes, and snippets.

@RemyPorter
Last active August 29, 2015 14:01
Show Gist options
  • Save RemyPorter/4b901c386d27c546064c to your computer and use it in GitHub Desktop.
Save RemyPorter/4b901c386d27c546064c to your computer and use it in GitHub Desktop.
#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