Search code examples
iosobjective-cswiftios8custom-keyboard

iOS Custom Keyboard, Suggestions from txt file


I'm making a custom keyboard for lawyers, and trying to load law related words in suggestion/prediction bar on top the keyboard based on what user types. Just like in stock keyboard. I have searched around but did not find any concrete answer.
I want to display suggestions of law related terms that I have in a txt file, all words are sorted alphabetically.

DEMO

Here is what I have tried: UILexicon

let myLexicon = NSMutableDictionary()

self.requestSupplementaryLexiconWithCompletion { (theLexicon: UILexicon!) -> Void in
    let lexiconEntries = theLexicon.entries          
    // Completion handler
    for item in lexiconEntries {
         self.myLexicon.setObject(item.documentText, forKey: item.userInput)
    }
}

This code just gives 23 nil objects.

UITextChecker This is an iOS class that is designed to spot spelling errors, which makes it perfect for knowing if a given word is real or not. This is seems to be mainly for autocorrection, not for suggestion. Correct me if I'm wrong please.

I cannot somehow make sense out of these two classes.

How do I tell custom keyboard, "Hey if user enters "V" show the top 3 words that start from V, then if user enter a, fill the suggestion bar with words that start with "Va" and so on.

EDIT:
Looks like someone ran into same problem. Here is a quote how they solved it, I will update with code once I finish figuring this out myself.

However, this was far from the truth - in fact, Apple do not allow access to their dictionary full stop, only offering a UILexicon class instead as stated in their docs:

Make use of this class, along with a lexicon of your own design, to provide suggestions and autocorrections as users are entering text.

As it turns out, the UILexicon class only really contains contact names along with any shortcuts (like the default On My Way!) defined on the device. So before writing the logic for a keyboard, you first have to implement your own autocorrect library.

We browsed through a few external projects to see if we could include them in the keyboard - most notably Hunspell, which is used by OpenOffice, and Presage, an intelligent predictive text library.

I spent a long time integrating the C++ libraries with the code, but in the end, in order to keep complexity down, we opted to use a combination of UITextChecker (which provides some basic corrections) and our own custom dictionary, containing a few commonly mispelled words.

Link to the Article

Thanks!


Solution

  • You have to implement your own autocorrection system. UILexicon will only give you shortcuts the user has set up, words that they have added to the iOS Dictionary, and names of contacts. It has no awareness of any words that you yourself provide, whether in a txt file or in any other form.

    If you want to use the TOMSSuggestionBar, it appears from the sample code that the onus is on you to convert your txt file into a core data model, and indicate to the suggestion bar how it is to interpret the contents of that model. You may also want to implement the data source protocol to get more fine grained control over the suggestions.

    Autocorrection and next word prediction are not solved problems; I suggest you do your own research and find the solution that is best suited to your goals.