为了账号安全,请及时绑定邮箱和手机立即绑定

Python RegEx代码可检测句子中的特定功能

Python RegEx代码可检测句子中的特定功能

交互式爱情 2021-05-30 16:09:12
我创建了一个简单的单词特征检测器。到目前为止,能够找到字符串中的特定特征(混杂在其中),但是该算法会与某些单词序列混淆。让我举例说明:from nltk.tokenize import word_tokenizenegative_descriptors = ['no', 'unlikely', 'no evidence of']negative_descriptors = '|'.join(negative_descriptors)negative_trailers = ['not present', 'not evident']negative_trailers = '|'.join(negative_descriptors)keywords = ['disc prolapse', 'vertebral osteomyelitis', 'collection']def feature_match(message, keywords, negative_descriptors):    if re.search(r"("+negative_descriptors+")" + r".*?" + r"("+keywords+")", message): return True    if re.search(r"("+keywords+")" + r".*?" + r"("+negative_trailers+")", message): return True以上返回True以下消息:message = 'There is no evidence of a collection.' message = 'A collection is not present.'这是正确的,因为它意味着我正在寻找的关键字/条件不存在。但是,它返回None以下消息:message = 'There is no evidence of disc prolapse, collection or vertebral osteomyelitis.'message = 'There is no evidence of disc prolapse/vertebral osteomyelitis/ collection.'它似乎将第一条消息中的“或脊椎骨髓炎”和第二条消息中的“/集合”匹配为否定匹配,但这是错误的,暗示该消息显示“我正在寻找的情况是存在的”。它实际上应该返回“ True”。我如何防止这种情况?
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您发布的代码存在几个问题:


negative_trailers = '|'.join(negative_descriptors) 应该 negative_trailers = '|'.join(negative_trailers )

您还应该像其他列表一样将列表关键字转换为字符串,以便将其传递给正则表达式

在正则表达式中使用 3 次 'r' 是没有用的

经过这些更正后,您的代码应如下所示:


negative_descriptors = ['no', 'unlikely', 'no evidence of']

negative_descriptors = '|'.join(negative_descriptors)

negative_trailers = ['not present', 'not evident']

negative_trailers = '|'.join(negative_trailers)


keywords = ['disc prolapse', 'vertebral osteomyelitis', 'collection']

keywords = '|'.join(keywords)


if re.search(r"("+negative_descriptors+").*("+keywords+")", message): neg_desc_present = True

if re.search(r"("+keywords+").*("+negative_trailers+")", message): neg_desc_present = True



查看完整回答
反对 回复 2021-06-01
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信