【问题标题】:Autocorrect a string in swift (IOS)快速自动更正字符串(IOS)
【发布时间】:2021-04-11 05:35:53
【问题描述】:

我是 StackOverflow 的新手,也是 IOS 开发的新手。 我的第一个应用程序的某些部分通过 IOS 语音识别在字符串中进行单个单词校正。 不幸的是,由于这些是单个单词或句子片段,语音识别就像一个新句子一样,并且将第一个单词大写。 有没有办法通过自动更正发送最终更正的字符串(可以包含多个句子)?这样句子中间大写这些简单的错误就会根据国家规范进行纠正(在德语中,名词和名称也在句子中间大写)。

谢谢

【问题讨论】:

    标签: ios swift speech-recognition autocorrect


    【解决方案1】:

    我相信this post 有您正在寻找的答案,但注意它会忽略专有名词和其他应该大写的单词。通过使用它以及UITextChecker,您也许可以得到您正在寻找的东西。它有点老了,没有为较新版本的 Swift 更新任何答案,所以我继续更新 this answer 的语法:

    extension String {
    
    func toUppercaseAtSentenceBoundary() -> String {
    
     var result = ""
        self.uppercased().enumerateSubstrings(in: self.startIndex..<self.endIndex, options: .bySentences) { (sub, _, _, _)  in
            result += String(sub!.prefix(1))
            result += String(sub!.dropFirst(1)).lowercased()
        }
    
        return result as String
      }
    }
    
    // Example usage
    var str = "this Is my String."
    print(str.toUppercaseAtSentenceBoundary())
    

    用于纠正拼写错误

    UITextChecker 类是您可能还想使用的东西,如果您想更正文本中的任何拼写错误(您确实提到了自动更正,所以我想我会添加它)。

    NSHipster has a nice tutorial on how to use it。这是他们教程中的代码示例。

    import UIKit
    
    let str = "hipstar"
    let textChecker = UITextChecker()
    let misspelledRange =
        textChecker.rangeOfMisspelledWord(in: str,
                                          range: NSRange(0..<str.utf16.count),
                                          startingAt: 0,
                                          wrap: false,
                                          language: "en_US")
    
    if misspelledRange.location != NSNotFound,
        let firstGuess = textChecker.guesses(forWordRange: misspelledRange,
                                             in: str,
                                             language: "en_US")?.first
    {
        print("First guess: \(firstGuess)") // First guess: hipster
    } else {
        print("Not found")
    }
    

    获取要检查的文本:

    如果您使用的是UITextField,则通过textFieldShouldEndEditing(_:) 方法实现UITextFieldDelegate 以在文本字段完成编辑时检查字符串的拼写。

    如果您使用UITextView,您可以使用类似的UITextViewDelegate 方法来确定何时检查和替换字符串中的各种单词。

    【讨论】:

    • 非常感谢您投入这么多精力给我写了这份全面的回复。它对我帮助很大。伟大的!新年快乐。保持健康......安德烈
    猜你喜欢
    • 2011-03-17
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2013-01-20
    • 2016-11-27
    相关资源
    最近更新 更多