gpt4 book ai didi

julia - 如何在 Julia 中从字符转换为字符串?

转载 作者:行者123 更新时间:2023-12-03 21:09:46 24 4
gpt4 key购买 nike

我正在尝试使用简单的词汇将单词转换为单热编码数组的数组。我构建的字典是基于字符的。

vocab = "abc"
char_id = Dict([ (index, char) for (char, index) in enumerate(vocab) ])

# Dict{Char,Int64} with 3 entries:
# 'a' => 1
# 'c' => 3
# 'b' => 2

function char_to_one_hot(char, char_id, max_length)
one_hot = zeros(max_length)
setindex!(one_hot, 1.0, char_id[char])
end

function word_to_one_hot(word, char_id, max_length)
map((char) -> char_to_one_hot(char, char_id, max_length), split(word, ""))
end

word_to_one_hot(word, char_id, max_length)
不幸的是,这会返回一个错误,因为 char_id Dict 使用字符键而不是字符串。如何将字典转换为使用字符串值作为键,或将字符转换为字符串以便比较匹配?
ERROR: KeyError: key "a" not found
Stacktrace:
[1] getindex at ./dict.jl:467 [inlined]
[2] char_to_one_hot(::SubString{String}, ::Dict{Char,Int64}, ::Int64) at ./REPL[456]:3
[3] #78 at ./REPL[457]:2 [inlined]
[4] iterate at ./generator.jl:47 [inlined]
[5] _collect(::Array{SubString{String},1}, ::Base.Generator{Array{SubString{String},1},var"#78#79"{Dict{Char,Int64},Int64}}, ::Base.EltypeUnknown, ::Base.HasShape{1}) at ./array.jl:699
[6] collect_similar at ./array.jl:628 [inlined]
[7] map at ./abstractarray.jl:2162 [inlined]
[8] word_to_one_hot(::String, ::Dict{Char,Int64}, ::Int64) at ./REPL[457]:2
[9] top-level scope at REPL[458]:1

最佳答案

一个字符串已经可以被看作是一个字符的集合,所以你不需要 split这个单词。
然而,map专门用于在字符串上只能映射返回字符的函数。字符串也被广播系统视为标量。这给我们留下了几个选择:一个简单的 for循环或可能是生成器/理解。
我想在这种情况下,我会理解:

function char_to_one_hot(char, char_id, max_length)
one_hot = zeros(max_length)
setindex!(one_hot, 1.0, char_id[char])
end

function word_to_one_hot(word, char_id, max_length)
[char_to_one_hot(char, char_id, max_length) for char in word]
end
我认为这可以满足您的期望:
julia> vocab = "abc"
"abc"

julia> char_id = Dict([ (index, char) for (char, index) in enumerate(vocab) ])
Dict{Char,Int64} with 3 entries:
'a' => 1
'c' => 3
'b' => 2

julia> word_to_one_hot("acb", char_id, 5)
3-element Array{Array{Float64,1},1}:
[1.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 1.0, 0.0, 0.0]
[0.0, 1.0, 0.0, 0.0, 0.0]

如果您仍然想在 1 个字符的字符串和字符之间进行转换,您可以这样做:
julia> str="a"; first(str)
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

julia> chr='a'; string(chr)
"a"

关于julia - 如何在 Julia 中从字符转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64718757/

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