Сформировать биграммы слова в Джулию, я мог бы просто пронестись через исходный список и список, который падает на первый элемент, например:Сформировать ngrams с Юлией
julia> s = split("the lazy fox jumps over the brown dog")
8-element Array{SubString{String},1}:
"the"
"lazy"
"fox"
"jumps"
"over"
"the"
"brown"
"dog"
julia> collect(zip(s, drop(s,1)))
7-element Array{Tuple{SubString{String},SubString{String}},1}:
("the","lazy")
("lazy","fox")
("fox","jumps")
("jumps","over")
("over","the")
("the","brown")
("brown","dog")
Чтобы сгенерировать триграмму я мог бы использовать один и те же collect(zip(...))
идиома, чтобы получить:
julia> collect(zip(s, drop(s,1), drop(s,2)))
6-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
("the","lazy","fox")
("lazy","fox","jumps")
("fox","jumps","over")
("jumps","over","the")
("over","the","brown")
("the","brown","dog")
Но я должен вручную добавить в 3-й список, чтобы пронестись через, есть идиоматическое способ таким образом, что я могу сделать любой заказ п -gram?
например. Я хотел бы избежать этого, чтобы извлечь 5-грамм:
julia> collect(zip(s, drop(s,1), drop(s,2), drop(s,3), drop(s,4)))
4-element Array{Tuple{SubString{String},SubString{String},SubString{String},SubString{String},SubString{String}},1}:
("the","lazy","fox","jumps","over")
("lazy","fox","jumps","over","the")
("fox","jumps","over","the","brown")
("jumps","over","the","brown","dog")
О, круто! Спасибо @HarrisonGrodin, не знал, что 'drop (s, 0)' возможно =) – alvas
@alvas Нет проблем! Кроме того, в случае, когда 'drop (s, 0)' не удалось, будет работать следующее. :) 'zip (s, (drop (s, k) для k = 1: n-1) ...)' –