x、y、z の 3 つの単語があり、そこから 2 つの複合語 xy と yz を作成できます。
自然に発生するテキストでは、x、y、および z が互いに続くことがあります。最初のケースでは、私は持っています:
text="x-y z"
そして、「y z」ではなく「xy」を検出したい。私が行った場合:
v=c("x-y","y z")
vv=paste("\\b",v,"\\b",sep="")
sapply(vv,grepl,text,perl=TRUE)
私は c(TRUE,TRUE) を得ます。つまり、grepl は、y が単語内ダッシュを介して既に x にリンクされているという事実を捉えていないため、「y z」は実際にはテキスト内に存在しません。したがって、テキストの先頭に空白を追加した後、後読みを使用します。
text=paste("",text,sep=" ")
vv=paste("(?<= )\\b",v,"\\b",sep="")
sapply(vv,grepl,text,perl=TRUE)
今回は、目的の c(TRUE, FALSE) が得られます。さて、2番目のケースでは、私は持っています:
text="x y-z"
「x y」ではなく「yz」を検出したい。今回は先読みによる対称的なアプローチを採用して、次のことを試しました。
text=paste(text,"",sep=" ")
v=c("x y","y-z")
vv=paste("(?= )\\b",v,"\\b",sep="")
sapply(vv,grepl,text,perl=TRUE)
しかし今回は、予想どおり c(FALSE,TRUE) ではなく c(FALSE,FALSE) を取得しました。最初の位置の FALSE が予期されます (先読みにより、y の後の単語内ダッシュの存在が検出され、"x y" との一致が妨げられました)。しかし、「yz」とのマッチングを妨げているものは本当にわかりません。
ご協力ありがとうございました。