A k skipgram - это ngram, которая является надмножеством всех ngrams и каждого (ki) skipgram до (ki) == 0 (который включает в себя 0 грамм пропуска). Итак, как эффективно вычислить эти skipgrams в python?
Ниже приведен код, который я пробовал, но он не работает так, как ожидалось:
<pre>
input_list = ['all', 'this', 'happened', 'more', 'or', 'less']
def find_skipgrams(input_list, N,K):
bigram_list = []
nlist=[]
K=1
for k in range(K+1):
for i in range(len(input_list)-1):
if i+k+1<len(input_list):
nlist=[]
for j in range(N+1):
if i+k+j+1<len(input_list):
nlist.append(input_list[i+k+j+1])
bigram_list.append(nlist)
return bigram_list
</pre>
Вышеприведенный код не отображается правильно, но print find_skipgrams(['all', 'this', 'happened', 'more', 'or', 'less'],2,1)
дает следующий вывод
[['this', "произошло", "больше" ], [ "произошло", "больше" , "или", "больше" , 'или', 'less'], ['или', 'less'], ['less'], ['used ',' more ',' or '], ['more', 'or', 'less'], ['or', 'less'], ['less'], ['less']]
Код, указанный здесь, также не дает корректного вывода: https://github.com/heaven00/skipgram/blob/master/skipgram.py
print skipgram_ndarray ( "Как ваше имя" ) дает: ['What, is', 'is, your', 'your, name', 'name', 'What, your', 'is, name']
name - это униграмма!