0

假设我有这样的文本/字符串

This is something before any tag, today's date is 09-06-2012 blah blah
<firsttag> content of first tag </firsttag> <sentence> This is the
first sentence in my paragraph that needs to be <bold> displayed.
</bold> </sentence> <secondtag> blah blah blah <italics> another blah
</italics></secondtag> <sentence> This is the second sentence in my
paragraph that needs to be displayed and it has some weird contents
like \n\n\n and inbetween reference tags like <link> http://google.com
</link></sentence> <thirdtag>blah blah </thirdtag><sentence>Tennis is
a great sport, I'm really sad that <link
synthetic="True"><target>Roger Federer </link></target>Roger Federer
lost yesterday.</sentence>

输出应该是这样的

这是我的段落中需要显示的第一句话。这是我的段落中需要显示的第二句,它有一些奇怪的内容,比如参考标签之间,比如网球是一项很棒的运动,我真的很难过罗杰·费德勒昨天输了。

我的正则表达式解析后的输出应该只有我们里面的内容和标签。所有标签、奇怪的 \n\n 字符、里面的所有垃圾内容都需要删除,比如“Roger Federer”,因为链接只是指向 Roger Federer 的页面,因为这是一个 Freebase-wiki (WEX)我正在处理的数据集。一个简单的python re 代码来帮助我解决这个问题将非常有用。我正在尝试的代码是这样的。

for line in fileinput.input():
        p = re.sub('<[^>]*>', '', line)
        p = re.sub('\n','',p)
print p

由于我正在处理大型文件,因此如果您可以帮助我使用 map-reduce (hadoop) 代码,那也会非常有帮助。提前致谢 :)

4

1 回答 1

1

我为您的问题修改了一个自定义解决方案。您必须输入您的字符串作为参数s

def convert_with_regex(s):
    sents = re.compile(r"<sentence>(.*?)</sentence>", re.S)
    fin = re.compile(r"<(.*)>(.*?)</.*>|[\n]+", re.S)
    result=[]
    for sent in sents.findall(s.replace("<bold>","").replace("</bold>","")):
        result.append(fin.sub("",sent))
    return ''.join(result)

我知道它不是那么优雅,而是“形式遵循功能”:)

于 2012-09-06T20:38:47.563 回答