0

我正在尝试通过使用 UITextChecker 进行拼写检查来检查某些内容是否为有效单词。这是我的检查方法:

func isReal(word: String) -> Bool {
    let checker = UITextChecker()
    let range = NSMakeRange(0, word.utf16.count)
    let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en_US")
    return misspelledRange.location == NSNotFound
}

这是返回这样的东西拼写正确/是有效的词:

  • aabjjf
  • aabolt
  • aabqtz
  • aaeupp
  • aafoxm
  • aafwkk

出了什么问题?我怎样才能解决这个问题?

编辑:这似乎是另一个问题的重复,但另一个问题实际上并没有答案如何解决这个问题,它只是确定了问题。我只是想了一下,想出了一个可能的解决方案,似乎可以通过使用 UITextChecker 猜测方法过滤掉乱码文本来工作。请参阅下面的更新代码:

func isReal(word: String) -> Bool {
    let checker = UITextChecker()
    let range = NSMakeRange(0, word.utf16.count)
    let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en_US")

    if misspelledRange.location == NSNotFound {
        //will hit this if it is a real word OR it can't determine that it's a mispelled word, so for a correctly spelled real word, guesses will have suggestions, for nonsense it will return nothing
        if let guesses = checker.guesses(forWordRange: range, in: word, language: "en_US"){
            if guesses.count > 0 {
                return true
            }
            else {
                return false
            } //gobblyguk
        }
        //nil guesses
        return false
    }
    else {
        return false
    }
    //return misspelledRange.location == NSNotFound  //doing it this way will treat gobblyguk like it's a word
}

编辑2:这似乎仍然行不通,因为一些真实的词会有建议,例如:

  • 双胞胎的猜测,= [“win”,“thin”,“twit”,“twins”,“tin”,“twine”,“twig”,“twi”,“twain”]

但是返回的单词没有拼错,但都是胡说八道,仍然会有建议,例如:

  • nntp 的猜测,= ["ninth"]
  • frcp 的猜测,= [“force”,“farce”,“frap”,“rcp”]

不知道如何继续.. 我试着只说某事是一个有效的词,如果它被认为没有拼错,以检查它的猜测是否包含自己,但这并不总是有效......

适用于完整:

  • 猜测full, = [“Full”, “fill”, “fall”, “fall”, “pull”, “fuel”, “full”, “dull”, “bull”, “flu”, “hull”, “cull”、“null”、“lull”、“gull”、“mull”、“fulls”、“furl”、“fula”]

但不是为了发烟:

  • 对 fume 的猜测,= [“fame”,“fuse”,“fumes”,“fumed”,“flume”,“fumet”,“fuze”]
4

0 回答 0