Python SequenceMatcher:只记录一次不匹配?
我正在使用Python SequenceMatcher:只记录一次不匹配?,python,if-statement,sequencematcher,Python,If Statement,Sequencematcher,我正在使用SequenceMatcher在一组文本中查找一组单词。我遇到的问题是,当它没有找到匹配项时,我需要记录,但每次记录一次。如果我尝试If语句,每次与另一个单词的比较失败时,它都会给出一个结果 names=[JOHN, LARRY, PETER, MARY] files = [path or link] for file in files: for name in names: if SequenceMatcher(None, name, file).r
SequenceMatcher
在一组文本中查找一组单词。我遇到的问题是,当它没有找到匹配项时,我需要记录,但每次记录一次。如果我尝试If语句,每次与另一个单词的比较失败时,它都会给出一个结果
names=[JOHN, LARRY, PETER, MARY]
files = [path or link]
for file in files:
for name in names:
if SequenceMatcher(None, name, file).ratio() > .9:
do something
else:
print name + 'not found'
我还尝试了re.match
和re.find
,我遇到了同样的问题。
上面的代码是我正在做的一个简单版本。我也是Python新手。
多谢各位 最简单的方法是跟踪匹配的名称,如果已经打印,则不打印:
seen = {}
for file in files:
for name in names:
if SequenceMatcher(None, name, file).ratio() > .9:
do something
elif name not in seen:
seen[name] = 0
print name + 'not found'
如果我正确地解释了您对问题的评论(但我不是100%确定!),这可能说明了您可以遵循的一般机制:
>>> text = 'If JOHN would be married to PETER, then MARY would probably be unhappy'
>>> names = ['JOHN', 'LARRY', 'PETER', 'MARY']
>>> [text.find(name) for name in names]
[3, -1, 28, 40] #This list will be always long as the names list
我所说的“您可以遵循的机制”是指SequenceMatcher
(我用内置方法find
)不仅应该作为测试工作[True | False],而且应该已经输出您想要存储的信息
嗯 你能澄清一下你的问题吗?如果一个单词被发现不止一次,输出应该是什么?如果只有一次呢?如果根本找不到呢?是的。如果找到一个名字,则输出的是紧跟在名字后面的关于这个人的一些信息。每个人在一篇文章中只被提及一次,但不是每个人都在每一篇文章中。如果一个人不在给定的文本中,我想保留一个记录。它之所以如此重要,是因为我正在创建
csv
文件,其中每列都是一个名称。这有用吗?谢谢这成功了!非常感谢。尽管我将seen=[]
放在了第一个for
和第二个for
之间,这样每个文件都会重置。