0

私の意図は、患者が高血圧であるかどうかを発見することです.

これは一致するはずです:

患者は糖尿病、高コレステロール、高血圧です。

患者は、糖尿病、高コレステロール、高血圧に陽性です。

これは一致しないはずです:

患者には、糖尿病、高コレステロール、または高血圧症はありません。

患者は、糖尿病、高コレステロール、または高血圧を患っていないことが知られています。

これを使用して両方を一致させることができます:

patient[^\.]{0,}?hypertension

ただし、これはhttp://gskinner.com/RegExr/では機能しません (まだ両方に一致します) 。

patient[^\.]{0,}?(?!no)[^\.]{0,}?hypertension

では、「患者」と「高血圧」の間に「いいえ」を含む一致を除外するにはどうすればよいでしょうか?

「患者」、「いいえ」、「高血圧症」の間に任意の数の文字が含まれる可能性があることに注意してください.

どうもありがとう!!!

PS: 否定の発見がこれよりもはるかに複雑になる可能性があることはわかっていますが、現在の取り組みでは、否定を意味する単語を特定するだけで十分です。

4

2 に答える 2

0

人間の言語の防水正規表現を書くのは難しいですが、私が提案するパターンは、どのように進めるかのアイデアを与えることができます:

\bpatient\b(?>[^nhi.]++|\B[nhi]|n(?!o\b)|h(?!ypertension\b)|i(?!s\s+negative\s+for\b|sn't\s+known\s+to\s+have\b))+hypertension\b

ただし、二重否定のある文では、パターンが失敗します。

例:The patient isn't known to have diabetes, but hypertension.

于 2013-11-13T17:55:47.673 に答える
0

先読みを使用して一方を一致させることができますが、他方を一致させることはできません。

(?=(patient.*hypertension))(?!(patient.*no.*hypertension))

そして、Rohit & Casimir が言及したように、正規表現はこのタスクに適したツールではありません: 可能なすべてのオプションを含むパーサーを構築する必要があります (たとえば、Casimir が示した「二重否定」など)。見逃した他の可能性に出くわしたときは、時々パーサーを更新する必要があります。

于 2013-11-13T18:20:29.747 に答える