2015-01-26 3 views
1
import nltk 
from nltk.collocations import * 

tokens = ['a','b','c','d','b','c','a','b','c'] 
tokens2 = [['a','b','c','d'],['b','c','a','b','c']] 
bigrams = nltk.bigrams(tokens) 

fdist = nltk.FreqDist(bigrams) 
for i,j in fdist.items(): 
    print i,j`` 

print fdist.most_common(2) 

Код выше работает для ввода как токенов, но он выдает ошибку, когда я использую токены2. В конце концов, я должен вернуть ему 2 лучших биграма, когда ему дается набор токенов. Помощь будет высоко оценена.Python Top Bigrams

+0

Так что 'tokens2' - это список списка жетонов, не так ли? Но вы говорите «наборы» - это то, что вы хотите, или ...? –

+0

да, вы правы, что tokens2 - это список списка токенов. Как токены, так и токены2 являются возможными входами, в которых я должен возвращать две наиболее распространенные bigrams. –

+0

. Чтобы принять совершенно разные типы аргументов и действовать по-разному на каждом, это абсолютно злая спецификация, поскольку для этого требуется тестирование типа. Я бы стоял принципиально и отталкивался от этой спецификации (я занимал такие позиции в течение многих десятилетий с тех пор, как я учился в колледже, и, несмотря на некоторые трудные последствия, это послужило моей карьере, и что бы я ни смог сделать в этот мир, очень хорошо). Я рекомендую вам сделать то же самое, объясняя **, почему ** ожидание того, что вы принимаете оба списка строк и списки списков, является злым, абсурдным и бессмысленным. –

ответ

2

Если у вас есть список списков лексем (как token2),

import collections 
cnt = collections.Counter() 

for toks in token2: 
    cnt.update(nltk.bigrams(toks)) 

print(cnt.most_common(2)) 

будет работать. Если то, что у вас есть, совершенно иное, например, один список, например tokens, или set, вы можете упомянуть, все может измениться - но мы не можем читать ваши мысли, поэтому вам лучше отредактировать свой Q, чтобы объяснить точно, что вы после!

+0

Метод должен принимать один список, например, tok, а также список списка токенов типа tok2. Оттуда верните две наиболее распространенные биграмы. –

+0

@ Datguyovrder, см. Мои комментарии к вашему Q. Поскольку AFAIK у вас нет заложников против меня, я не собираюсь проверять тип, чтобы удовлетворить эту злую, абсурдную, сумасшедшую, неоправданную спецификацию, в которой вам нужно принять совершенно разные типы аргументов и действия, основанные на типе arg (спецификация, которая требует ужасов проверки типов). Если вы не можете убедить своего профессора или ТС или того, кто поставил эту сумасшедшую спецификацию, пожалуйста, свяжитесь со мной, и я сделаю все возможное. –

Смежные вопросы