我正在做一个关于统计机器翻译的项目,我需要从POS标记的文本文件中提取与正则表达式匹配的行号(任何非分离的短语动词与粒子'out'),并写入行号到文件(在python中)。
我有这个正则表达式:'\ w * _VB。?\ sout_RP'和我的POS标记文本文件:'Corpus.txt'。 我想得到一个输出文件,其行号与上述正则表达式匹配,输出文件每行只有一行号(没有空行),例如:
2
5
44
到目前为止,我在脚本中的所有内容如下:
OutputLineNumbers = open('OutputLineNumbers', 'w')
with open('Corpus.txt', 'r') as textfile:
phrase='\w*_VB.?\sout_RP'
for phrase in textfile:
OutputLineNumbers.close()
知道如何解决这个问题吗?
提前感谢您的帮助!
答案 0 :(得分:5)
这可以解决你的问题,假设你在变量'phrase'
中有正确的正则表达式import re
# compile regex
regex = re.compile('[0-9]+')
# open the files
with open('Corpus.txt','r') as inputFile:
with open('OutputLineNumbers', 'w') as outputLineNumbers:
# loop through each line in corpus
for line_i, line in enumerate(inputFile, 1):
# check if we have a regex match
if regex.search( line ):
# if so, write it the output file
outputLineNumbers.write( "%d\n" % line_i )
答案 1 :(得分:2)
如果你的正则表达式是grep友好的,你可以直接使用bash。使用“-n”
显示行号例如:
grep -n "[1-9][0-9]" tags.txt
将输出匹配行,其中包含第一个
中包含的行号2569:vote2012
2570:30
2574:118
2576:7248
2578:2293
2580:9594
2582:577