【发布时间】:2018-02-16 20:19:18
【问题描述】:
我正在尝试创建一个函数来测试两个单词是否接近或不在一个字符串中,但是对于两个测试我都得到“它们很远”,所以每个案例都是None。
import re
nearby_words = ['daisy', 'martha']
def check_nearness(text):
word1 = nearby_words[0]
word2 = nearby_words[1]
pattern = re.compile("\b(?:"+word1+"\W+(?:\w+\W+){1,5}?"+word2+"|"+word2+"\W+(?:\w+\W+){1,5}?"+word1+")\b")
if re.match(pattern,text) is not None:
print('they are near')
else:
print('they are far')
check_nearness("daisy is near martha")
check_nearness("daisy is in this case more than five words from martha")
【问题讨论】:
-
您如何定义亲近度?您是否考虑过使用编辑距离/Levenshtein 距离?
-
似乎 OP 对分隔两个感兴趣的单词的字面数(或字符)感兴趣......我在这个假设中错了吗?如果您对两个单词的相似性感兴趣,那么 Levenshtein 距离将是一个很好的起点(以及模糊的 Python 库)
-
您的正则表达式字符串不正确,您应该使用单引号和
r。试试r'\b(?:'+word1+r'\W+(?:\w+\W+){1,5}?'+word2+r'|'+word2+r'\W+(?:\w+\W+){1,5}?'+word1+r')\b' -
@pault 含糊不清,rahlf23 是正确的,我的意思是两个词之间的词数