我正在尝试让一个机器人爬行文本,并高度准确地吸收所有合适的名词短语。因此,任何在句子中间大写的东西,其中任何连续大写的东西都被认为是同一个短语(和列表条目)的一部分。
到目前为止,我已经。
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)
它可以处理更多周围的小写词 但不太容易受到句号问题的影响。我已经在这上面做了几个小时了。有人知道我做错了什么吗?
一种选择是匹配所有的东西,确保匹配句号。然后你可以过滤掉所有包含句号的匹配项。
就像这样 \.? *[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)
['这个', '.这个', '另一个', '.还有', '你好']
['这个','另一个','你好']