我試圖寫一個方法:Objective-C中找到最常用的詞在一個NSString
- (NSDictionary *)wordFrequencyFromString:(NSString *)string {}
在字典返回將有字以及多久,他們提供的字符串中使用。不幸的是,我似乎無法找到一種方法來遍歷字符串中的單詞來分析每一個字符 - 只有每個字符看起來有點不必要。有什麼建議麼?
我試圖寫一個方法:Objective-C中找到最常用的詞在一個NSString
- (NSDictionary *)wordFrequencyFromString:(NSString *)string {}
在字典返回將有字以及多久,他們提供的字符串中使用。不幸的是,我似乎無法找到一種方法來遍歷字符串中的單詞來分析每一個字符 - 只有每個字符看起來有點不必要。有什麼建議麼?
的NSString具有-enumerateSubstringsInRange:
方法,它允許直接枚舉所有的話,讓標準的API做一切必要的東西來定義字邊界等:
[s enumerateSubstringsInRange:NSMakeRange(0, [s length])
options:NSStringEnumerationByWords
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
NSLog(@"%@", substring);
}];
在枚舉塊,你可以使用NSDictionary的文字作爲鍵和NSNumber作爲它們的計數,或使用NSCountedSet爲計數提供所需的功能。
首先使用-[NSString componentsSeparatedByCharactersInSet:]
將字符串拆分爲單詞數組。 (使用[[NSCharacterSet letterCharacterSet] invertedSet]
作爲參數來分割所有非字母字符。)
然後,只需使用數組中的單詞(元素)作爲鍵,並使用NSNumber作爲字典的值。這簡化了比較字符串的工作 - NSDictionary將爲你做這件事。 – FeifanZ
您可以使用componentsSeparatedByCharactersInSet:
拆分字符串,並且NSCountedSet
會爲您計算單詞。
1)分割字符串到使用標點符號,空格和換行字符的組合字集:
NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];
[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSArray *words = [myString componentsSeparatedByCharactersInSet:separators];
2)計數的單詞的出現(如果你想忽略大小寫,你可以分裂串入組件)之前做NSString *myString = [originalString lowercaseString];
:
NSCountedSet *frequencies = [NSCountedSet setWithArray:words];
NSUInteger aWordCount = [frequencies countForObject:@"word"]);
如果你願意改變你的方法簽名,你可以只返回計數集。
我用下面的方法從NSString中獲取最常見的單詞。
-(void)countMostFrequentWordInSpeech:(NSString*)speechString
{
NSString *string = speechString;
NSCountedSet *countedSet = [NSCountedSet new];
[string enumerateSubstringsInRange:NSMakeRange(0, [string length])
options:NSStringEnumerationByWords | NSStringEnumerationLocalized
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){
[countedSet addObject:substring];
}];
// NSLog(@"%@", countedSet);
//Sort CountedSet & get most frequent common word at 0th index of resultant array
NSMutableArray *dictArray = [NSMutableArray array];
[countedSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
[dictArray addObject:@{@"object": obj,
@"count": @([countedSet countForObject:obj])}];
}];
NSArray *sortedArrayOfWord= [dictArray sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"count" ascending:NO]]];
if (sortedArrayOfWord.count>0)
{
self.mostFrequentWordLabel.text=[NSString stringWithFormat:@"Frequent Word: %@", [[sortedArrayOfWord[0] valueForKey:@"object"] capitalizedString]];
}
}
「speechString」是我的字符串,我必須從中獲得最常用/最常用的單詞。數組「0」索引的對象「sortedArrayOfWord」將是最常用的單詞。
請記住,這可能比您猜測的要多一點工作,如果您想讓它變得非常簡單而又非常簡單。連字符是否標記了單詞的結尾? Emdashes?那麼日本人呢? – Chuck