逐行拆分句子文件,并使用findall提取某些参数



我正在尝试浏览一个句子文件,并在这些句子中逐行取出大写字母。

这是我正在处理的数据文件:

the dog_SUBJ bit_VERB the cat_OBJ
the man_SUBJ ran_VERB
the cat_SUBJ ate_VERB the cheese_OBJ

本质上,我希望程序为每行输出'SUBJ', 'VERB'和'OBJ'。但是,对于我现在正在处理的脚本的每一行,输出的是文件中每行的所有大写字母,而不仅仅是该行中的大写字母。

下面是我现在得到的输出:

Line 0: the dog_SUBJ bit_VERB the cat_OBJ

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

第一行:the man_SUBJ ran_VERB

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

第二行:the cat_SUBJ ate_VERB the cheese_OBJ

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

例如,我希望程序为第0行输出'SUBJ', 'VERB', 'OBJ',即该行中的内容。

下面是我正在使用的脚本:

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 i in lines:
        results += re.findall(r'[A-Z]+', i)

谢谢!

在没有明显原因的情况下迭代了行列表两次。试试这个:

import re
with open('findallEX.txt', 'r') as f:
    for ii, line in enumerate(f):
        print 'line %s: %s' % (ii, line)
        results = re.findall(r'[A-Z]+', line)
        print results

(我也做了一些更python化的东西;您应该使用上下文管理器打开文件(使用with),并且应该避免手动控制循环变量。

无regex:

from itertools import chain, groupby
with open('text.txt') as f:
    print [''.join(g) for k, g in 
           groupby(chain.from_iterable(f), key=str.isupper) if k]

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

最新更新