From 2ccee07c5dbf59e67695a2da4a48a46784b4607b Mon Sep 17 00:00:00 2001 From: Chris Li Date: Sat, 2 Jul 2016 15:20:35 -0400 Subject: [PATCH] SearchResult class refactor & always fetch article path in title search --- Kiwix-iOS/Controller/SearchResultTBVC.swift | 2 +- .../Setting/SearchTuneController.swift | 4 +-- Kiwix-iOS/Info.plist | 2 +- Kiwix/ZimMultiReader.swift | 35 ++++++++++--------- Kiwix/libkiwix/ZimReader.mm | 8 ++--- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/Kiwix-iOS/Controller/SearchResultTBVC.swift b/Kiwix-iOS/Controller/SearchResultTBVC.swift index 21b0cbed..40eb01ef 100644 --- a/Kiwix-iOS/Controller/SearchResultTBVC.swift +++ b/Kiwix-iOS/Controller/SearchResultTBVC.swift @@ -92,7 +92,7 @@ class SearchResultTBVC: UIViewController, UITableViewDataSource, UITableViewDele func configureArticleCell(cell: ArticleCell, result: SearchResult) { guard let book = Book.fetch(result.bookID, context: UIApplication.appDelegate.managedObjectContext) else {return} - cell.titleLabel.text = result.title + "(\(result.distance), \(result.percent ?? -1), \(result.score))" + cell.titleLabel.text = result.title + "(\(result.distance), \(result.probability ?? -1), \(result.score))" cell.hasPicIndicator.backgroundColor = book.hasPic ? UIColor.havePicTintColor : UIColor.lightGrayColor() cell.favIcon.image = book.favIcon != nil ? UIImage(data: book.favIcon!) : nil } diff --git a/Kiwix-iOS/Controller/Setting/SearchTuneController.swift b/Kiwix-iOS/Controller/Setting/SearchTuneController.swift index 954b3eef..cd66ed5e 100644 --- a/Kiwix-iOS/Controller/Setting/SearchTuneController.swift +++ b/Kiwix-iOS/Controller/Setting/SearchTuneController.swift @@ -98,9 +98,9 @@ class SearchTuneController: UIViewController, UITableViewDataSource { } class WeightFactor { - class func calculate(prob: Double) -> Double? { + class func calculate(prob: Double) -> Double { let e = 2.718281828459 - guard let m = Defaults[.m], let n = Defaults[.n] else {return nil} + guard let m = Defaults[.m], let n = Defaults[.n] else {return 1} return log(n - m * prob) / log(e) } } diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index 80c02019..3d9af95a 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -36,7 +36,7 @@ CFBundleSignature ???? CFBundleVersion - 1372 + 1377 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix/ZimMultiReader.swift b/Kiwix/ZimMultiReader.swift index e99e38ea..ac030eed 100644 --- a/Kiwix/ZimMultiReader.swift +++ b/Kiwix/ZimMultiReader.swift @@ -161,42 +161,45 @@ extension ZimReader { } class SearchResult: CustomStringConvertible { - let bookID: String let title: String - let path: String? + let path: String + let bookID: String let snippet: String? - let percent: Double? // range: 0-100 + let probability: Double? // range: 0.0 - 1.0 let distance: Int // Levenshtein distance, non negative integer let score: Double init?(rawResult: [String: AnyObject]) { let title = (rawResult["title"] as? String) ?? "" - self.bookID = (rawResult["bookID"] as? String) ?? "" - self.title = title - self.path = rawResult["path"] as? String - self.snippet = rawResult["snippet"] as? String + let path = (rawResult["path"] as? String) ?? "" + let bookID = (rawResult["bookID"] as? String) ?? "" + let snippet = rawResult["snippet"] as? String - let percent = (rawResult["percent"] as? NSNumber)?.doubleValue let distance = (rawResult["distance"]as? NSNumber)?.integerValue ?? title.characters.count - let score: Double = { - if let percent = percent { - return (WeightFactor.calculate(percent / 100) ?? 1) * Double(distance) + let probability: Double? = { + if let probability = (rawResult["probability"] as? NSNumber)?.doubleValue { + return probability / 100.0 } else { - return Double(distance) + return nil } }() - self.percent = percent + let score = WeightFactor.calculate(probability ?? 1) * Double(distance) + + self.title = title + self.path = path + self.bookID = bookID + self.snippet = snippet + self.probability = probability self.distance = distance self.score = score - if bookID == "" {return nil} - if title == "" {return nil} + if title == "" || path == "" || bookID == "" {return nil} } var description: String { var parts = [bookID, title] - if let percent = percent {parts.append("\(percent)%")} + if let probability = probability {parts.append("\(probability)%")} parts.append("dist: \(distance)") return parts.joinWithSeparator(", ") } diff --git a/Kiwix/libkiwix/ZimReader.mm b/Kiwix/libkiwix/ZimReader.mm index 6c3cb916..b060c7c4 100755 --- a/Kiwix/libkiwix/ZimReader.mm +++ b/Kiwix/libkiwix/ZimReader.mm @@ -95,12 +95,12 @@ NSString *snippet = [NSString stringWithUTF8String:doc.get_value(1).c_str()]; NSNumber *distance = [NSNumber numberWithInteger:[self levenshteinDistance:searchTerm andString:title.lowercaseString]]; - NSDictionary *result = @{@"percent": percent, + NSDictionary *result = @{@"title": title, @"path": path, - @"title": title, - @"snippet": snippet, @"bookID": bookID, - @"distance": distance}; + @"probability": percent, + @"distance": distance, + @"snippet": snippet}; [results addObject:result]; } return results;