我正在尝试编写一个能够识别支持条款的代码(即'检测''证据'),除非在之前有一个否定词最多3个字。
一些例子: “FISH测试未发现BCL2易位” “FISH试验没有提供BCL2易位的证据”
我尝试使用lookbehind,但由于它需要一个确切的长度,我不能灵活地回顾1-3个单词。
我尝试使用钢化点,但它会提供任意数量的单词。
我目前拥有的代码在“支持诊断”术语之前只看一个单词。
grepl("(?<!\\bnot\\b\\s|cannot\\s|n't\\s|\\bno\\b\\s|negative\\s)(reveal|seen|show|detect|demonstrate|confirm|identif|evidence|suggest|positive|observe)(?:(?!\\bnot\\b)(?!cannot)(?!n't)(?!\\bno\\b)(?!negative for)(?!, ).)*?(bcl-?2|14[q]?[;:]18)"), y, perl=TRUE,ignore.case = T)
答案 0 :(得分:1)
在这种情况下,后视无助,您可以做的是系统地搜索否定词并使用(*SKIP)(*FAIL)
最多三个词来丢弃字符串的一部分:
(\\bnot\\b|\\bcannot\\b|n't\\b)(?:\\W++(?!(?1))\\w+){0,3}(*SKIP)(*F)|\\b(reveal|seen|show)\\b(?!\\snot\\b)