2016-09-20 9 views
-2

У меня есть список (маркер, тег) кортежей, который выглядит следующим образом:Подсчет вхождений кортежей

token_tags = 
[('book', 'noun'), 
('run', 'noun'), 
(',', ','), 
('book', 'verb'), 
('run', 'adj'), 
('run', 'verb')] 

Я пытаюсь выяснить, сколько раз знак был первый помеченный как «существительное» затем как «глагол» в его следующем появлении в списке. Поэтому я не должен считать «run», потому что он был помечен как прилагательное между его назначением «существительное» и «глагол». Любые предложения о том, как это сделать?

Я преобразовал кортеж в Словаре следующим

d = {} 
for x, y in token_tags: 
d.setdefault(x, []).append(y) 

Итак, теперь d содержит:

{'book': ['noun', 'verb'], 'run': ['noun', 'adj', 'verb'], ',': [',']} 

Я попытался регулярные expresion, чтобы решить эту проблему, но не работает.

+0

Описание проблемы имеет смысл. Так в чем ваш вопрос? –

+2

SO - это не служба написания кода, можете ли вы показать, что вы пробовали? Одна вещь, которую следует рассмотреть, - это преобразовать этот список кортежей в альтернативную структуру данных, которая упростит проверку порядка назначения тэгов (например: '{token: [tags]}') – AChampion

+0

Не отправляйте тот же вопрос, что и другой вопрос это то же самое, что и этот, который вы только что опубликовали, - http://stackoverflow.com/questions/39582639/counting-items-inside-tuples-in-python –

ответ

0

теперь, когда у вас есть в словаре, считая, сколько раз определенная пара появляется простой, идея состоит в том, чтобы взять два последовательные элемент в списке и проверить, являются ли они парой желания, например

>>> data = {'book': ['noun', 'verb'], 'run': ['noun', 'adj', 'verb'], ',': [',']} 
>>> result={} 
>>> for token, tag_list in data.items(): 
     count = 0 
     for i in range(1,len(tag_list)): 
      if tag_list[i-1]=="noun" and tag_list[i]=="verb": 
       count = count + 1 
     result[token] = count 

>>> result 
{',': 0, 'book': 1, 'run': 0} 
>>> 
+0

почему голос? – Copperfield