gpt4 book ai didi

objective-c - CFStringTokenizer 是否应该忽略标点符号?

转载 作者:可可西里 更新时间:2023-11-01 00:38:02 25 4
gpt4 key购买 nike

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

所以我的问题是:

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

这是我一直在使用的 playground:

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。

最佳答案

好吧,在四处寻找之后,我找到了一些答案。

Is the ignoring of symbols and punctuation as tokens expected behaviour?

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

Is there a way to get CFStringTokenizer to treat a symbol as a token or to keep a symbol as part of a token? i.e. "+", "-3" or "world!"

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

Can someone also explain how the CFStringTokenizerTokenType works for testing the type of token?

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

关于objective-c - CFStringTokenizer 是否应该忽略标点符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27404663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com