我有兴趣在Julia中使用正则表达式分割一行.我的输入是Blei的LDA-C格式的语料库,docId wordID : wordCNT例如,包含五个单词的文档表示如下:
186 0:1 12:1 15:2 3:1 4:1
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法将单词及其计数聚合成单独的数组,即我想要的输出:
words = [0, 12, 15, 3, 4]
counts = [1, 1, 2, 1, 1]
Run Code Online (Sandbox Code Playgroud)
我试过用了m = match(r"(\d+):(\d+)",line).但是,它只找到第一对0:1.我正在寻找类似Python的东西re.compile(r'[ :]').split(line).我如何根据朱莉娅的正则表达式划分一条线?
这里没有必要使用正则表达式; Julia的split函数允许使用多个字符来定义拆分应发生的位置:
julia> split(line, [':',' '])
11-element Array{SubString{String},1}:
"186"
"0"
"1"
"12"
"1"
"15"
"2"
"3"
"1"
"4"
"1"
julia> words = v[2:2:end]
5-element Array{SubString{String},1}:
"0"
"12"
"15"
"3"
"4"
julia> counts = v[3:2:end]
5-element Array{SubString{String},1}:
"1"
"1"
"2"
"1"
"1"
Run Code Online (Sandbox Code Playgroud)
我发现了eachmatch在正则表达式匹配上返回迭代器的方法。另一种解决方案是迭代每个匹配:
words, counts = Int64[], Int64[]
for m in eachmatch(r"(\d+):(\d+)", line)
wd, cnt = m.captures
push!(words, parse(Int64, wd))
push!(counts, parse(Int64, cnt))
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |