我正在尝试通过使用 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”]