2013-04-22 3 views
2

Я создаю программу в python, которая будет проходить список предложений и находить слова в капители в предложениях. Я использовал функцию findall для получения капиталов на данный момент.Поиск номера индекса для строки слов

Вот пример вывода я получаю в минуту:

line 0: the dog_SUBJ bit_VERB the cat_OBJ 
['S'] ['U'] ['B'] ['J'] [] ['V'] ['E'] ['R'] ['B'] [] ['O'] ['B'] ['J'] 

Однако, я хочу для вывода, чтобы быть полноценными слова, а так:

['SUBJ'] [] ['VERB'] [] ['OBJ'] 

Я также хочу индексы этих слов:

['SUBJ'] [0] 
['VERB'] [1] 
['OBJ'] [2] 

Возможно ли это? Я видел, как это делалось раньше в терминале, и я думаю, что используется «индекс» или что-то подобное?

Вот мой код ниже (насколько у меня):

import re, sys 
f = open('findallEX.txt', 'r') 
lines = f.readlines() 
ii=0 
for l in lines: 
    sys.stdout.write('line %s: %s' %(ii, l)) 
    ii = ii + 1 
    results = [] 
    for s in l: 
     results.append(re.findall('[A-Z]+', s)) 

Спасибо! Любая помощь будет принята с благодарностью!

+0

Будьте осторожны, так как регулярное выражение будет соответствовать заглавные буквы в правильном существительных/начале предложений и т.д. Для надежности я бы совпадет подчеркивание а также 'm = re.findall ('_ [AZ] +', string)'. Подчеркивание всегда приводит к тому, что так легко удалить с помощью строковой нарезки 'm = [x [1:] для x в m]' – ejrb

ответ

2

Что-то вроде:

>>> s = 'the dog_SUBJ bit_VERB the cat_OBJ' 
>>> import re 
>>> from itertools import count 
>>> zip(re.findall('[A-Z]+', s), count()) 
[('SUBJ', 0), ('VERB', 1), ('OBJ', 2)] 

Формат в зависимости от обстоятельств ...

+2

без использования itertools: 'list (enumerate (re.findall ('[AZ] +', s))) ' – root

+0

@root yup - если OP собирается форматировать кортеж, тогда на самом деле не имеет значения, в какой позиции индекс идет в любом случае ... –

+0

Небольшая модификация кода @ root:' list (enumerate ([x [ 1:] для x в re.findall ('_ [AZ] +', l)])) '. Теперь работает с 'Dog_SUBJ bit_VERB Cat_OBJ' и аналогичным. – ejrb

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