试图对Python中所有大写的单词进行重新搜索,除了那些紧跟在句号后面的单词。

问题描述 投票:0回答:1

我正在尝试让一个机器人爬行文本,并高度准确地吸收所有合适的名词短语。因此,任何在句子中间大写的东西,其中任何连续大写的东西都被认为是同一个短语(和列表条目)的一部分。

到目前为止,我已经。

tag_string = re.findall('([a-zA-Z]+)\s([A-Z][a-z]*)\s([a-zA-Z]+)', in_string)

它对紧挨着句号的专有名词有问题。还会把周围的小写单词。

而且我还有

#tag_string = re.findall('([a-zA-Z]+)\s([A-Z][a-z]*)(\s([a-zA-Z]+)|\.)', in_string)

它可以处理更多周围的小写词 但不太容易受到句号问题的影响。我已经在这上面做了几个小时了。有人知道我做错了什么吗?

python regex string word
1个回答
0
投票

一种选择是匹配所有的东西,确保匹配句号。然后你可以过滤掉所有包含句号的匹配项。

就像这样 \.? *[A-Z][a-z]*

然后你可以过滤掉违规的匹配。

import re

out = re.findall('\.? *[A-Z][a-z]*', 'This is a sentence. This is Another sentence.   And this is a anoth.er Hello')
outFil = [x for x in out if x[0] != '.']
print(out, outFil)

['这个', '.这个', '另一个', '.还有', '你好']

['这个','另一个','你好']

© www.soinside.com 2019 - 2024. All rights reserved.