如何提取与文本文件中的正则表达式匹配的行号

时间:2013-06-12 22:44:42

标签: python regex nlp part-of-speech

我正在做一个关于统计机器翻译的项目,我需要从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()

知道如何解决这个问题吗?

提前感谢您的帮助!

2 个答案:

答案 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