【问题标题】:Is CFStringTokenizer supposed to ignore punctuation and symbols?CFStringTokenizer 是否应该忽略标点和符号?
【发布时间】:2015-02-08 20:43:09
【问题描述】:

我只是在学习 Swift 并玩弄 CFStringTokenizer,我注意到当字符串被标记化时,标点符号和符号被忽略了。我对标记化的主题不太熟悉,但如果我需要做更复杂的标记化,需要我找到诸如“!”之类的东西,我想更好地理解标记器是如何工作的。或“+”。任何帮助将不胜感激。

所以我的问题是:

  • 忽略符号和标点符号是预期的行为吗?
  • 有没有办法让 CFStringTokenizer 将符号视为标记或将符号保留为标记的一部分?即“+”、“-3”或“世界!”
  • 谁能解释一下 CFStringTokenizerTokenType 如何用于测试令牌类型?

这是我一直在使用的游乐场:

import Cocoa

var str = "I have 2 pairs of pants + five shirts, but threw out 3 socks with holes! 2+5-3"
var tokens: [(token: String, range: CFRange, type: CFStringTokenizerTokenType)] = []
var strLen = countElements(str)
var strRng = CFRangeMake(0, strLen)
var flag = UInt(kCFStringTokenizerUnitWord)
var locale = CFLocaleCopyCurrent()

var tknizr = CFStringTokenizerCreate( kCFAllocatorDefault, str, strRng, flag, locale)
var tknType = CFStringTokenizerAdvanceToNextToken(tknizr)


do {
    var tRng = CFStringTokenizerGetCurrentTokenRange(tknizr)

    var from = advance(str.startIndex, tRng.location)
    var to = advance(from, tRng.length)
    var substrRng = Range<String.Index>(start: from, end: to)
    var substr = str.substringWithRange(substrRng)

    println("String: \(substr)")
    println("Token Type: \(tknType.rawValue)\n")

    tokens += [(substr, tRng, tknType)]

    tknType = CFStringTokenizerAdvanceToNextToken(tknizr)
} while tknType.rawValue != 0

--更新--

我添加了objective-c标签,因为这也适用于obj-c。

【问题讨论】:

    标签: objective-c swift tokenize


    【解决方案1】:

    好吧,经过一番环顾,我找到了一些答案。

    忽略符号和标点符号是预期的行为吗?

    是的,kCFStringTokenizerUnitWord 只会提取单词作为标记,因此这是预期的行为。我为 CFStringTokenizer 使用了错误的选项。

    有没有办法让 CFStringTokenizer 将符号视为令牌或将符号保留为令牌的一部分?即“+”、“-3”或“世界!”

    我应该改用kCFStringTokenizerUnitWordBoundary。它将捕获符号作为标记。这样做的缺点是空格也被捕获为标记,但很容易被一些额外的逻辑忽略。

    谁能解释一下 CFStringTokenizerTokenType 是如何测试令牌类型的?

    在这里感觉像个新手,它们是位掩码,而不是字面值。 因此,我用逻辑运算符测试原始值是错误的方法。位运算符是测试标记类型的正确方法。

    【讨论】:

      猜你喜欢
      • 2017-05-05
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多